If it's not even getting to the part where it's printing "e", which occurs before any ROS-related code, then this is not ROS related and is not appropriate for this list. The support page has guidelines for what is appropriate: http://www.ros.org/wiki/Support Josh On Wed, Aug 11, 2010 at 10:48 AM, ibwood wrote: > > Hi everyone, > > I have some C++ code that compiles without any errors. The code is designed > to communicate with the usb ports and send values to motor drivers for > operation with a joystick. I'm having trouble deciphering why it is not > outputting "e" and continuing on to initialize and publish to the > joyChatter > node. Please tell me if I have any syntax incorrect. Here is the code: > > #include "ros/ros.h" > #include "std_msgs/String.h" > > #include > #include > #include > > #include > #include > #include > #include > #include > #include > #include > #include > #include > #include > > #define PI 3.14159265358979323846264338327950288419716 > > using namespace std; > > const double CIRC=0.7853981633974483, R=0.55, ratio=127; // > initialize > constants > > int main(int argc, char **argv) > { > int ms1, ms2, ms3, ms4; //motor speeds of omnimaxbot > int i, j, wr, rd, x=0, y=0, z=0, fd, fd1, fd2, numSent=0; > char parseChar[1], stringIn[50], mc_char; > > // unsigned long bytes_read = 0; //Number of bytes > read from port > // unsigned long bytes_written = 0; //Number of bytes > written to the port > > > > > // attempt to open serial port connected to the microprocessor > > fd = open("/dev/HCS12",O_RDWR | O_NOCTTY | O_NDELAY); > > > system("stty -F /dev/HCS12 115200 cs8 -cstopb -parity -icanon hupcl > -crtscts min 1 time 1"); // set settings for HCS12 > microcontroller > > > // check for errors opening port > > if (fd == -1 ) > > { > > printf("open_port: Unable to open /dev/HCS12\n"); > > } > > > else // if no error > > { > > fcntl(fd,F_SETFL,0); > > printf("Test Port HCS12 has been successfully opened and %d > is the file > description\n",fd); > > } > > //open serial port connected to motor driver for motors 1 and 2 > fd1 = open("/dev/Driver12",O_RDWR | O_NOCTTY | O_NDELAY); > > system("stty -F /dev/Driver12 9600 cs8 -cstopb -parity -icanon hupcl > -crtscts min 1 time 1"); //settings for motor drivers > > if (fd1 == -1 ) > > { > > perror("open_port: Unable to open /dev/Driver12\n"); > > } > > else // if no error > > { > > fcntl(fd1,F_SETFL,0); > > printf("Test Port Driver12 has been successfully opened and > %d is the file > description\n",fd1); > > } > > //open serial port connected to motor driver for motors 3 and 4 > fd2 = open("/dev/Driver34",O_RDWR | O_NOCTTY | O_NDELAY); > > system("stty -F /dev/Driver34 9600 cs8 -cstopb -parity -icanon hupcl > -crtscts min 1 time 1"); //settings for motor drivers > > if (fd2 == -1 ) > > { > > perror("open_port: Unable to open /dev/Driver34\n"); > > } > > else // if no error > > { > > fcntl(fd2,F_SETFL,0); > > printf("Test Port Driver34 has been successfully opened and > %d is the file > description\n",fd2); > > } > > printf("e"); > // initalize node > ros::init(argc, argv, "joyTalker"); > ros::NodeHandle joyTalker; > printf("f"); > // Publish to topic joyChatter > ros::Publisher pub = > joyTalker.advertise("joyChatter", > 1000); > printf("0"); > ros::Rate r(10); > printf("1"); > while (joyTalker.ok()) > { > parseChar[0]=0; > > for(j=0; j<50; j++) > { > stringIn[j]=0; //initialize the string > } > > i=0; > printf("2"); > while(parseChar[0] != 10) > { > if(i==50) // exceeds the allowable size > { > break; > } > > rd = read(fd,parseChar,1); > // printf("%s ",parseChar); > if ((parseChar[0] > 43) && ((parseChar[0] < 58) || > (parseChar[0]==32))) > { > stringIn[i]=parseChar[0]; > i++; > } > > // kinematics of the omnimaxbot > ms1 = > ((x/sqrt(2))+y+(R*tan((z/ratio)*(2*PI))))/CIRC; > ms2 = > (-(x/sqrt(2))+y+(R*tan((z/ratio)*(2*PI))))/CIRC; > ms3 = > ((x/sqrt(2))+y-(R*tan((z/ratio)*(2*PI))))/CIRC; > ms4 = > (-(x/sqrt(2))+y-(R*tan((z/ratio)*(2*PI))))/CIRC; > > if(ms1<0) //Motor Controller > 1, Port A, Motor 1 > { > ms1=-ms1; > mc_char = 'a'; > } > else > { > mc_char = 'A'; > } > //write data to the specified port > numSent = sprintf(stringIn, "!%c%d", mc_char, ms1); > wr = write(fd1,stringIn,numSent); > > if(ms2<0) //Motor Controller > 1, Port B, Motor 2 > { > ms2=-ms2; > mc_char = 'a'; > } > else > { > mc_char = 'A'; > } > > numSent = sprintf(stringIn, "!%c%d", mc_char, ms2); > wr = write(fd1,stringIn,numSent); > > if(ms3<0) //Motor Controller > 2, Port A, Motor 3 > { > ms3=-ms3; > mc_char = 'b'; > } > else > { > mc_char = 'B'; > } > numSent = sprintf(stringIn, "!%c%d", mc_char, ms3); > wr = write(fd2,stringIn,numSent); > > if(ms4<0) //Motor Controller > 2, Port B, Motor 4 > { > ms4=-ms4; > mc_char = 'b'; > } > else > { > mc_char = 'B'; > } > numSent = sprintf(stringIn, "!%c%d", mc_char, ms4); > wr = write(fd2,stringIn,numSent); > } > printf("got this string %s\n",stringIn); > printf("8"); > // convert message to string for ROS node communication > std_msgs::String msg; > std::stringstream ss; > ss << stringIn; > ROS_INFO("%s", ss.str().c_str()); > msg.data = ss.str(); > // publish data under topic joyChatter > pub.publish(msg); > > ros::spinOnce(); > } > > return 0; > } > > -- > View this message in context: > http://ros-users.122217.n3.nabble.com/ROS-node-publishing-not-responsive-in-C-code-tp1091286p1091286.html > Sent from the ROS-Users mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by > > Make an app they can't live without > Enter the BlackBerry Developer Challenge > http://p.sf.net/sfu/RIM-dev2dev > _______________________________________________ > ros-users mailing list > ros-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ros-users > _______________________________________________ > ros-users mailing list > ros-users@code.ros.org > https://code.ros.org/mailman/listinfo/ros-users >