Controle de joystick

Dependencies:   mbed

Committer:
Ringslev
Date:
Tue Apr 24 08:05:35 2018 +0000
Revision:
0:1a4d385014d6
Test_joystick_1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ringslev 0:1a4d385014d6 1 #include "mbed.h"
Ringslev 0:1a4d385014d6 2 #include "can_parameters.h"
Ringslev 0:1a4d385014d6 3
Ringslev 0:1a4d385014d6 4 AnalogIn joystick_ctr(p15); // Pin 2 (fil vert) Center Tap Reference
Ringslev 0:1a4d385014d6 5 AnalogIn joystick_x(p16); // Pin 4 (fil jaune)
Ringslev 0:1a4d385014d6 6 AnalogIn joystick_y(p17); // Pin 5 (fil bleu)
Ringslev 0:1a4d385014d6 7
Ringslev 0:1a4d385014d6 8 DigitalOut MOTOR1_OP(LED1); // etat opérationnel ou non
Ringslev 0:1a4d385014d6 9 DigitalOut MOTOR2_OP(LED2);
Ringslev 0:1a4d385014d6 10 DigitalOut DEB_MOD_DEG(LED3); // Si mod degradé ou normal
Ringslev 0:1a4d385014d6 11 DigitalOut DEB_MOD_NOR(LED4);
Ringslev 0:1a4d385014d6 12 DigitalOut MOD_DEG(p26);
Ringslev 0:1a4d385014d6 13 DigitalOut MOD_NOR(p25);
Ringslev 0:1a4d385014d6 14
Ringslev 0:1a4d385014d6 15 int x = 0; // Poisition joystick x, y
Ringslev 0:1a4d385014d6 16 int y = 0;
Ringslev 0:1a4d385014d6 17 int ctr_x = 0; // Centre de reference x,y
Ringslev 0:1a4d385014d6 18 int ctr_y = 0;
Ringslev 0:1a4d385014d6 19
Ringslev 0:1a4d385014d6 20 DigitalIn myPOM(p7); // Detection du pull up POM
Ringslev 0:1a4d385014d6 21 bool etat_POM = false; // Etat de la machine N ou M
Ringslev 0:1a4d385014d6 22 DigitalIn Switch_H(p5); // Detection pull up switch Horizontal
Ringslev 0:1a4d385014d6 23 DigitalIn Switch_V(p6); // Detection pull up switch Vertical
Ringslev 0:1a4d385014d6 24
Ringslev 0:1a4d385014d6 25 CAN can_mbed(p30, p29, 1000000);
Ringslev 0:1a4d385014d6 26 char command[8]; //word to send command
Ringslev 0:1a4d385014d6 27 CANMessage msg;
Ringslev 0:1a4d385014d6 28
Ringslev 0:1a4d385014d6 29
Ringslev 0:1a4d385014d6 30 // FONCTIONS
Ringslev 0:1a4d385014d6 31 void send(int id, char octet_emis[], char RouD, char longueur ) // Fonction qui envoie les données sur le bus can
Ringslev 0:1a4d385014d6 32 {
Ringslev 0:1a4d385014d6 33
Ringslev 0:1a4d385014d6 34 if (RouD == 'D')
Ringslev 0:1a4d385014d6 35 {
Ringslev 0:1a4d385014d6 36 CANMessage(id, octet_emis, longueur, CANData, CANStandard );
Ringslev 0:1a4d385014d6 37 }
Ringslev 0:1a4d385014d6 38 else
Ringslev 0:1a4d385014d6 39 {
Ringslev 0:1a4d385014d6 40 CANMessage(id, octet_emis, longueur, CANRemote, CANStandard );
Ringslev 0:1a4d385014d6 41 }
Ringslev 0:1a4d385014d6 42 }
Ringslev 0:1a4d385014d6 43
Ringslev 0:1a4d385014d6 44
Ringslev 0:1a4d385014d6 45 /*void initialisation() // Fonction qui initialise les moteurs
Ringslev 0:1a4d385014d6 46 {
Ringslev 0:1a4d385014d6 47 int ping = 0;
Ringslev 0:1a4d385014d6 48 // Initialisation moteur droit
Ringslev 0:1a4d385014d6 49 command[0] = DRIVER_R1; // Moteur droit
Ringslev 0:1a4d385014d6 50 command[1] = DRIVER_R2;
Ringslev 0:1a4d385014d6 51
Ringslev 0:1a4d385014d6 52 while(ping == 0)
Ringslev 0:1a4d385014d6 53 {
Ringslev 0:1a4d385014d6 54 MOTOR1_OP = 1; // Animation led
Ringslev 0:1a4d385014d6 55 wait(0.2);
Ringslev 0:1a4d385014d6 56 MOTOR1_OP = 0;
Ringslev 0:1a4d385014d6 57 wait(0.2);
Ringslev 0:1a4d385014d6 58 send(INITOP, command, 'D', 2); //send word to put pluto driver in operational mode
Ringslev 0:1a4d385014d6 59 if(can_mbed.read(msg)) // Si réponse alors on sort de la boucle
Ringslev 0:1a4d385014d6 60 {
Ringslev 0:1a4d385014d6 61 ping = 1;
Ringslev 0:1a4d385014d6 62 }
Ringslev 0:1a4d385014d6 63 }*/
Ringslev 0:1a4d385014d6 64 /*// Initialisation moteur gauche
Ringslev 0:1a4d385014d6 65 ping = 0;
Ringslev 0:1a4d385014d6 66 command[0] = DRIVER_L1; // Moteur gauche
Ringslev 0:1a4d385014d6 67 command[1] = DRIVER_L2;
Ringslev 0:1a4d385014d6 68
Ringslev 0:1a4d385014d6 69 while(ping == 0)
Ringslev 0:1a4d385014d6 70 {
Ringslev 0:1a4d385014d6 71 MOTOR2_OP = 1; // Animation led
Ringslev 0:1a4d385014d6 72 MOTOR2_OP = 0;
Ringslev 0:1a4d385014d6 73 send(INITOP, command, 'D', 2); //send word to put pluto driver in operational mode
Ringslev 0:1a4d385014d6 74 if(can_mbed.read(msg)) // Si réponse alors on sort de la boucle
Ringslev 0:1a4d385014d6 75 {
Ringslev 0:1a4d385014d6 76 ping = 1;
Ringslev 0:1a4d385014d6 77 }
Ringslev 0:1a4d385014d6 78 }
Ringslev 0:1a4d385014d6 79 MOTOR1_OP = 1;
Ringslev 0:1a4d385014d6 80 MOTOR1_OP = 1;
Ringslev 0:1a4d385014d6 81 }*/
Ringslev 0:1a4d385014d6 82
Ringslev 0:1a4d385014d6 83 // MAIN
Ringslev 0:1a4d385014d6 84 int main()
Ringslev 0:1a4d385014d6 85 {
Ringslev 0:1a4d385014d6 86 // SETUP
Ringslev 0:1a4d385014d6 87 myPOM.mode(PullUp); // Définition des pull up
Ringslev 0:1a4d385014d6 88 Switch_H.mode(PullUp);
Ringslev 0:1a4d385014d6 89 Switch_V.mode(PullUp);
Ringslev 0:1a4d385014d6 90 // FIN SETUP
Ringslev 0:1a4d385014d6 91
Ringslev 0:1a4d385014d6 92
Ringslev 0:1a4d385014d6 93
Ringslev 0:1a4d385014d6 94 //initialisation();
Ringslev 0:1a4d385014d6 95 int ping = 0;
Ringslev 0:1a4d385014d6 96 // Initialisation moteur droit
Ringslev 0:1a4d385014d6 97 command[0] = DRIVER_R1; // Moteur droit
Ringslev 0:1a4d385014d6 98 command[1] = DRIVER_R2;
Ringslev 0:1a4d385014d6 99
Ringslev 0:1a4d385014d6 100 while(ping == 0)
Ringslev 0:1a4d385014d6 101 {
Ringslev 0:1a4d385014d6 102 MOTOR1_OP = 1; // Animation led
Ringslev 0:1a4d385014d6 103 wait(0.2);
Ringslev 0:1a4d385014d6 104 MOTOR1_OP = 0;
Ringslev 0:1a4d385014d6 105 wait(0.2);
Ringslev 0:1a4d385014d6 106 send(INITOP, command, 'D', 2); //send word to put pluto driver in operational mode
Ringslev 0:1a4d385014d6 107 if(can_mbed.read(msg)) // Si réponse alors on sort de la boucle
Ringslev 0:1a4d385014d6 108 {
Ringslev 0:1a4d385014d6 109 ping = 1;
Ringslev 0:1a4d385014d6 110 }
Ringslev 0:1a4d385014d6 111 }
Ringslev 0:1a4d385014d6 112
Ringslev 0:1a4d385014d6 113 while(1)
Ringslev 0:1a4d385014d6 114 {
Ringslev 0:1a4d385014d6 115
Ringslev 0:1a4d385014d6 116 // LECTURE Joystick + stockage valeurs dans x, y
Ringslev 0:1a4d385014d6 117 if(Switch_H){x = int(-((joystick_x.read()*100)-50));}else{x=0;}
Ringslev 0:1a4d385014d6 118 if(Switch_V){y = int((joystick_y.read()*100)-50);}else{y=0;}
Ringslev 0:1a4d385014d6 119 ctr_x = int(-((joystick_ctr.read()*100)-50));
Ringslev 0:1a4d385014d6 120 ctr_y = int((joystick_ctr.read()*100)-50);
Ringslev 0:1a4d385014d6 121
Ringslev 0:1a4d385014d6 122 printf("\nX : %d ",x); // Lecture et affichage de la valeur lu en entré pour x et y
Ringslev 0:1a4d385014d6 123 printf(" Y : %d ",y); // Valeur de type float entre 0 et 1
Ringslev 0:1a4d385014d6 124 printf(" CTR_x : %d , CTR_y : %d ", ctr_x, ctr_y);
Ringslev 0:1a4d385014d6 125
Ringslev 0:1a4d385014d6 126 if((y<5)&&(y>-5)) // BOUGE PAS
Ringslev 0:1a4d385014d6 127 {
Ringslev 0:1a4d385014d6 128 command[0] = 0x00;
Ringslev 0:1a4d385014d6 129 command[1] = 0x00;
Ringslev 0:1a4d385014d6 130 command[2] = 0x00;
Ringslev 0:1a4d385014d6 131 command[3] = 0x00;
Ringslev 0:1a4d385014d6 132 send(RPDO1_R, command, 'D', 4); // Envoie l'ordre de pas bouger
Ringslev 0:1a4d385014d6 133 }
Ringslev 0:1a4d385014d6 134 else if((y>=5)&&(y<25)) // LENT SENS 1
Ringslev 0:1a4d385014d6 135 {
Ringslev 0:1a4d385014d6 136 command[0] = 0x00;
Ringslev 0:1a4d385014d6 137 command[1] = 0x00;
Ringslev 0:1a4d385014d6 138 command[2] = 0x00;
Ringslev 0:1a4d385014d6 139 command[3] = 0x00;
Ringslev 0:1a4d385014d6 140 send(RPDO1_R, command, 'D', 4); // Envoie l'ordre
Ringslev 0:1a4d385014d6 141 }
Ringslev 0:1a4d385014d6 142 else if(y>=25) // MOYEN SENS 1
Ringslev 0:1a4d385014d6 143 {
Ringslev 0:1a4d385014d6 144 command[0] = 0x00;
Ringslev 0:1a4d385014d6 145 command[1] = 0x00;
Ringslev 0:1a4d385014d6 146 command[2] = 0x00;
Ringslev 0:1a4d385014d6 147 command[3] = 0x00;
Ringslev 0:1a4d385014d6 148 send(RPDO1_R, command, 'D', 4); // Envoie l'ordre
Ringslev 0:1a4d385014d6 149 }
Ringslev 0:1a4d385014d6 150 else if((y<=-5)&&(y>-25)) // LENT SENS 2
Ringslev 0:1a4d385014d6 151 {
Ringslev 0:1a4d385014d6 152 command[0] = 0x00;
Ringslev 0:1a4d385014d6 153 command[1] = 0x00;
Ringslev 0:1a4d385014d6 154 command[2] = 0x00;
Ringslev 0:1a4d385014d6 155 command[3] = 0x00;
Ringslev 0:1a4d385014d6 156 send(RPDO1_R, command, 'D', 4); // Envoie l'ordre
Ringslev 0:1a4d385014d6 157 }
Ringslev 0:1a4d385014d6 158 else if(y<=-25) // MOYEN SENS 2
Ringslev 0:1a4d385014d6 159 {
Ringslev 0:1a4d385014d6 160 command[0] = 0x00;
Ringslev 0:1a4d385014d6 161 command[1] = 0x00;
Ringslev 0:1a4d385014d6 162 command[2] = 0x00;
Ringslev 0:1a4d385014d6 163 command[3] = 0x00;
Ringslev 0:1a4d385014d6 164 send(RPDO1_R, command, 'D', 4); // Envoie l'ordre
Ringslev 0:1a4d385014d6 165 }
Ringslev 0:1a4d385014d6 166 }
Ringslev 0:1a4d385014d6 167 }
Ringslev 0:1a4d385014d6 168 ////////////////////////////////////////////////////////////////////////////////
Ringslev 0:1a4d385014d6 169 /* BROCHAGE MBED :
Ringslev 0:1a4d385014d6 170 PIN 15 --> Center Tap Reference
Ringslev 0:1a4d385014d6 171 PIN 16 --> Y (doc) --> X (Programme)
Ringslev 0:1a4d385014d6 172 PIN 17 --> X (doc) --> Y (Programme) Pour bien définir selon le sens du joystick, câbles vers le haut
Ringslev 0:1a4d385014d6 173
Ringslev 0:1a4d385014d6 174 PIN 5 --> Switch Horizontal
Ringslev 0:1a4d385014d6 175 PIN 6 --> Switch Vertical
Ringslev 0:1a4d385014d6 176 PIN 7 --> BP Point Origine Machine
Ringslev 0:1a4d385014d6 177
Ringslev 0:1a4d385014d6 178 PIN 1 --> GND
Ringslev 0:1a4d385014d6 179 PIN 40 --> 3.3V, Vout(out)
Ringslev 0:1a4d385014d6 180 PIN 39 --> 5V, Vu (out)
Ringslev 0:1a4d385014d6 181
Ringslev 0:1a4d385014d6 182 PIN 30 --> Can Rd (connecté au PIN 4 Rx du controleur)
Ringslev 0:1a4d385014d6 183 PIN 29 --> Can Td (connecté au PIN 1 Tx du controleur)
Ringslev 0:1a4d385014d6 184
Ringslev 0:1a4d385014d6 185 PIN 26 --> LED BORNIER Mode Normal
Ringslev 0:1a4d385014d6 186 PIN 25 --> LED BORNIER Mode Dégradé
Ringslev 0:1a4d385014d6 187 */
Ringslev 0:1a4d385014d6 188 ////////////////////////////////////////////////////////////////////////////////