test4

Dependencies:   mbed BufferedSerial LS7366LIB2 FastPWM

Committer:
lsh3146
Date:
Tue Jul 28 01:42:16 2020 +0000
Revision:
2:14b52dee1c35
Parent:
0:7cff999a7f5c
Child:
3:7b195612e26d
Child:
4:bf278ddb8504
work

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gohgwaja 0:7cff999a7f5c 1 #ifndef _PC_SERIAL_H_
gohgwaja 0:7cff999a7f5c 2 #define _PC_SERIAL_H_
gohgwaja 0:7cff999a7f5c 3
gohgwaja 0:7cff999a7f5c 4 #define debug1 0
gohgwaja 0:7cff999a7f5c 5 #define debug2 0
gohgwaja 0:7cff999a7f5c 6 #define Start_com 1
gohgwaja 0:7cff999a7f5c 7
gohgwaja 0:7cff999a7f5c 8 Serial pc(USBTX, USBRX);
gohgwaja 0:7cff999a7f5c 9
gohgwaja 0:7cff999a7f5c 10 char check_pitch[6];
gohgwaja 0:7cff999a7f5c 11 char rx_buffer[100]={0,};
gohgwaja 0:7cff999a7f5c 12 char command[100]={0,};
gohgwaja 0:7cff999a7f5c 13 char tx_buffer[100]="txdat32768,32768,32768,32768,32768,32768\n";
gohgwaja 0:7cff999a7f5c 14 int tx_index = 0;
gohgwaja 0:7cff999a7f5c 15 int rx_index = 0;
gohgwaja 0:7cff999a7f5c 16 bool rx_flag = false;
gohgwaja 0:7cff999a7f5c 17
gohgwaja 0:7cff999a7f5c 18 long data_recive=0;
gohgwaja 0:7cff999a7f5c 19
gohgwaja 0:7cff999a7f5c 20 long bool_cnt=0;
gohgwaja 0:7cff999a7f5c 21
gohgwaja 0:7cff999a7f5c 22 double set_data[100] = {0x00, };
gohgwaja 0:7cff999a7f5c 23
gohgwaja 0:7cff999a7f5c 24 unsigned int cmd_roll, cmd_pitch, cmd_heave, cmd_sway, cmd_surge, cmd_yaw;
gohgwaja 0:7cff999a7f5c 25
gohgwaja 0:7cff999a7f5c 26 void Start_Command();
gohgwaja 0:7cff999a7f5c 27 void Set_Arrangement();
gohgwaja 0:7cff999a7f5c 28
gohgwaja 0:7cff999a7f5c 29 bool data_error_check();
gohgwaja 0:7cff999a7f5c 30 void char_save_arr(char c);
gohgwaja 0:7cff999a7f5c 31 //void Rx_Interrupt();
gohgwaja 0:7cff999a7f5c 32 void READ_and_SAVE();
gohgwaja 0:7cff999a7f5c 33 void Serial_Init();
gohgwaja 0:7cff999a7f5c 34 void Rx_Buffer_Clear();
gohgwaja 0:7cff999a7f5c 35
gohgwaja 0:7cff999a7f5c 36
gohgwaja 0:7cff999a7f5c 37
gohgwaja 0:7cff999a7f5c 38 void comunication()
gohgwaja 0:7cff999a7f5c 39 {
gohgwaja 0:7cff999a7f5c 40
gohgwaja 0:7cff999a7f5c 41
gohgwaja 0:7cff999a7f5c 42 for(int i=0;i<6;i++)
gohgwaja 0:7cff999a7f5c 43 {
gohgwaja 0:7cff999a7f5c 44 Speed_Pgain[i]=set_data[(i+1)*10+0];
gohgwaja 0:7cff999a7f5c 45 Speed_Igain[i]=set_data[(i+1)*10+1];
gohgwaja 0:7cff999a7f5c 46 position_Pgain[i]=set_data[(i+1)*10+2];
gohgwaja 0:7cff999a7f5c 47 Position_input_filter[i]=set_data[(i+1)*10+3];
gohgwaja 0:7cff999a7f5c 48 Speed_I_input_filter[i]=set_data[(i+1)*10+4];
gohgwaja 0:7cff999a7f5c 49 offset[i]=set_data[(i+1)*10+5];
gohgwaja 0:7cff999a7f5c 50 }
gohgwaja 0:7cff999a7f5c 51
gohgwaja 0:7cff999a7f5c 52
gohgwaja 0:7cff999a7f5c 53 READ_and_SAVE();
gohgwaja 0:7cff999a7f5c 54 //pc.printf("%s,",command);
gohgwaja 0:7cff999a7f5c 55 Set_Arrangement();
gohgwaja 0:7cff999a7f5c 56 Start_Command();
gohgwaja 0:7cff999a7f5c 57
gohgwaja 0:7cff999a7f5c 58 }
gohgwaja 0:7cff999a7f5c 59
gohgwaja 0:7cff999a7f5c 60 void Start_Command()
gohgwaja 0:7cff999a7f5c 61 {
gohgwaja 0:7cff999a7f5c 62 bool com_error=false;
gohgwaja 0:7cff999a7f5c 63
gohgwaja 0:7cff999a7f5c 64 unsigned int temp=0;
gohgwaja 0:7cff999a7f5c 65
gohgwaja 0:7cff999a7f5c 66 unsigned int data1=32768;
gohgwaja 0:7cff999a7f5c 67 unsigned int data2=32768;
gohgwaja 0:7cff999a7f5c 68 unsigned int data3=32768;
gohgwaja 0:7cff999a7f5c 69 unsigned int data4=32768;
gohgwaja 0:7cff999a7f5c 70 unsigned int data5=32768;
gohgwaja 0:7cff999a7f5c 71 unsigned int data6=32768;
gohgwaja 0:7cff999a7f5c 72
gohgwaja 0:7cff999a7f5c 73 com_error=data_error_check();
gohgwaja 0:7cff999a7f5c 74
gohgwaja 0:7cff999a7f5c 75 if(com_error==false)
gohgwaja 0:7cff999a7f5c 76 if((command[0] == 'S') && (command[1] == 't') && (command[2] == 'a') && (command[3] == 'r') && (command[4] == 't'))
gohgwaja 0:7cff999a7f5c 77 {
gohgwaja 0:7cff999a7f5c 78
gohgwaja 0:7cff999a7f5c 79 int num=0;
gohgwaja 0:7cff999a7f5c 80 for(int i=5; i<100;i++)
gohgwaja 0:7cff999a7f5c 81 {
gohgwaja 0:7cff999a7f5c 82
gohgwaja 0:7cff999a7f5c 83 if(command[i]==',')
gohgwaja 0:7cff999a7f5c 84 {
gohgwaja 0:7cff999a7f5c 85 if(num==0)
gohgwaja 0:7cff999a7f5c 86 data1=temp;
gohgwaja 0:7cff999a7f5c 87 if(num==1)
gohgwaja 0:7cff999a7f5c 88 data2=temp;
gohgwaja 0:7cff999a7f5c 89 if(num==2)
gohgwaja 0:7cff999a7f5c 90 data3=temp;
gohgwaja 0:7cff999a7f5c 91 if(num==3)
gohgwaja 0:7cff999a7f5c 92 data4=temp;
gohgwaja 0:7cff999a7f5c 93 if(num==4)
gohgwaja 0:7cff999a7f5c 94 data5=temp;
gohgwaja 0:7cff999a7f5c 95
gohgwaja 0:7cff999a7f5c 96 temp=0;
gohgwaja 0:7cff999a7f5c 97 num++;
gohgwaja 0:7cff999a7f5c 98 }
gohgwaja 0:7cff999a7f5c 99 else if(command[i]=='\n')
gohgwaja 0:7cff999a7f5c 100 {
gohgwaja 0:7cff999a7f5c 101 if(num==5)
gohgwaja 0:7cff999a7f5c 102 data6=temp;
gohgwaja 0:7cff999a7f5c 103 }else
gohgwaja 0:7cff999a7f5c 104 temp=temp*10+command[i]-0x30;
gohgwaja 0:7cff999a7f5c 105 }
gohgwaja 0:7cff999a7f5c 106
lsh3146 2:14b52dee1c35 107
gohgwaja 0:7cff999a7f5c 108 cmd_roll = data1;
gohgwaja 0:7cff999a7f5c 109 cmd_pitch = data2;
gohgwaja 0:7cff999a7f5c 110 cmd_heave = data3;
gohgwaja 0:7cff999a7f5c 111 cmd_sway = data4;
gohgwaja 0:7cff999a7f5c 112 cmd_surge = data5;
gohgwaja 0:7cff999a7f5c 113 cmd_yaw = data6;
gohgwaja 0:7cff999a7f5c 114
gohgwaja 0:7cff999a7f5c 115 /*
gohgwaja 0:7cff999a7f5c 116 pc.printf("%d,",cmd_roll);
gohgwaja 0:7cff999a7f5c 117 pc.printf("%d,",cmd_pitch);
gohgwaja 0:7cff999a7f5c 118 pc.printf("%d,",cmd_heave);
gohgwaja 0:7cff999a7f5c 119 pc.printf("%d,",cmd_sway);
gohgwaja 0:7cff999a7f5c 120 pc.printf("%d,",cmd_surge);
gohgwaja 0:7cff999a7f5c 121 pc.printf("%d,",cmd_yaw);
gohgwaja 0:7cff999a7f5c 122 pc.printf("\n");
gohgwaja 0:7cff999a7f5c 123 */
gohgwaja 0:7cff999a7f5c 124 }
gohgwaja 0:7cff999a7f5c 125
gohgwaja 0:7cff999a7f5c 126 }
gohgwaja 0:7cff999a7f5c 127
gohgwaja 0:7cff999a7f5c 128 bool data_error_check() // ,아스키코드 44 숫자 아스키코드 0x30, 0x39
gohgwaja 0:7cff999a7f5c 129 {
gohgwaja 0:7cff999a7f5c 130 bool error=false;
gohgwaja 0:7cff999a7f5c 131
gohgwaja 0:7cff999a7f5c 132
gohgwaja 0:7cff999a7f5c 133 if(!((command[0] == 'S') && (command[1] == 't') && (command[2] == 'a') && (command[3] == 'r') && (command[4] == 't')))
gohgwaja 0:7cff999a7f5c 134 error=true;
gohgwaja 0:7cff999a7f5c 135
gohgwaja 0:7cff999a7f5c 136 for(int i=5; i<41;i++)
gohgwaja 0:7cff999a7f5c 137 {
gohgwaja 0:7cff999a7f5c 138 if( command[i]>0x39 || command[i]<0x30 )
gohgwaja 0:7cff999a7f5c 139 {
gohgwaja 0:7cff999a7f5c 140 if((command[i]=='\n'))
gohgwaja 0:7cff999a7f5c 141 break;
gohgwaja 0:7cff999a7f5c 142
gohgwaja 0:7cff999a7f5c 143 if(!(command[i]==0x2C))
gohgwaja 0:7cff999a7f5c 144 {
gohgwaja 0:7cff999a7f5c 145 error=true;
gohgwaja 0:7cff999a7f5c 146 break;
gohgwaja 0:7cff999a7f5c 147 }
gohgwaja 0:7cff999a7f5c 148 }
gohgwaja 0:7cff999a7f5c 149 }
gohgwaja 0:7cff999a7f5c 150
gohgwaja 0:7cff999a7f5c 151 for(int i=41;i<100;i++)
gohgwaja 0:7cff999a7f5c 152 {
gohgwaja 0:7cff999a7f5c 153 if(command[i]!=0)
gohgwaja 0:7cff999a7f5c 154 error=true;
gohgwaja 0:7cff999a7f5c 155 break;
gohgwaja 0:7cff999a7f5c 156 }
gohgwaja 0:7cff999a7f5c 157
gohgwaja 0:7cff999a7f5c 158 for(int i=0;i<17;i++)
gohgwaja 0:7cff999a7f5c 159 {
gohgwaja 0:7cff999a7f5c 160 if(command[i]==0)
gohgwaja 0:7cff999a7f5c 161 error=true;
gohgwaja 0:7cff999a7f5c 162 break;
gohgwaja 0:7cff999a7f5c 163 }
gohgwaja 0:7cff999a7f5c 164
gohgwaja 0:7cff999a7f5c 165 return error;
gohgwaja 0:7cff999a7f5c 166 }
gohgwaja 0:7cff999a7f5c 167
gohgwaja 0:7cff999a7f5c 168
gohgwaja 0:7cff999a7f5c 169 // Set arrangement function
gohgwaja 0:7cff999a7f5c 170 void Set_Arrangement()
gohgwaja 0:7cff999a7f5c 171 {
gohgwaja 0:7cff999a7f5c 172 bool set_error = false;
gohgwaja 0:7cff999a7f5c 173 bool set_point = false;
gohgwaja 0:7cff999a7f5c 174 int set_index = 0;
gohgwaja 0:7cff999a7f5c 175 double set_num = 0;
gohgwaja 0:7cff999a7f5c 176 double square_root = 0.1;
gohgwaja 0:7cff999a7f5c 177
gohgwaja 0:7cff999a7f5c 178 if((command[0] == 'S') && (command[1] == 'E') && (command[2] == 'T') && (command[5] == '='))
gohgwaja 0:7cff999a7f5c 179 {
gohgwaja 0:7cff999a7f5c 180 for(int i = 3; i < 5; i++)
gohgwaja 0:7cff999a7f5c 181 {
gohgwaja 0:7cff999a7f5c 182 if(command[i] < '0' || command[i] > '9')
gohgwaja 0:7cff999a7f5c 183 {
gohgwaja 0:7cff999a7f5c 184 set_error = true;
gohgwaja 0:7cff999a7f5c 185 break;
gohgwaja 0:7cff999a7f5c 186 }
gohgwaja 0:7cff999a7f5c 187 }
gohgwaja 0:7cff999a7f5c 188 if(set_error == false)
gohgwaja 0:7cff999a7f5c 189 {
gohgwaja 0:7cff999a7f5c 190 set_index = ((command[3] - 0x30) * 10) + (command[4] - 0x30);
gohgwaja 0:7cff999a7f5c 191
gohgwaja 0:7cff999a7f5c 192 for(int i = 6; i < 100; i++)
gohgwaja 0:7cff999a7f5c 193 {
gohgwaja 0:7cff999a7f5c 194 // Error check
gohgwaja 0:7cff999a7f5c 195 if(command[i] != '.' && (command[i] < '0' || command[i] > '9'))
gohgwaja 0:7cff999a7f5c 196 {
gohgwaja 0:7cff999a7f5c 197 if(command[i] != '\n')
gohgwaja 0:7cff999a7f5c 198 {
gohgwaja 0:7cff999a7f5c 199 set_error = true;
gohgwaja 0:7cff999a7f5c 200 }
gohgwaja 0:7cff999a7f5c 201 break;
gohgwaja 0:7cff999a7f5c 202 }
gohgwaja 0:7cff999a7f5c 203
gohgwaja 0:7cff999a7f5c 204 // Operation source
gohgwaja 0:7cff999a7f5c 205 else if(command[i] == '.' && set_point == false)
gohgwaja 0:7cff999a7f5c 206 {
gohgwaja 0:7cff999a7f5c 207 set_point = true;
gohgwaja 0:7cff999a7f5c 208 }
gohgwaja 0:7cff999a7f5c 209 else if(set_point == false)
gohgwaja 0:7cff999a7f5c 210 {
gohgwaja 0:7cff999a7f5c 211 set_num = (set_num * 10) + (command[i] - 0x30);
gohgwaja 0:7cff999a7f5c 212 }
gohgwaja 0:7cff999a7f5c 213 else if(set_point == true)
gohgwaja 0:7cff999a7f5c 214 {
gohgwaja 0:7cff999a7f5c 215 set_num = set_num + ((command[i] - 0x30) * square_root);
gohgwaja 0:7cff999a7f5c 216 square_root = square_root * 0.1;
gohgwaja 0:7cff999a7f5c 217 }
gohgwaja 0:7cff999a7f5c 218 }
gohgwaja 0:7cff999a7f5c 219 }
gohgwaja 0:7cff999a7f5c 220 if((set_error == false) && (set_data[set_index] != set_num))
gohgwaja 0:7cff999a7f5c 221 {
gohgwaja 0:7cff999a7f5c 222 set_data[set_index] = set_num;
gohgwaja 0:7cff999a7f5c 223 Erase_Flash();
gohgwaja 0:7cff999a7f5c 224 Write_Flash('F');
gohgwaja 0:7cff999a7f5c 225 Write_Flash('L');
gohgwaja 0:7cff999a7f5c 226 Write_Flash('A');
gohgwaja 0:7cff999a7f5c 227 Write_Flash('S');
gohgwaja 0:7cff999a7f5c 228 Write_Flash('H');
gohgwaja 0:7cff999a7f5c 229 for(int i = 0; i < 100; i++)
gohgwaja 0:7cff999a7f5c 230 {
gohgwaja 0:7cff999a7f5c 231 Write_Flash((uint32_t)set_data[i]);
gohgwaja 0:7cff999a7f5c 232 }
gohgwaja 0:7cff999a7f5c 233 pc.printf("SET%02d=%10.5f\n",set_index,set_data[set_index]);
gohgwaja 0:7cff999a7f5c 234 }
gohgwaja 0:7cff999a7f5c 235 }
gohgwaja 0:7cff999a7f5c 236
gohgwaja 0:7cff999a7f5c 237 }
gohgwaja 0:7cff999a7f5c 238
gohgwaja 0:7cff999a7f5c 239
gohgwaja 0:7cff999a7f5c 240 bool tx_done=false;
gohgwaja 0:7cff999a7f5c 241 void READ_and_SAVE()
gohgwaja 0:7cff999a7f5c 242 {
gohgwaja 0:7cff999a7f5c 243
gohgwaja 0:7cff999a7f5c 244 at_spi_cs = 1;
gohgwaja 0:7cff999a7f5c 245 char c;
gohgwaja 0:7cff999a7f5c 246 tx_done=false;
gohgwaja 0:7cff999a7f5c 247 for(int i=0; i<64; i++)
gohgwaja 0:7cff999a7f5c 248 {
gohgwaja 0:7cff999a7f5c 249 wait_us(20);
gohgwaja 0:7cff999a7f5c 250 c = spi1.write(255);
gohgwaja 0:7cff999a7f5c 251
gohgwaja 0:7cff999a7f5c 252 if(c==255)
gohgwaja 0:7cff999a7f5c 253 {
gohgwaja 0:7cff999a7f5c 254 break;
gohgwaja 0:7cff999a7f5c 255 }
gohgwaja 0:7cff999a7f5c 256 else
gohgwaja 0:7cff999a7f5c 257 {
gohgwaja 0:7cff999a7f5c 258 //pc.printf("%d\r\n",c);
gohgwaja 0:7cff999a7f5c 259 char_save_arr(c);
gohgwaja 0:7cff999a7f5c 260 }
gohgwaja 0:7cff999a7f5c 261 }
gohgwaja 0:7cff999a7f5c 262 at_spi_cs = 0;
gohgwaja 0:7cff999a7f5c 263
gohgwaja 0:7cff999a7f5c 264 }
gohgwaja 0:7cff999a7f5c 265
gohgwaja 0:7cff999a7f5c 266
gohgwaja 0:7cff999a7f5c 267 void char_save_arr(char c)
gohgwaja 0:7cff999a7f5c 268 {
gohgwaja 0:7cff999a7f5c 269 rx_buffer[rx_index]=c;
gohgwaja 0:7cff999a7f5c 270 rx_index++;
gohgwaja 0:7cff999a7f5c 271 if(rx_index>99)
gohgwaja 0:7cff999a7f5c 272 rx_index=99;
gohgwaja 0:7cff999a7f5c 273 if(c=='\n')
gohgwaja 0:7cff999a7f5c 274 {
gohgwaja 0:7cff999a7f5c 275 data_recive++;
gohgwaja 0:7cff999a7f5c 276 for(int i =0; i<100;i++)
gohgwaja 0:7cff999a7f5c 277 command[i]=rx_buffer[i];
gohgwaja 0:7cff999a7f5c 278
gohgwaja 0:7cff999a7f5c 279 Rx_Buffer_Clear();
gohgwaja 0:7cff999a7f5c 280 }
gohgwaja 0:7cff999a7f5c 281 }
gohgwaja 0:7cff999a7f5c 282
gohgwaja 0:7cff999a7f5c 283
gohgwaja 0:7cff999a7f5c 284
gohgwaja 0:7cff999a7f5c 285
gohgwaja 0:7cff999a7f5c 286 // Interrupt functions
gohgwaja 0:7cff999a7f5c 287 /*
gohgwaja 0:7cff999a7f5c 288 void Rx_Interrupt()
gohgwaja 0:7cff999a7f5c 289 {
gohgwaja 0:7cff999a7f5c 290 if(pc.readable())
gohgwaja 0:7cff999a7f5c 291 {
gohgwaja 0:7cff999a7f5c 292 char c = pc.getc();
gohgwaja 0:7cff999a7f5c 293 rx_buffer[rx_index] = c;
gohgwaja 0:7cff999a7f5c 294 if(rx_buffer[rx_index] == '\n')
gohgwaja 0:7cff999a7f5c 295 {
gohgwaja 0:7cff999a7f5c 296 rx_flag = true;
gohgwaja 0:7cff999a7f5c 297 }
gohgwaja 0:7cff999a7f5c 298 rx_index++;
gohgwaja 0:7cff999a7f5c 299 if(rx_index > 99)
gohgwaja 0:7cff999a7f5c 300 {
gohgwaja 0:7cff999a7f5c 301 rx_index = 99;
gohgwaja 0:7cff999a7f5c 302 }
gohgwaja 0:7cff999a7f5c 303 }
gohgwaja 0:7cff999a7f5c 304 return;
gohgwaja 0:7cff999a7f5c 305 }
gohgwaja 0:7cff999a7f5c 306 */
gohgwaja 0:7cff999a7f5c 307 // Basic serial communication functions
gohgwaja 0:7cff999a7f5c 308
gohgwaja 0:7cff999a7f5c 309 void Serial_Init()
gohgwaja 0:7cff999a7f5c 310 {
gohgwaja 0:7cff999a7f5c 311 pc.format(8, Serial::None, 1);
gohgwaja 0:7cff999a7f5c 312 pc.baud(500000);
gohgwaja 0:7cff999a7f5c 313
gohgwaja 0:7cff999a7f5c 314 //pc2.format(8, Serial::None, 1);
gohgwaja 0:7cff999a7f5c 315 //pc2.baud(115200);
gohgwaja 0:7cff999a7f5c 316 //pc.attach(&Rx_Interrupt, Serial::RxIrq);
gohgwaja 0:7cff999a7f5c 317 }
gohgwaja 0:7cff999a7f5c 318
gohgwaja 0:7cff999a7f5c 319
gohgwaja 0:7cff999a7f5c 320 void Rx_Buffer_Clear()
gohgwaja 0:7cff999a7f5c 321 {
gohgwaja 0:7cff999a7f5c 322 for(int i = 0; i < 100; i++)
gohgwaja 0:7cff999a7f5c 323 {
gohgwaja 0:7cff999a7f5c 324 rx_buffer[i] = 0x00;
gohgwaja 0:7cff999a7f5c 325 }
gohgwaja 0:7cff999a7f5c 326 rx_index=0;
gohgwaja 0:7cff999a7f5c 327 }
gohgwaja 0:7cff999a7f5c 328
gohgwaja 0:7cff999a7f5c 329
gohgwaja 0:7cff999a7f5c 330 /*
gohgwaja 0:7cff999a7f5c 331 if(com_error==false)
gohgwaja 0:7cff999a7f5c 332 {
gohgwaja 0:7cff999a7f5c 333 cmd_roll = data1;
gohgwaja 0:7cff999a7f5c 334 cmd_pitch = data2;
gohgwaja 0:7cff999a7f5c 335 cmd_heave = data3;
gohgwaja 0:7cff999a7f5c 336 cmd_sway = data4;
gohgwaja 0:7cff999a7f5c 337 cmd_surge = data5;
gohgwaja 0:7cff999a7f5c 338 cmd_yaw = data6;
gohgwaja 0:7cff999a7f5c 339 }
gohgwaja 0:7cff999a7f5c 340 */
gohgwaja 0:7cff999a7f5c 341
gohgwaja 0:7cff999a7f5c 342 #endif