Code robot à câbles v1.0
Dependencies: CAN_CONSOLE_v3 mbed
Fork of Robot_a_cables by
Revision 5:d5a021bbe81b, committed 2018-04-30
- Comitter:
- Ringslev
- Date:
- Mon Apr 30 12:27:56 2018 +0000
- Parent:
- 4:3fd7c53d31c1
- Commit message:
- Mode d?grad? fonctionnel; Mode normal en cours
Changed in this revision
CAN_CONSOLE_v2.lib | Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 3fd7c53d31c1 -r d5a021bbe81b CAN_CONSOLE_v2.lib --- a/CAN_CONSOLE_v2.lib Mon Apr 23 08:44:10 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/teams/RaC2018/code/CAN_CONSOLE_v3/#1e06fd49ea7b
diff -r 3fd7c53d31c1 -r d5a021bbe81b main.cpp --- a/main.cpp Mon Apr 23 08:44:10 2018 +0000 +++ b/main.cpp Mon Apr 30 12:27:56 2018 +0000 @@ -9,9 +9,6 @@ - - - DigitalOut MOTOR1_OP(LED1); DigitalOut MOTOR2_OP(LED2); DigitalOut DEB_MOD_DEG(LED3); @@ -21,14 +18,38 @@ DigitalIn SWH(p5); DigitalIn SWV(p6); DigitalIn BPO(p7); +AnalogIn joystick_ctr(p15); // Pin 2 (fil vert) Center Tap Reference +AnalogIn joystick_x(p16); // Pin 4 (fil jaune) +AnalogIn joystick_y(p17); // Pin 5 (fil bleu) - +CAN can2(p30, p29, 1000000); // on definit pin et debit +CANMessage msg; +Serial pc(USBTX, USBRX); -CAN can1(p9, p10,1000000);// on definit pin et debit -CAN can2(p30, p29, 1000000); -Serial pc(USBTX, USBRX); -//AnalogIn pot_1(p19); // potard pour selection +uint8_t mode = 0; +int x,y,ctr_x,ctr_y; // Variables de joystick +uint8_t ping = 0; //variable pour etat de processus +uint8_t done = 0; +char command[8]; //word to send command +uint64_t timer_process_read; //counter to make mbed read actual position +uint64_t timer_process_ping; //counter to make mbed read actual position +float dy = 525000;//valeur à la POM +int64_t d_old, d_new; +bool first_time = 0; +void display_mode() +{ + if(mode == 0) // MODE DEGRADE + { + MOD_DEG = 1; + MOD_NOR = 0; + } + else if(mode == 1) // MODE NORMAL + { + MOD_DEG = 0; + MOD_NOR = 1; + } +} void send(int id, char octet_emis[], char RouD, char longueur ) { @@ -53,49 +74,59 @@ } */ } - - - -uint64_t timer_process_read; //counter to make mbed read actual position -uint64_t timer_process_ping; //counter to make mbed read actual position -float dy = 525000;//valeur à la POM -int64_t d_old, d_new; -bool first_time = 0; - -int main() { - - - CANMessage msg; - uint8_t ping = 0; //variable pour etat de processus - uint8_t done = 0; - char command[8]; //word to send command - - - //define Pullup switch - SWH.mode(PullUp); - SWV.mode(PullUp); - BPO.mode(PullUp); - pc.printf("starting...\r\n"); +void initialisation() +{ + pc.printf("starting...\r\n"); + MOD_DEG = 1; + MOD_NOR = 0; + wait(0.1); + MOD_DEG = 0; + MOD_NOR = 1; + wait(0.1); + MOD_DEG = 1; + MOD_NOR = 0; + wait(0.1); + MOD_DEG = 0; + MOD_NOR = 1; + wait(0.1); + MOD_DEG = 1; + MOD_NOR = 0; + wait(0.1); + MOD_DEG = 0; + MOD_NOR = 0; + wait(0.1); + + command[0] = DRIVER_R1; + command[1] = DRIVER_R2; + + while(ping == 0) // INIT MOTEUR DROIT + { + pc.printf("ping droite ...\r\n"); + send(INITOP, command, 'D', 2); //send word to put pluto driver in operational mode + MOD_NOR = 1; + if(can2.read(msg)) + { + for(int i = 0; i < msg.len; i++) + { + pc.printf("0x%x ",msg.data[i]); + ping = 1; + }//end of for + pc.printf("\r \n"); + }//can.read(msg) + wait(0.1); + MOD_NOR = 0; + wait(0.9); + } + + ping =0; + command[0] = DRIVER_L1; + command[1] = DRIVER_L2; + + while(ping == 0) // INIT MOTEUR GAUCHE + { + pc.printf("ping gauche ...\r\n"); + send(INITOP, command, 'D', 2); //send word to put pluto driver in operational mode MOD_DEG = 1; - wait(0.1); - MOD_DEG = 0; - wait(0.1); - MOD_DEG = 1; - wait(0.1); - MOD_DEG = 0; - wait(0.1); - MOD_DEG = 1; - wait(0.1); - MOD_DEG = 0; - wait(0.1); - - command[0] = DRIVER_R1; - command[1] = DRIVER_R2; - - while(ping == 0){ - pc.printf("ping...\r\n"); - send(INITOP, command, 'D', 2); //send word to put pluto driver in operational mode - MOD_NOR = 1; if(can2.read(msg)) { for(int i = 0; i < msg.len; i++){ pc.printf("0x%x ",msg.data[i]); @@ -104,41 +135,87 @@ pc.printf("\r \n"); }//can.read(msg) wait(0.1); - MOD_NOR = 0; + MOD_DEG = 0; wait(0.9); + } +} // fin initialisation + +void control_Moteur() +{ + ///////////// CONTROLE MOTEUR ////////////////////////////////////////////////////////////////////////////// + // LECTURE Joystick + stockage valeurs dans x, y + ctr_x = int(-((joystick_ctr.read()*100)-50)); + ctr_y = int((joystick_ctr.read()*100)-50); + if(SWH){x = int(-((joystick_x.read()*100)-50))+ctr_x;}else{x=0;} // Detection x avec correction ctr de -42 à +42 + if(SWV){y = int((joystick_y.read()*100)-50)+ctr_y;}else{y=0;} // Detection y avec correction ctr + + if(mode ==0) + { + ///////////// MODE DEGRADE ///////////////////////////////////// + float VX = (float(x)/42)*425000; // Calcule brut vélocité x, y + float VY = (float(y)/42)*425000; + long int VM_L = VX - VY; // Calcule des vélocités exactes de chaques moteurs + long int VM_R = -VX - VY; + + command[0]= (VM_L & 0x000000FF); // Masque + décalage pour translation big vers little endian + command[1]= (VM_L & 0x0000FF00)>>8; + command[2]= (VM_L & 0x00FF0000)>>16; + command[3]= (VM_L & 0xFF000000)>>24; + send(RPDO1_L, command, 'D', 4); // Controle moteur gauche + + command[0]= (VM_R & 0x000000FF); + command[1]= (VM_R & 0x0000FF00)>>8; + command[2]= (VM_R & 0x00FF0000)>>16; + command[3]= (VM_R & 0xFF000000)>>24; + send(RPDO1_R, command, 'D', 4); // Controle moteur droit + //////////////////////////////////////////////////////////////// + } + else if(mode ==1) + { + // MODE NORMAL + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////// +} + +int main() { + + //define Pullup switch + SWH.mode(PullUp); + SWV.mode(PullUp); + BPO.mode(PullUp); + + initialisation(); // Mise en mode opérationnel des moteurs + + for(int working = 0; working < 50; working++) + { + send(TPDO1_R, command, 'R', 0); //Ask position + timer_process_read = 0; + d_new = msg.data[3]; + d_new = d_new << 8; + d_new = d_new | msg.data[2]; + d_new = d_new << 8; + d_new = d_new | msg.data[1]; + d_new = d_new << 8; + d_new = d_new | msg.data[0]; + pc.printf("%d \r\n",d_new); + } + d_old = d_new; + + while(1) + { + //timer_process_ping++; + timer_process_read++; + pc.printf("%d \t",d_new); + pc.printf("%d \t",d_old); + //pc.printf("%d \t",d_new); + pc.printf("%f \r\n",dy); - } - MOD_NOR = 1; - for(int working = 0; working < 50; working++){ - send(TPDO1_R, command, 'R', 0); //Ask position - timer_process_read = 0; - d_new = msg.data[3]; - d_new = d_new << 8; - d_new = d_new | msg.data[2]; - d_new = d_new << 8; - d_new = d_new | msg.data[1]; - d_new = d_new << 8; - d_new = d_new | msg.data[0]; - pc.printf("%d \r\n",d_new);} - d_old = d_new; - - - - while(1){ - - //timer_process_ping++; - timer_process_read++; - pc.printf("%d \t",d_new); - pc.printf("%d \t",d_old); - //pc.printf("%d \t",d_new); - pc.printf("%f \r\n",dy); - - dy = 525000 + (d_new*1000)/2500; + dy = 525000 + (d_new*1000)/2500; - //wait_ms(1); + //wait_ms(1); - /* if(timer_process_ping >= 5000){ + /* if(timer_process_ping >= 5000){ send(TPDO2_R, command, 'R', 0); //Ask mod of motor timer_process_ping = 0; if(can2.read(msg)) { @@ -195,52 +272,10 @@ }//end of for pc.printf("\r \n"); }//can.read(msg) - - switch(BPO){ - case 0: - if(done == 0){ - timer_process_read = 50; - //timer_process_ping = 0; - switch(SWV){ - case 0: - command[0] = 0x00; - command[1] = 0x8F; - command[2] = 0x00; - command[3] = 0x00; - send(RPDO1_R, command, 'D', 4); //send word to put pluto driver in operational mode - break; - - case 1: - command[0] = 0xFF; - command[1] = 0x70; - command[2] = 0xFF; - command[3] = 0xFF; - send(RPDO1_R, command, 'D', 4); //send word to put pluto driver in operational mode - - - break; - }//end of switch SWV - done = 1; - } - - break; - - case 1: - if(done == 1){ - command[0] = 0x00; - command[1] = 0x00; - command[2] = 0x00; - command[3] = 0x00; - send(RPDO1_R, command, 'D', 4); //send word to put pluto driver in operational mode - done = 0; - //send(TPDO1_R, command, 'R', 0); //send word to put pluto driver in operational mode - } - break; - - } + control_Moteur(); // Controle du meteur mode degradé et normal + display_mode(); // Controle des led affichant le mode - }// fin while(1) } // fin main