45
Dependencies: mbed BufferedSerial LS7366LIB FastPWM
pc_serial.h
- Committer:
- lsh2205
- Date:
- 2020-03-23
- Revision:
- 0:c21936a3520a
File content as of revision 0:c21936a3520a:
#define debug1 0 #define debug2 0 #define Start_com 1 Serial pc(USBTX, USBRX); //Serial pc2(PB_6, PB_7); char check_pitch[6]; char rx_buffer[100]={0,}; char command[100]={0,}; char tx_buffer[100]="txdat32768,32768,32768,32768,32768,32768\n"; int tx_index = 0; int rx_index = 0; bool rx_flag = false; long data_recive=0; long bool_cnt=0; double set_data[100] = {0x00, }; unsigned int cmd_roll, cmd_pitch, cmd_heave, cmd_sway, cmd_surge, cmd_yaw; double set_num = 0; void Start_Command(); void Set_Arrangement(); bool data_error_check(); void char_save_arr(char c); //void Rx_Interrupt(); void READ_and_SAVE(); void Serial_Init(); void Rx_Buffer_Clear(); void comunication() { /* taget_speed=set_data[0]; Speed_Igain=set_data[1]; Speed_Pgain=set_data[2]; taget_position=set_data[3]; Position_input_filter=set_data[4]; position_Pgain1=set_data[5]; position_Pgain2=set_data[6]; position_Pgain3=set_data[7]; offset=set_data[8]; */ READ_and_SAVE(); Start_Command(); } void Start_Command() { bool com_error=false; unsigned int temp=0; unsigned int data1=32768; unsigned int data2=32768; unsigned int data3=32768; unsigned int data4=32768; unsigned int data5=32768; unsigned int data6=32768; com_error=data_error_check(); if(com_error==false) if((command[0] == 'S') && (command[1] == 't') && (command[2] == 'a') && (command[3] == 'r') && (command[4] == 't')) { int num=0; for(int i=5; i<100;i++) { if(command[i]==',') { if(num==0) data1=temp; if(num==1) data2=temp; if(num==2) data3=temp; if(num==3) data4=temp; if(num==4) data5=temp; temp=0; num++; } else if(command[i]=='\n') { if(num==5) data6=temp; }else temp=temp*10+command[i]-0x30; } cmd_roll = data1; cmd_pitch = data2; cmd_heave = data3; cmd_sway = data4; cmd_surge = data5; cmd_yaw = data6; /* pc.printf("%d,",cmd_roll); pc.printf("%d,",cmd_pitch); pc.printf("%d,",cmd_heave); pc.printf("%d,",cmd_sway); pc.printf("%d,",cmd_surge); pc.printf("%d,",cmd_yaw); pc.printf("\n"); */ } } bool data_error_check() // ,아스키코드 44 숫자 아스키코드 0x30, 0x39 { bool error=false; if(!((command[0] == 'S') && (command[1] == 't') && (command[2] == 'a') && (command[3] == 'r') && (command[4] == 't'))) error=true; for(int i=5; i<41;i++) { if( command[i]>0x39 || command[i]<0x30 ) { if((command[i]=='\n')) break; if(!(command[i]==0x2C)) error=true; } } for(int i=41;i<100;i++) { if(!(command[i]==0)) error=true; } for(int i=0;i<17;i++) { if(command[i]==0) error=true; } return error; } // Set arrangement function void Set_Arrangement() { bool set_error = false; bool set_point = false; double square_root = 0.1; double error_temp = set_num; if((command[0] == 'S') && (command[1] == 'E') && (command[2] == 'T')) { for(int i = 3; i < 100; i++) { // Error check if(command[i] != '.' && command[i] < '0') { set_error = true; break; } else if(command[i] != '.' && command[i] > '9') { set_error = true; break; } if(command[i] == '\n') { break; } else if(command[i] == '.' && set_point == false) { set_point = true; } else if(set_point == false) { set_num = (set_num * 10) + (command[i] - 0x30); } else if(set_point == true) { set_num = set_num + ((command[i] - 0x30) * square_root); square_root = square_root * 0.1; } } if(set_error == true) { set_num = error_temp; } } } bool tx_done=false; void READ_and_SAVE() { cs = 1; char c; tx_done=false; for(int i=0; i<64; i++) { wait_us(20); c = spi1.write(255); if(c==255) { break; } else { //pc.printf("%d\r\n",c); char_save_arr(c); } } cs = 0; } void char_save_arr(char c) { rx_buffer[rx_index]=c; rx_index++; if(rx_index>99) rx_index=99; if(c=='\n') { data_recive++; for(int i =0; i<100;i++) command[i]=rx_buffer[i]; Rx_Buffer_Clear(); rx_index=0; } } // Interrupt functions /* void Rx_Interrupt() { if(pc.readable()) { char c = pc.getc(); rx_buffer[rx_index] = c; if(rx_buffer[rx_index] == '\n') { rx_flag = true; } rx_index++; if(rx_index > 99) { rx_index = 99; } } return; } */ // Basic serial communication functions void Serial_Init() { pc.format(8, Serial::None, 1); pc.baud(2000000); //pc2.format(8, Serial::None, 1); //pc2.baud(115200); //pc.attach(&Rx_Interrupt, Serial::RxIrq); } void Rx_Buffer_Clear() { for(int i = 0; i < 100; i++) { rx_buffer[i] = 0x00; } } /* if(com_error==false) { cmd_roll = data1; cmd_pitch = data2; cmd_heave = data3; cmd_sway = data4; cmd_surge = data5; cmd_yaw = data6; } */