Etienne Stransky
/
programme_bateau
ok
main.cpp@0:5ab762b6468f, 2019-02-12 (annotated)
- Committer:
- stersky
- Date:
- Tue Feb 12 14:47:42 2019 +0000
- Revision:
- 0:5ab762b6468f
ok
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stersky | 0:5ab762b6468f | 1 | #include "mbed.h" |
stersky | 0:5ab762b6468f | 2 | #include "SRF05.h" |
stersky | 0:5ab762b6468f | 3 | |
stersky | 0:5ab762b6468f | 4 | Timer chrono1; |
stersky | 0:5ab762b6468f | 5 | Timer chrono2; |
stersky | 0:5ab762b6468f | 6 | Timer chrono3; |
stersky | 0:5ab762b6468f | 7 | Timer chrono4; |
stersky | 0:5ab762b6468f | 8 | Timer chrono5; |
stersky | 0:5ab762b6468f | 9 | Timer chrono6; |
stersky | 0:5ab762b6468f | 10 | Timer chrono7; |
stersky | 0:5ab762b6468f | 11 | Timer chrono8; |
stersky | 0:5ab762b6468f | 12 | |
stersky | 0:5ab762b6468f | 13 | InterruptIn ch1(p23); |
stersky | 0:5ab762b6468f | 14 | InterruptIn ch2(p24); |
stersky | 0:5ab762b6468f | 15 | InterruptIn ch3(p25); |
stersky | 0:5ab762b6468f | 16 | InterruptIn ch4(p26); |
stersky | 0:5ab762b6468f | 17 | InterruptIn ch5(p29); |
stersky | 0:5ab762b6468f | 18 | InterruptIn ch6(p30); |
stersky | 0:5ab762b6468f | 19 | InterruptIn Ultra1(p5); |
stersky | 0:5ab762b6468f | 20 | InterruptIn Ultra2(p7); |
stersky | 0:5ab762b6468f | 21 | |
stersky | 0:5ab762b6468f | 22 | //SRF05 srf1(p6, p5);//p6:trigger, p5:echo |
stersky | 0:5ab762b6468f | 23 | //SRF05 srf2(p8, p7);//p8:trigger, p7:echo |
stersky | 0:5ab762b6468f | 24 | |
stersky | 0:5ab762b6468f | 25 | Serial PC(USBTX, USBRX); |
stersky | 0:5ab762b6468f | 26 | Serial moteurs(p9, p10); |
stersky | 0:5ab762b6468f | 27 | |
stersky | 0:5ab762b6468f | 28 | DigitalOut del(LED1); |
stersky | 0:5ab762b6468f | 29 | DigitalOut puls1(p6); |
stersky | 0:5ab762b6468f | 30 | DigitalOut puls2(p8); |
stersky | 0:5ab762b6468f | 31 | |
stersky | 0:5ab762b6468f | 32 | char etat_US=0; |
stersky | 0:5ab762b6468f | 33 | double tps_ch1=0,tps_ch2=0,tps_ch3=0,tps_ch4=0,tps_ch5=0,tps_ch6=0,dist_US1=0,dist_US2=0; |
stersky | 0:5ab762b6468f | 34 | |
stersky | 0:5ab762b6468f | 35 | void initial_PWMIn(void); |
stersky | 0:5ab762b6468f | 36 | void initial_Ultrasons(void); |
stersky | 0:5ab762b6468f | 37 | int calcul_vitesse(void); |
stersky | 0:5ab762b6468f | 38 | int calcul_direction(void); |
stersky | 0:5ab762b6468f | 39 | void ecriture_moteurs(int vitesse, int gouvernail); |
stersky | 0:5ab762b6468f | 40 | void impulsion1(void); |
stersky | 0:5ab762b6468f | 41 | void impulsion2(void); |
stersky | 0:5ab762b6468f | 42 | |
stersky | 0:5ab762b6468f | 43 | void ch1_start() { |
stersky | 0:5ab762b6468f | 44 | chrono1.start(); |
stersky | 0:5ab762b6468f | 45 | } |
stersky | 0:5ab762b6468f | 46 | |
stersky | 0:5ab762b6468f | 47 | void ch1_stop() |
stersky | 0:5ab762b6468f | 48 | { |
stersky | 0:5ab762b6468f | 49 | chrono1.stop(); |
stersky | 0:5ab762b6468f | 50 | tps_ch1 = chrono1.read_us(); |
stersky | 0:5ab762b6468f | 51 | chrono1.reset(); |
stersky | 0:5ab762b6468f | 52 | } |
stersky | 0:5ab762b6468f | 53 | |
stersky | 0:5ab762b6468f | 54 | void ch2_start() { |
stersky | 0:5ab762b6468f | 55 | chrono2.start(); |
stersky | 0:5ab762b6468f | 56 | } |
stersky | 0:5ab762b6468f | 57 | |
stersky | 0:5ab762b6468f | 58 | void ch2_stop() |
stersky | 0:5ab762b6468f | 59 | { |
stersky | 0:5ab762b6468f | 60 | chrono2.stop(); |
stersky | 0:5ab762b6468f | 61 | tps_ch2 = chrono2.read_us(); |
stersky | 0:5ab762b6468f | 62 | chrono2.reset(); |
stersky | 0:5ab762b6468f | 63 | } |
stersky | 0:5ab762b6468f | 64 | |
stersky | 0:5ab762b6468f | 65 | void ch3_start() { |
stersky | 0:5ab762b6468f | 66 | chrono3.start(); |
stersky | 0:5ab762b6468f | 67 | } |
stersky | 0:5ab762b6468f | 68 | |
stersky | 0:5ab762b6468f | 69 | void ch3_stop() |
stersky | 0:5ab762b6468f | 70 | { |
stersky | 0:5ab762b6468f | 71 | chrono3.stop(); |
stersky | 0:5ab762b6468f | 72 | tps_ch3 = chrono3.read_us(); |
stersky | 0:5ab762b6468f | 73 | chrono3.reset(); |
stersky | 0:5ab762b6468f | 74 | } |
stersky | 0:5ab762b6468f | 75 | |
stersky | 0:5ab762b6468f | 76 | void ch4_start() { |
stersky | 0:5ab762b6468f | 77 | chrono4.start(); |
stersky | 0:5ab762b6468f | 78 | } |
stersky | 0:5ab762b6468f | 79 | |
stersky | 0:5ab762b6468f | 80 | void ch4_stop() |
stersky | 0:5ab762b6468f | 81 | { |
stersky | 0:5ab762b6468f | 82 | chrono4.stop(); |
stersky | 0:5ab762b6468f | 83 | tps_ch4 = chrono4.read_us(); |
stersky | 0:5ab762b6468f | 84 | chrono4.reset(); |
stersky | 0:5ab762b6468f | 85 | } |
stersky | 0:5ab762b6468f | 86 | |
stersky | 0:5ab762b6468f | 87 | void ch5_start() { |
stersky | 0:5ab762b6468f | 88 | chrono5.start(); |
stersky | 0:5ab762b6468f | 89 | } |
stersky | 0:5ab762b6468f | 90 | |
stersky | 0:5ab762b6468f | 91 | void ch5_stop() |
stersky | 0:5ab762b6468f | 92 | { |
stersky | 0:5ab762b6468f | 93 | chrono5.stop(); |
stersky | 0:5ab762b6468f | 94 | tps_ch5 = chrono5.read_us(); |
stersky | 0:5ab762b6468f | 95 | chrono5.reset(); |
stersky | 0:5ab762b6468f | 96 | } |
stersky | 0:5ab762b6468f | 97 | |
stersky | 0:5ab762b6468f | 98 | void ch6_start() { |
stersky | 0:5ab762b6468f | 99 | chrono6.start(); |
stersky | 0:5ab762b6468f | 100 | } |
stersky | 0:5ab762b6468f | 101 | |
stersky | 0:5ab762b6468f | 102 | void ch6_stop() |
stersky | 0:5ab762b6468f | 103 | { |
stersky | 0:5ab762b6468f | 104 | chrono6.stop(); |
stersky | 0:5ab762b6468f | 105 | tps_ch6 = chrono6.read_us(); |
stersky | 0:5ab762b6468f | 106 | chrono6.reset(); |
stersky | 0:5ab762b6468f | 107 | } |
stersky | 0:5ab762b6468f | 108 | |
stersky | 0:5ab762b6468f | 109 | void Ultra1_start() |
stersky | 0:5ab762b6468f | 110 | { |
stersky | 0:5ab762b6468f | 111 | if(etat_US==0) |
stersky | 0:5ab762b6468f | 112 | { |
stersky | 0:5ab762b6468f | 113 | chrono7.reset(); |
stersky | 0:5ab762b6468f | 114 | chrono7.start(); |
stersky | 0:5ab762b6468f | 115 | } |
stersky | 0:5ab762b6468f | 116 | } |
stersky | 0:5ab762b6468f | 117 | |
stersky | 0:5ab762b6468f | 118 | void Ultra1_stop()//Arrêt du chronomètre du capteur 1 et impulsion capteur 2 |
stersky | 0:5ab762b6468f | 119 | { |
stersky | 0:5ab762b6468f | 120 | if(etat_US==0) |
stersky | 0:5ab762b6468f | 121 | { |
stersky | 0:5ab762b6468f | 122 | chrono7.stop(); |
stersky | 0:5ab762b6468f | 123 | dist_US1=chrono7.read_us()/58.0;//donne la distance en cm |
stersky | 0:5ab762b6468f | 124 | etat_US = 1; |
stersky | 0:5ab762b6468f | 125 | impulsion2(); |
stersky | 0:5ab762b6468f | 126 | } |
stersky | 0:5ab762b6468f | 127 | } |
stersky | 0:5ab762b6468f | 128 | |
stersky | 0:5ab762b6468f | 129 | void Ultra2_start()//Lancement du chronomètre du capteur 2 |
stersky | 0:5ab762b6468f | 130 | { |
stersky | 0:5ab762b6468f | 131 | if(etat_US==1) |
stersky | 0:5ab762b6468f | 132 | { |
stersky | 0:5ab762b6468f | 133 | chrono8.reset(); |
stersky | 0:5ab762b6468f | 134 | chrono8.start(); |
stersky | 0:5ab762b6468f | 135 | } |
stersky | 0:5ab762b6468f | 136 | } |
stersky | 0:5ab762b6468f | 137 | |
stersky | 0:5ab762b6468f | 138 | void Ultra2_stop()//Arrêt du chronomètre du capteur 2 et lancement d'une impulsion sur le capteur 1 |
stersky | 0:5ab762b6468f | 139 | { |
stersky | 0:5ab762b6468f | 140 | if(etat_US==1) |
stersky | 0:5ab762b6468f | 141 | { |
stersky | 0:5ab762b6468f | 142 | chrono8.stop(); |
stersky | 0:5ab762b6468f | 143 | dist_US2=chrono8.read_us()/58.0;//donne la distance en cm |
stersky | 0:5ab762b6468f | 144 | etat_US = 0; |
stersky | 0:5ab762b6468f | 145 | impulsion1(); |
stersky | 0:5ab762b6468f | 146 | } |
stersky | 0:5ab762b6468f | 147 | } |
stersky | 0:5ab762b6468f | 148 | |
stersky | 0:5ab762b6468f | 149 | |
stersky | 0:5ab762b6468f | 150 | int main() { |
stersky | 0:5ab762b6468f | 151 | |
stersky | 0:5ab762b6468f | 152 | PC.baud(460800); |
stersky | 0:5ab762b6468f | 153 | initial_PWMIn(); |
stersky | 0:5ab762b6468f | 154 | initial_Ultrasons(); |
stersky | 0:5ab762b6468f | 155 | impulsion1(); |
stersky | 0:5ab762b6468f | 156 | |
stersky | 0:5ab762b6468f | 157 | int vitesse,direction; |
stersky | 0:5ab762b6468f | 158 | |
stersky | 0:5ab762b6468f | 159 | while(true) { |
stersky | 0:5ab762b6468f | 160 | |
stersky | 0:5ab762b6468f | 161 | if(tps_ch6 > 1200) del = 1; //Allume la led si ch6 en position haute |
stersky | 0:5ab762b6468f | 162 | if(tps_ch6 < 1200) del = 0; //Allume la led si ch6 en position basse |
stersky | 0:5ab762b6468f | 163 | |
stersky | 0:5ab762b6468f | 164 | //vitesse = calcul_vitesse(); |
stersky | 0:5ab762b6468f | 165 | //direction = calcul_direction(); |
stersky | 0:5ab762b6468f | 166 | |
stersky | 0:5ab762b6468f | 167 | //ecriture_moteurs(vitesse,direction); |
stersky | 0:5ab762b6468f | 168 | |
stersky | 0:5ab762b6468f | 169 | PC.printf("Tps haut entree 1:%.lfus\n\r",tps_ch1); |
stersky | 0:5ab762b6468f | 170 | PC.printf("Tps haut entree 2:%.lfus\n\r",tps_ch2); |
stersky | 0:5ab762b6468f | 171 | PC.printf("Tps haut entree 3:%.lfus\n\r",tps_ch3); |
stersky | 0:5ab762b6468f | 172 | PC.printf("Tps haut entree 4:%.lfus\n\r",tps_ch4); |
stersky | 0:5ab762b6468f | 173 | PC.printf("Tps haut entree 5:%.lfus\n\r",tps_ch5); |
stersky | 0:5ab762b6468f | 174 | PC.printf("Tps haut entree 6:%.lfus\n\r",tps_ch6); |
stersky | 0:5ab762b6468f | 175 | PC.printf("Distance 1:%.lfcm\n\r",dist_US1); |
stersky | 0:5ab762b6468f | 176 | PC.printf("Distance 2:%.lfcm\n\r",dist_US2); |
stersky | 0:5ab762b6468f | 177 | //PC.printf("Vitesse :%d\n\r",vitesse); |
stersky | 0:5ab762b6468f | 178 | //PC.printf("Direction : %d\n\r",direction); |
stersky | 0:5ab762b6468f | 179 | PC.printf("\n\r"); |
stersky | 0:5ab762b6468f | 180 | wait(0.2); |
stersky | 0:5ab762b6468f | 181 | } |
stersky | 0:5ab762b6468f | 182 | } |
stersky | 0:5ab762b6468f | 183 | |
stersky | 0:5ab762b6468f | 184 | void initial_PWMIn(void) |
stersky | 0:5ab762b6468f | 185 | { |
stersky | 0:5ab762b6468f | 186 | ch1.rise(&ch1_start); |
stersky | 0:5ab762b6468f | 187 | ch1.fall(&ch1_stop); |
stersky | 0:5ab762b6468f | 188 | |
stersky | 0:5ab762b6468f | 189 | ch2.rise(&ch2_start); |
stersky | 0:5ab762b6468f | 190 | ch2.fall(&ch2_stop); |
stersky | 0:5ab762b6468f | 191 | |
stersky | 0:5ab762b6468f | 192 | ch3.rise(&ch3_start); |
stersky | 0:5ab762b6468f | 193 | ch3.fall(&ch3_stop); |
stersky | 0:5ab762b6468f | 194 | |
stersky | 0:5ab762b6468f | 195 | ch4.rise(&ch4_start); |
stersky | 0:5ab762b6468f | 196 | ch4.fall(&ch4_stop); |
stersky | 0:5ab762b6468f | 197 | |
stersky | 0:5ab762b6468f | 198 | ch5.rise(&ch5_start); |
stersky | 0:5ab762b6468f | 199 | ch5.fall(&ch5_stop); |
stersky | 0:5ab762b6468f | 200 | |
stersky | 0:5ab762b6468f | 201 | ch6.rise(&ch6_start); |
stersky | 0:5ab762b6468f | 202 | ch6.fall(&ch6_stop); |
stersky | 0:5ab762b6468f | 203 | |
stersky | 0:5ab762b6468f | 204 | chrono1.reset(); |
stersky | 0:5ab762b6468f | 205 | chrono2.reset(); |
stersky | 0:5ab762b6468f | 206 | chrono3.reset(); |
stersky | 0:5ab762b6468f | 207 | chrono4.reset(); |
stersky | 0:5ab762b6468f | 208 | chrono5.reset(); |
stersky | 0:5ab762b6468f | 209 | chrono6.reset(); |
stersky | 0:5ab762b6468f | 210 | } |
stersky | 0:5ab762b6468f | 211 | |
stersky | 0:5ab762b6468f | 212 | void initial_Ultrasons(void) |
stersky | 0:5ab762b6468f | 213 | { |
stersky | 0:5ab762b6468f | 214 | Ultra1.rise(&Ultra1_start); |
stersky | 0:5ab762b6468f | 215 | Ultra1.fall(&Ultra1_stop); |
stersky | 0:5ab762b6468f | 216 | |
stersky | 0:5ab762b6468f | 217 | Ultra2.rise(&Ultra2_start); |
stersky | 0:5ab762b6468f | 218 | Ultra2.fall(&Ultra2_stop); |
stersky | 0:5ab762b6468f | 219 | } |
stersky | 0:5ab762b6468f | 220 | |
stersky | 0:5ab762b6468f | 221 | void impulsion1(void) |
stersky | 0:5ab762b6468f | 222 | { |
stersky | 0:5ab762b6468f | 223 | puls1 = 1; |
stersky | 0:5ab762b6468f | 224 | wait (0.00002); |
stersky | 0:5ab762b6468f | 225 | puls1 = 0; |
stersky | 0:5ab762b6468f | 226 | } |
stersky | 0:5ab762b6468f | 227 | |
stersky | 0:5ab762b6468f | 228 | void impulsion2(void) |
stersky | 0:5ab762b6468f | 229 | { |
stersky | 0:5ab762b6468f | 230 | puls2 = 1; |
stersky | 0:5ab762b6468f | 231 | wait (0.00002); |
stersky | 0:5ab762b6468f | 232 | puls2 = 0; |
stersky | 0:5ab762b6468f | 233 | } |
stersky | 0:5ab762b6468f | 234 | |
stersky | 0:5ab762b6468f | 235 | int calcul_vitesse(void) |
stersky | 0:5ab762b6468f | 236 | { |
stersky | 0:5ab762b6468f | 237 | int val_ch2,val_ch3,vitesse; |
stersky | 0:5ab762b6468f | 238 | |
stersky | 0:5ab762b6468f | 239 | val_ch2 = (tps_ch2-1500)/5; //calcul d'une valeur entre -100 et 100 selon la position du joystick |
stersky | 0:5ab762b6468f | 240 | val_ch3 = (tps_ch3-1500)/5; |
stersky | 0:5ab762b6468f | 241 | |
stersky | 0:5ab762b6468f | 242 | //On compare les valeurs absolues des valeurs:c'est le joystick le plus éloigné |
stersky | 0:5ab762b6468f | 243 | //de la position centrale qui domine |
stersky | 0:5ab762b6468f | 244 | if(abs(val_ch2)>abs(val_ch3)) vitesse = val_ch2; |
stersky | 0:5ab762b6468f | 245 | else vitesse = val_ch3; |
stersky | 0:5ab762b6468f | 246 | |
stersky | 0:5ab762b6468f | 247 | //vitesse nulle si les infos ne sont pas cohérentes |
stersky | 0:5ab762b6468f | 248 | if((tps_ch2<950)||(tps_ch2>2050)||(tps_ch3<950)||(tps_ch3>2050)) vitesse = 0; |
stersky | 0:5ab762b6468f | 249 | |
stersky | 0:5ab762b6468f | 250 | if(abs(vitesse)<5) vitesse = 0;//Moteur immobile si jostick pas actionné |
stersky | 0:5ab762b6468f | 251 | if(vitesse>100) vitesse = 100; //saturation |
stersky | 0:5ab762b6468f | 252 | if(vitesse<-100) vitesse = -100; //saturation |
stersky | 0:5ab762b6468f | 253 | |
stersky | 0:5ab762b6468f | 254 | return vitesse; |
stersky | 0:5ab762b6468f | 255 | } |
stersky | 0:5ab762b6468f | 256 | |
stersky | 0:5ab762b6468f | 257 | int calcul_direction(void) |
stersky | 0:5ab762b6468f | 258 | { |
stersky | 0:5ab762b6468f | 259 | int val_ch4,direction; |
stersky | 0:5ab762b6468f | 260 | |
stersky | 0:5ab762b6468f | 261 | //calcul d'une valeur entre -100 et 100 selon la position du joustick |
stersky | 0:5ab762b6468f | 262 | val_ch4 = (tps_ch4-1500)/5; |
stersky | 0:5ab762b6468f | 263 | |
stersky | 0:5ab762b6468f | 264 | //On compare les valeurs absolues des valeurs:c'est le joystick le plus éloigné |
stersky | 0:5ab762b6468f | 265 | //de la position centrale qui domine |
stersky | 0:5ab762b6468f | 266 | direction = val_ch4; |
stersky | 0:5ab762b6468f | 267 | |
stersky | 0:5ab762b6468f | 268 | //vitesse nulle si les infos ne sont pas cohérentes |
stersky | 0:5ab762b6468f | 269 | if((tps_ch4<950)||(tps_ch4>2050)) direction = 0; |
stersky | 0:5ab762b6468f | 270 | |
stersky | 0:5ab762b6468f | 271 | if(abs(direction)<5) direction = 0;//Moteur immobile si jostick pas actionné |
stersky | 0:5ab762b6468f | 272 | if(direction>100) direction = 100; //saturation |
stersky | 0:5ab762b6468f | 273 | if(direction<-100) direction = -100; //saturation |
stersky | 0:5ab762b6468f | 274 | |
stersky | 0:5ab762b6468f | 275 | return direction; |
stersky | 0:5ab762b6468f | 276 | } |
stersky | 0:5ab762b6468f | 277 | |
stersky | 0:5ab762b6468f | 278 | void ecriture_moteurs(int vitesse, int gouvernail) |
stersky | 0:5ab762b6468f | 279 | { |
stersky | 0:5ab762b6468f | 280 | moteurs.printf("$%d|%d*",vitesse,gouvernail); |
stersky | 0:5ab762b6468f | 281 | } |