Prog Thib Ju
Dependencies: mbed
main.cpp@3:f56ec086a122, 2019-05-02 (annotated)
- Committer:
- thibautm
- Date:
- Thu May 02 11:33:20 2019 +0000
- Revision:
- 3:f56ec086a122
- Parent:
- 2:8817ad0d0a78
- Child:
- 4:b00081eecde0
t
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JulienB1 | 0:5535594ef331 | 1 | #include "mbed.h" |
thibautm | 3:f56ec086a122 | 2 | |
thibautm | 3:f56ec086a122 | 3 | |
MaxLaMenace | 1:7d94c1b86ad6 | 4 | // Definition des variables : moteur |
thibautm | 3:f56ec086a122 | 5 | PwmOut moteur1(D10); //On déclare la 1ère broche PWM pour la relier au moteur pour ainsi moduler la vitesse du moteur |
thibautm | 3:f56ec086a122 | 6 | PwmOut moteur2(D9); //On déclare la 2ème broche PWM |
thibautm | 3:f56ec086a122 | 7 | DigitalOut Trig(D12); //On déclare la broche qui va envoyer le signal à l'emetteur-recepteur d'ultrasons |
thibautm | 3:f56ec086a122 | 8 | InterruptIn reception(D8); //On déclare notre broche d'interruption |
thibautm | 3:f56ec086a122 | 9 | |
thibautm | 3:f56ec086a122 | 10 | Serial pc(USBTX, USBRX); //On crée la connexion Pc-µchip pour afficher les résultats sur Teraterm |
JulienB1 | 0:5535594ef331 | 11 | |
thibautm | 3:f56ec086a122 | 12 | Timer t2; //On déclarer le timer servant pour calculer la distance emetteur-objet |
JulienB1 | 0:5535594ef331 | 13 | |
thibautm | 3:f56ec086a122 | 14 | double rc; //Variable compris entre 0 et 1 qui contrôlera le rapport cyclique du moteur |
thibautm | 3:f56ec086a122 | 15 | float dist; //Variable qui nous permettra de calculer la distance voiture-objet |
thibautm | 3:f56ec086a122 | 16 | float dist_securite; //Variable à laquelle on affectera la distance à respecter |
JulienB1 | 2:8817ad0d0a78 | 17 | |
JulienB1 | 0:5535594ef331 | 18 | |
MaxLaMenace | 1:7d94c1b86ad6 | 19 | // Definition des variables : codeur |
JulienB1 | 2:8817ad0d0a78 | 20 | InterruptIn ComptIncr(D7); |
MaxLaMenace | 1:7d94c1b86ad6 | 21 | |
MaxLaMenace | 1:7d94c1b86ad6 | 22 | Timer t1; |
MaxLaMenace | 1:7d94c1b86ad6 | 23 | |
MaxLaMenace | 1:7d94c1b86ad6 | 24 | float tps1; |
MaxLaMenace | 1:7d94c1b86ad6 | 25 | float tps2; |
JulienB1 | 2:8817ad0d0a78 | 26 | float tps3; |
JulienB1 | 2:8817ad0d0a78 | 27 | float dt; |
MaxLaMenace | 1:7d94c1b86ad6 | 28 | int a; |
JulienB1 | 2:8817ad0d0a78 | 29 | double v; |
thibautm | 3:f56ec086a122 | 30 | |
MaxLaMenace | 1:7d94c1b86ad6 | 31 | |
MaxLaMenace | 1:7d94c1b86ad6 | 32 | // Definition des fonctions : moteur |
MaxLaMenace | 1:7d94c1b86ad6 | 33 | |
thibautm | 3:f56ec086a122 | 34 | void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant |
JulienB1 | 0:5535594ef331 | 35 | { |
thibautm | 3:f56ec086a122 | 36 | t2.start(); //On lance le timer |
JulienB1 | 0:5535594ef331 | 37 | } |
JulienB1 | 0:5535594ef331 | 38 | |
thibautm | 3:f56ec086a122 | 39 | void front_descendant()//Fonction qui s'effectuera lorsque la broche D8 verra un front descendant |
JulienB1 | 0:5535594ef331 | 40 | { |
thibautm | 3:f56ec086a122 | 41 | t2.stop(); //On arrête le timer |
thibautm | 3:f56ec086a122 | 42 | tps3=t2.read(); //On affecte à tps3 la valeur du timer (temps entre le front montant et le front descendant) |
thibautm | 3:f56ec086a122 | 43 | dist=174.9*tps3; //On calcule la distance emetteur-objet et donc voiture-objet |
thibautm | 3:f56ec086a122 | 44 | t2.reset(); //On réinitialise le timer à 0 |
thibautm | 3:f56ec086a122 | 45 | if (dist<= dist_securite){rc = rc-rc/200;} //On réduit petit à petit le rapport cyclique et par conséquent la vitesse du moteur jusqu'à respecter la distance minimale |
thibautm | 3:f56ec086a122 | 46 | //qu'il doit y avoir entre la voiture et de la voiture devant elle en fonction de la vitesse |
thibautm | 3:f56ec086a122 | 47 | if (dist> dist_securite){rc = rc+(rc+1)/200;} //Au contraire si on est au dessus de la distance de sécurité on va augmenter la vitesse de la voiture |
thibautm | 3:f56ec086a122 | 48 | if (dist<=0.1) {rc = 0;} //On arrête le moteur quand la distance est trop petit |
thibautm | 3:f56ec086a122 | 49 | moteur2.write(rc); //On applique le nouveau rapport cyclique au moteur et par conséquent la nouvelle vitesse |
MaxLaMenace | 1:7d94c1b86ad6 | 50 | |
thibautm | 3:f56ec086a122 | 51 | |
JulienB1 | 2:8817ad0d0a78 | 52 | |
MaxLaMenace | 1:7d94c1b86ad6 | 53 | // Definition des fonctions : codeur |
MaxLaMenace | 1:7d94c1b86ad6 | 54 | |
MaxLaMenace | 1:7d94c1b86ad6 | 55 | void vitesse(){ |
MaxLaMenace | 1:7d94c1b86ad6 | 56 | if (a == 0){ |
JulienB1 | 2:8817ad0d0a78 | 57 | tps1 = t1.read(); |
JulienB1 | 2:8817ad0d0a78 | 58 | } |
JulienB1 | 2:8817ad0d0a78 | 59 | a++; |
JulienB1 | 2:8817ad0d0a78 | 60 | if (a == 8) { |
MaxLaMenace | 1:7d94c1b86ad6 | 61 | tps2 = t1.read(); |
JulienB1 | 2:8817ad0d0a78 | 62 | dt = tps2 - tps1; |
JulienB1 | 2:8817ad0d0a78 | 63 | v = 0.0201056/dt; // (8/25)*2*pi*4.5 cm de rayon |
JulienB1 | 2:8817ad0d0a78 | 64 | // pc.printf("v = %lf\n", v); |
JulienB1 | 2:8817ad0d0a78 | 65 | // pc.printf("dt = %f\n", 1/dt); |
MaxLaMenace | 1:7d94c1b86ad6 | 66 | a = 0; |
JulienB1 | 2:8817ad0d0a78 | 67 | dist_securite = 6*v; |
MaxLaMenace | 1:7d94c1b86ad6 | 68 | //printf("Vitesse = %f tours/s\n", 10/t.read()); |
MaxLaMenace | 1:7d94c1b86ad6 | 69 | } |
MaxLaMenace | 1:7d94c1b86ad6 | 70 | } |
MaxLaMenace | 1:7d94c1b86ad6 | 71 | |
thibautm | 3:f56ec086a122 | 72 | |
thibautm | 3:f56ec086a122 | 73 | |
MaxLaMenace | 1:7d94c1b86ad6 | 74 | // Debut du main |
JulienB1 | 0:5535594ef331 | 75 | int main() |
JulienB1 | 0:5535594ef331 | 76 | { |
MaxLaMenace | 1:7d94c1b86ad6 | 77 | // Initialisation Moteur |
MaxLaMenace | 1:7d94c1b86ad6 | 78 | t2.reset(); |
thibautm | 3:f56ec086a122 | 79 | reception.rise(&front_montant); //On dit d'effectuer la fonction front_montant lorsque la broche reception (D8) reçoit un front montant |
thibautm | 3:f56ec086a122 | 80 | reception.fall(&front_descendant); //On dit d'effectuer la fonction front_descendant lorsque la broche reception (D8) reçoit un front descendant |
thibautm | 3:f56ec086a122 | 81 | moteur1.period_ms(10); //On définit la période du signal envoyé au moteur1 |
thibautm | 3:f56ec086a122 | 82 | moteur2.period_ms(10); //On définit la période du signal envoyé au moteur2 |
thibautm | 3:f56ec086a122 | 83 | moteur1.write(0); // On initialise le rapport cyclique du moteur1 à 0 |
thibautm | 3:f56ec086a122 | 84 | moteur2.write(0); // On initialise le rapport cyclique du moteur2 à 0 |
thibautm | 3:f56ec086a122 | 85 | pc.baud(9600); //On définit le débit d'information envoyé de la µchip au PC |
thibautm | 3:f56ec086a122 | 86 | |
JulienB1 | 0:5535594ef331 | 87 | |
MaxLaMenace | 1:7d94c1b86ad6 | 88 | // Initialisation Codeur |
MaxLaMenace | 1:7d94c1b86ad6 | 89 | a = 0; |
JulienB1 | 2:8817ad0d0a78 | 90 | dt = 0; |
MaxLaMenace | 1:7d94c1b86ad6 | 91 | t1.start(); |
MaxLaMenace | 1:7d94c1b86ad6 | 92 | ComptIncr.rise(&vitesse); |
MaxLaMenace | 1:7d94c1b86ad6 | 93 | |
thibautm | 3:f56ec086a122 | 94 | |
MaxLaMenace | 1:7d94c1b86ad6 | 95 | // Debut du while |
JulienB1 | 0:5535594ef331 | 96 | while(1) |
JulienB1 | 0:5535594ef331 | 97 | { |
MaxLaMenace | 1:7d94c1b86ad6 | 98 | // Partie moteur |
thibautm | 3:f56ec086a122 | 99 | Trig = 1; //On envoie à 1 à l'emetteur à ultrasons pour qu'il envoie ensuite une impulsion d'ultrason |
thibautm | 3:f56ec086a122 | 100 | //On affiche nos différent résultats sur Teraterm |
thibautm | 3:f56ec086a122 | 101 | pc.printf("dist = %f \r\n", dist); |
JulienB1 | 2:8817ad0d0a78 | 102 | pc.printf("RC = %lf \r\n", rc); |
JulienB1 | 2:8817ad0d0a78 | 103 | pc.printf("v = %lf\n", v); |
JulienB1 | 2:8817ad0d0a78 | 104 | |
thibautm | 3:f56ec086a122 | 105 | wait(0.001); //Il envoie l'impulsion pendant 1 ms |
thibautm | 3:f56ec086a122 | 106 | Trig =0 ; //On arrête l'impulsion pendant 1 ms |
JulienB1 | 0:5535594ef331 | 107 | wait(0.001); |
MaxLaMenace | 1:7d94c1b86ad6 | 108 | |
JulienB1 | 0:5535594ef331 | 109 | |
MaxLaMenace | 1:7d94c1b86ad6 | 110 | // Partie codeur |
thibautm | 3:f56ec086a122 | 111 | printf("Compteur = %d\n", a); |
thibautm | 3:f56ec086a122 | 112 | printf("Temps 1 = %f\n", tps1); |
thibautm | 3:f56ec086a122 | 113 | printf("Temps 2 = %f\n", tps2); |
thibautm | 3:f56ec086a122 | 114 | printf("Test temps 1 = %f\n", b); |
JulienB1 | 0:5535594ef331 | 115 | } |
JulienB1 | 0:5535594ef331 | 116 | } |