Controle de joystick
Dependencies: mbed
main.cpp@0:1a4d385014d6, 2018-04-24 (annotated)
- Committer:
- Ringslev
- Date:
- Tue Apr 24 08:05:35 2018 +0000
- Revision:
- 0:1a4d385014d6
Test_joystick_1
Who changed what in which revision?
User | Revision | Line number | New 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 | //////////////////////////////////////////////////////////////////////////////// |