int main(int argc, char* argv[]) { printf("[i] Start... \n"); Serial serial; #if defined(WIN32) serial.open(SERIAL_PORT_NAME, SERIAL_PORT_RATE, true); #elif defined(LINUX) serial.open(SERIAL_PORT_NAME, SERIAL_PORT_RATE); #endif if(!serial.connected()) { printf("[!] Cant open port!\n"); return -1; } char c = 'y'; int res = 12; char buf[BUF_SIZE1]; memset(buf, 0, BUF_SIZE1); while(true) { serial.write( &c, 1 ); #if 0 if(res = serial.available()){ if( res = serial.Read(buf, res) ){ printf("%d %s\n", res, buf); } } #else if(serial.waitInput(1000)==0) printf("[i] timeout!\n"); else { if(res = serial.available()) { res = serial.read(buf, res); printf("%d %s\n", res, buf); } } #endif } serial.close(); printf("[i] End.\n"); return 0; }
void loop() { int len; if(serial.available()) { len = serial.available(); serial.Read(buffer, len, 0); printf("%s\n",buffer); } printf("This is setup\n"); sleep(1); }
void draw() { background(0); while(myPort.available()>0) print((char)myPort.read()); }
void check_data() { /* while(myPort.available()>0) { int a=myPort.read(); print(a+" "); if((a==8)||(a==10)) println(); }*/ while(myPort.available()>0) { char a=(char)myPort.read(); print(a); } }
TEST(Serial, WriteCOM) { Serial serial; serial.open("COM7", 9600); if(!serial.connected()){ FAIL()<<"cant open serial port!"; } char buf[1024]; int res = 0; while(1){ char wbuf[] = {0xff, 0xff, 0x00, 0x00, 0x00, 0x00 ,0xff}; serial.write(wbuf, sizeof(wbuf)); if( serial.waitInput(1000) > 0){ if( (res = serial.available()) > 0 ){ if( res = serial.read(buf, res) ){ printf("[i] read data(%d): \n", res); for(int i=0; i<res; i++){ printf("%02X ", (unsigned char)buf[i]); if(i>0 && (i+1)%16 == 0) { printf("\t"); for(int j=i-15; j<=i; j++){ printf("%c", buf[j]); } printf("\n"); } } printf("\n"); res = 0; } } } Sleep(1000); } }
int main() { /* declarations */ bool special_mode; indications command, last_command; indication_mode pattern; unsigned char buffer[32]; Serial serial; PID accel; /* initialize hardware */ leds_init(); buttons_init(); timer1_init(); /* setup control loop for brake light */ pid_zeroize(&accel); accel.proportional_gain = 1.0f; accel.integral_gain = 0.0f; accel.derivative_gain = 0.0f; /* initialize and read the lsm303 */ lsm303_begin(); lsm303_read(); /* setup usb serial port */ serial.begin(); /* initialize pattern settings */ last_command = ind_off; command = ind_off; pattern = off; /* set light/indication mode to PWM driven */ brake_lights(pwm); //brake_lights(off); /* reset leds and animation driver */ turn_signal(command, pattern); leds_reset(); /* check to see if switch is depressed on startup */ command = get_signal_switch_status(); if(command != ind_off) { special_mode = true; } else { special_mode = false; } while(true) { /* control brake light using mag/accel data */ brake_light_control(&accel); /* check to see if the user input has changed state */ command = get_signal_switch_status(); /* if "special mode" is enabled, play a fancy animation on idle */ if(special_mode && (command == ind_off)) { /* animation selection */ command = ind_hazard; pattern = loop; } else { /* default pattern, no command override */ pattern = scroll; } /* if the user input has changed, update the pattern driver state */ if (command != last_command) { leds_reset(); turn_signal(command, pattern); } if(serial.available()) { int size = serial.read(buffer); if (size!=0) { serial.write((const uint8_t*)buffer, size); serial.write('\n'); } } serial.poll(); /* debounce user input */ last_command = command; _delay_ms(3); } return 0; }
void process_serial(Serial &serial, TBuff<uint8_t> &buff, orcp2::packet &pkt) { int res = 0; if(!buff.data || !pkt.message.data) { ROS_ERROR("[!] Error: no memory!\n"); return ; } ros::Time current_time; ros_4wd_driver::drive_telemetry_4wd drive; ros_4wd_driver::sensors_telemetry_4wd sensors; ros_4wd_driver::imu_raw_data imu; if( res = serial.waitInput(500) ) { //printf("[i] waitInput: %d\n", res); if( (res = serial.available()) > 0 ) { //printf("[i] available: %d\n", res); //res = res > (buff.real_size-buff.size) ? (buff.real_size-buff.size) : res ; if( (res = serial.read(buff.data+buff.size, buff.real_size-buff.size)) > 0 ) { buff.size += res; // get packet from data while ( (res = orcp2::get_packet(buff.data, buff.size, &pkt)) > 0) { // ROS_INFO("[i] res: %02d message: %04X size: %04d CRC: %02X buff.size: %02d\n", // res, pkt.message_type, pkt.message_size, pkt.checksum, buff.size); uint8_t crc = pkt.calc_checksum(); if(crc == pkt.checksum) { // ROS_INFO("[i] Good message CRC: %02X\n", pkt.checksum); current_time = ros::Time::now(); switch(pkt.message_type) { case ORCP2_SEND_STRING: pkt.message.data[pkt.message.size]=0; ROS_INFO("[i] String: %s\n", pkt.message.data); //printf("[i] counter: %d\n", counter); #if 0 if(++counter > 50) { //printf("[i] digitalWrite: %d\n", val); val = !val; orcp.digitalWrite(13, val); counter = 0; } #endif break; case ORCP2_MESSAGE_IMU_RAW_DATA: deserialize_imu3_data(pkt.message.data, pkt.message.size, &raw_imu_data); ROS_INFO( "[i] IMU: acc: [%d %d %d] mag: [%d %d %d] gyro: [%d %d %d]\n", raw_imu_data.Accelerometer[0], raw_imu_data.Accelerometer[1], raw_imu_data.Accelerometer[2], raw_imu_data.Magnetometer[0], raw_imu_data.Magnetometer[1], raw_imu_data.Magnetometer[2], raw_imu_data.Gyro[0], raw_imu_data.Gyro[1], raw_imu_data.Gyro[2] ); imu.header.stamp = current_time; imu.accelerometer1 = raw_imu_data.Accelerometer[0]; imu.accelerometer2 = raw_imu_data.Accelerometer[1]; imu.accelerometer3 = raw_imu_data.Accelerometer[2]; imu.magnetometer1 = raw_imu_data.Magnetometer[0]; imu.magnetometer2 = raw_imu_data.Magnetometer[1]; imu.magnetometer3 = raw_imu_data.Magnetometer[2]; imu.gyro1 = raw_imu_data.Gyro[0]; imu.gyro2 = raw_imu_data.Gyro[1]; imu.gyro3 = raw_imu_data.Gyro[2]; imu_raw_data_pub.publish(imu); break; case ORCP2_MESSAGE_ROBOT_4WD_DRIVE_TELEMETRY: deserialize_robot_4wd_drive_part(pkt.message.data, pkt.message.size, &robot_data); ROS_INFO( "[i] Drive telemetry: bmp: %d enc: [%d %d %d %d] PWM: [%d %d %d %d]\n", robot_data.Bamper, robot_data.Encoder[0], robot_data.Encoder[1], robot_data.Encoder[2], robot_data.Encoder[3], robot_data.PWM[0], robot_data.PWM[1], robot_data.PWM[2], robot_data.PWM[3] ); drive.header.stamp = current_time; drive.bamper = robot_data.Bamper; drive.encoder1 = robot_data.Encoder[0]; drive.encoder2 = robot_data.Encoder[1]; drive.encoder3 = robot_data.Encoder[2]; drive.encoder4 = robot_data.Encoder[3]; drive.pwm1 = robot_data.PWM[0]; drive.pwm2 = robot_data.PWM[1]; drive.pwm3 = robot_data.PWM[2]; drive.pwm4 = robot_data.PWM[3]; drive_telemetry_pub.publish(drive); calc_odometry(drive); break; case ORCP2_MESSAGE_ROBOT_4WD_SENSORS_TELEMETRY: deserialize_robot_4wd_sensors_part(pkt.message.data, pkt.message.size, &robot_data); ROS_INFO( "[i] Sensors telemetry: US: %d IR: [%d %d %d %d] V: %d\n", robot_data.US[0], robot_data.IR[0], robot_data.IR[1], robot_data.IR[2], robot_data.IR[3], robot_data.Voltage ); sensors.header.stamp = current_time; sensors.us = robot_data.US[0]; sensors.ir1 = robot_data.IR[0]; sensors.ir2 = robot_data.IR[1]; sensors.ir3 = robot_data.IR[2]; sensors.ir4 = robot_data.IR[3]; sensors.voltage = robot_data.Voltage; sensors_telemetry_pub.publish(sensors); break; case ORCP2_MESSAGE_ROBOT_4WD_TELEMETRY: deserialize_robot_4wd(pkt.message.data, pkt.message.size, &robot_data); ROS_INFO( "[i] Drive Telemetry: bmp: %d enc: [%d %d %d %d] PWM: [%d %d %d %d]\n", robot_data.Bamper, robot_data.Encoder[0], robot_data.Encoder[1], robot_data.Encoder[2], robot_data.Encoder[3], robot_data.PWM[0], robot_data.PWM[1], robot_data.PWM[2], robot_data.PWM[3] ); drive.header.stamp = current_time; drive.bamper = robot_data.Bamper; drive.encoder1 = robot_data.Encoder[0]; drive.encoder2 = robot_data.Encoder[1]; drive.encoder3 = robot_data.Encoder[2]; drive.encoder4 = robot_data.Encoder[3]; drive.pwm1 = robot_data.PWM[0]; drive.pwm2 = robot_data.PWM[1]; drive.pwm3 = robot_data.PWM[2]; drive.pwm4 = robot_data.PWM[3]; drive_telemetry_pub.publish(drive); calc_odometry(drive); ROS_INFO( "[i] Sensors Telemetry: US: %d IR: [%d %d %d %d] V: %d\n", robot_data.US[0], robot_data.IR[0], robot_data.IR[1], robot_data.IR[2], robot_data.IR[3], robot_data.Voltage ); sensors.header.stamp = current_time; sensors.us = robot_data.US[0]; sensors.ir1 = robot_data.IR[0]; sensors.ir2 = robot_data.IR[1]; sensors.ir3 = robot_data.IR[2]; sensors.ir4 = robot_data.IR[3]; sensors.voltage = robot_data.Voltage; sensors_telemetry_pub.publish(sensors); break; default: ROS_INFO("[i] Unknown message type: %04X!\n", pkt.message_type); break; } } else { ROS_WARN("[!] Bad message CRC: %02X vs: %02X\n", crc, pkt.checksum); } } } else { ROS_WARN("[!] too much data: %d (%d)\n", res, buff.size); buff.size = 0; } } else { ROS_INFO("[!] no available: %d\n", res); } } else { ROS_INFO("[!] waitInput timeout: %d\n", res); } }
int getValue() { int value = -1; while (port.available() >= 3) { if (port.read() == 0xff) { value = (port.read() << 8) | (port.read()); } } return value; }