Prog Thib Ju
Dependencies: mbed
main.cpp@4:b00081eecde0, 2019-05-09 (annotated)
- Committer:
- MaxLaMenace
- Date:
- Thu May 09 14:34:14 2019 +0000
- Revision:
- 4:b00081eecde0
- Parent:
- 3:f56ec086a122
fusion final commente
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JulienB1 | 0:5535594ef331 | 1 | #include "mbed.h" |
MaxLaMenace | 4:b00081eecde0 | 2 | |
thibautm | 3:f56ec086a122 | 3 | |
MaxLaMenace | 1:7d94c1b86ad6 | 4 | // Definition des variables : moteur |
MaxLaMenace | 4:b00081eecde0 | 5 | |
MaxLaMenace | 4:b00081eecde0 | 6 | PwmOut moteur1(D10); //On déclare la 1ère broche PWM pour la relier au moteur pour ainsi moduler la vitesse du moteur |
MaxLaMenace | 4:b00081eecde0 | 7 | PwmOut moteur2(D9); //On déclare la 2ème broche PWM |
MaxLaMenace | 4:b00081eecde0 | 8 | DigitalOut Trig(D12); //On déclare la broche qui va envoyer le signal à l'emetteur-recepteur d'ultrasons |
MaxLaMenace | 4:b00081eecde0 | 9 | InterruptIn reception(D8); //On déclare notre broche d'interruption |
thibautm | 3:f56ec086a122 | 10 | |
MaxLaMenace | 4:b00081eecde0 | 11 | Serial pc(USBTX, USBRX); //On crée la connexion Pc-µchip pour afficher les résultats sur Teraterm |
JulienB1 | 0:5535594ef331 | 12 | |
MaxLaMenace | 4:b00081eecde0 | 13 | Timer t2; //On déclarer le timer servant pour calculer la distance emetteur-objet |
JulienB1 | 0:5535594ef331 | 14 | |
MaxLaMenace | 4:b00081eecde0 | 15 | double rc; //Variable compris entre 0 et 1 qui contrôlera le rapport cyclique du moteur |
MaxLaMenace | 4:b00081eecde0 | 16 | float dist; //Variable qui nous permettra de calculer la distance voiture-objet |
MaxLaMenace | 4:b00081eecde0 | 17 | float dist_securite; //Variable à laquelle on affectera la distance à respecter |
MaxLaMenace | 4:b00081eecde0 | 18 | float tps3; //Variable de lecture de temps |
JulienB1 | 2:8817ad0d0a78 | 19 | |
JulienB1 | 0:5535594ef331 | 20 | |
MaxLaMenace | 4:b00081eecde0 | 21 | // Definition des variables : codeur incrémentale |
MaxLaMenace | 1:7d94c1b86ad6 | 22 | |
MaxLaMenace | 4:b00081eecde0 | 23 | InterruptIn ComptIncr(D7); //Broche d'interruption permettant le comptage de front montant du codeur incrémentale |
MaxLaMenace | 4:b00081eecde0 | 24 | |
MaxLaMenace | 4:b00081eecde0 | 25 | Timer t1; //Timer pour connaître le temps qu'a mis la roue pour faire un tour |
MaxLaMenace | 1:7d94c1b86ad6 | 26 | |
MaxLaMenace | 4:b00081eecde0 | 27 | float tps1; //Variable servant de zéro pour la mesure de temps d'un tour de roue |
MaxLaMenace | 4:b00081eecde0 | 28 | float tps2; //Variable servant de stop pour la mesure de temps d'un tour de roue |
MaxLaMenace | 4:b00081eecde0 | 29 | float dt; //Variable de stockage du calcul de l'intervalle de temps (tps2 - tps1) |
MaxLaMenace | 4:b00081eecde0 | 30 | int a; //Variable correspondant au nombre de front montant |
MaxLaMenace | 4:b00081eecde0 | 31 | double v; //Variable de stockage pour le calcul de la vitesse des roues |
thibautm | 3:f56ec086a122 | 32 | |
MaxLaMenace | 1:7d94c1b86ad6 | 33 | |
MaxLaMenace | 1:7d94c1b86ad6 | 34 | // Definition des fonctions : moteur |
MaxLaMenace | 1:7d94c1b86ad6 | 35 | |
MaxLaMenace | 4:b00081eecde0 | 36 | void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant |
JulienB1 | 0:5535594ef331 | 37 | { |
MaxLaMenace | 4:b00081eecde0 | 38 | t2.start(); //On lance le timer |
JulienB1 | 0:5535594ef331 | 39 | } |
JulienB1 | 0:5535594ef331 | 40 | |
MaxLaMenace | 4:b00081eecde0 | 41 | void front_descendant() //Fonction qui s'effectuera lorsque la broche D8 verra un front descendant |
JulienB1 | 0:5535594ef331 | 42 | { |
MaxLaMenace | 4:b00081eecde0 | 43 | t2.stop(); //On arrête le timer |
MaxLaMenace | 4:b00081eecde0 | 44 | tps3=t2.read(); //On affecte à tps3 la valeur du timer (temps entre le front montant et le front descendant) |
MaxLaMenace | 4:b00081eecde0 | 45 | dist=174.9*tps3; //On calcule la distance emetteur-objet et donc voiture-objet |
MaxLaMenace | 4:b00081eecde0 | 46 | t2.reset(); //On réinitialise le timer à 0 |
MaxLaMenace | 4:b00081eecde0 | 47 | if (dist<= dist_securite) //On réduit petit à petit le rapport cyclique et par conséquent la vitesse du moteur jusqu'à respecter la distance minimale |
MaxLaMenace | 4:b00081eecde0 | 48 | {rc = rc-rc/200;} //qu'il doit y avoir entre la voiture et de la voiture devant elle en fonction de la vitesse |
MaxLaMenace | 4:b00081eecde0 | 49 | if (dist> dist_securite) |
MaxLaMenace | 4:b00081eecde0 | 50 | {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 |
MaxLaMenace | 4:b00081eecde0 | 51 | if (dist<=0.1) //On arrête le moteur quand la distance est trop petit |
MaxLaMenace | 4:b00081eecde0 | 52 | {rc = 0;} |
MaxLaMenace | 4:b00081eecde0 | 53 | moteur2.write(rc); //On applique le nouveau rapport cyclique au moteur et par conséquent la nouvelle vitesse |
MaxLaMenace | 4:b00081eecde0 | 54 | } |
JulienB1 | 2:8817ad0d0a78 | 55 | |
MaxLaMenace | 4:b00081eecde0 | 56 | // Définition des fonctions : codeur incrémentale |
MaxLaMenace | 1:7d94c1b86ad6 | 57 | |
MaxLaMenace | 4:b00081eecde0 | 58 | void vitesse() |
MaxLaMenace | 4:b00081eecde0 | 59 | { |
MaxLaMenace | 4:b00081eecde0 | 60 | if (a == 0) //On s'assure que l'on compte bien chaque front montant du codeur |
MaxLaMenace | 4:b00081eecde0 | 61 | {tps1 = t1.read();} //On mesure le zéro pour le départ d'un tour de roue |
MaxLaMenace | 4:b00081eecde0 | 62 | a++; //La fonction est une boucle d'interruption donc si elle s'active cela signifie qu'un front montant est apparue |
MaxLaMenace | 4:b00081eecde0 | 63 | if (a == 8){ //Une fois le compteur de front montant arrivé à 8, on calcule la vitesse du véhicule |
MaxLaMenace | 4:b00081eecde0 | 64 | tps2 = t1.read(); //Mesure du temps qui s'est écoulé depuis tps1 |
MaxLaMenace | 4:b00081eecde0 | 65 | dt = tps2 - tps1; //Calcul de l'intervalle de temps |
MaxLaMenace | 4:b00081eecde0 | 66 | v = 0.0201056/dt; //Calcul de la vitesse (v=d/t) avec comme distance d : (8/25)*2*pi*R avec R = 4.5cm et car un tour correspond à 25 fronts montants |
MaxLaMenace | 4:b00081eecde0 | 67 | a = 0; //Remise à zéro du compteur |
MaxLaMenace | 4:b00081eecde0 | 68 | dist_securite = 6*v; //Critère de distance à respecter : 6 x la vitesse |
MaxLaMenace | 1:7d94c1b86ad6 | 69 | } |
MaxLaMenace | 1:7d94c1b86ad6 | 70 | } |
MaxLaMenace | 1:7d94c1b86ad6 | 71 | |
thibautm | 3:f56ec086a122 | 72 | |
MaxLaMenace | 4:b00081eecde0 | 73 | // Début de la fonction principale |
thibautm | 3:f56ec086a122 | 74 | |
JulienB1 | 0:5535594ef331 | 75 | int main() |
JulienB1 | 0:5535594ef331 | 76 | { |
MaxLaMenace | 1:7d94c1b86ad6 | 77 | // Initialisation Moteur |
MaxLaMenace | 1:7d94c1b86ad6 | 78 | t2.reset(); |
MaxLaMenace | 4:b00081eecde0 | 79 | reception.rise(&front_montant); //On dit d'effectuer la fonction front_montant lorsque la broche de réception (D8) reçoit un front montant |
MaxLaMenace | 4:b00081eecde0 | 80 | reception.fall(&front_descendant); //On dit d'effectuer la fonction front_descendant lorsque la broche de réception (D8) reçoit un front descendant |
MaxLaMenace | 4:b00081eecde0 | 81 | moteur1.period_ms(10); //On définit la période du signal envoyé au moteur1 |
MaxLaMenace | 4:b00081eecde0 | 82 | moteur2.period_ms(10); //On définit la période du signal envoyé au moteur2 |
MaxLaMenace | 4:b00081eecde0 | 83 | moteur1.write(0); //On initialise le rapport cyclique du moteur1 à 0 |
MaxLaMenace | 4:b00081eecde0 | 84 | moteur2.write(0); //On initialise le rapport cyclique du moteur2 à 0 |
MaxLaMenace | 4:b00081eecde0 | 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 | 4:b00081eecde0 | 89 | a = 0; //Mise à zéro du compteur de front montant |
MaxLaMenace | 4:b00081eecde0 | 90 | dt = 0; //Mise à zéro de l'intervalle de temps pour le comptage de front montant |
MaxLaMenace | 4:b00081eecde0 | 91 | t1.start(); //Démarage du timer |
MaxLaMenace | 4:b00081eecde0 | 92 | ComptIncr.rise(&vitesse); //Appel de la fonction vitesse à chaque front montant détecté sur la broche de réception (D7) |
MaxLaMenace | 1:7d94c1b86ad6 | 93 | |
thibautm | 3:f56ec086a122 | 94 | |
MaxLaMenace | 4:b00081eecde0 | 95 | // Début de la boucle |
JulienB1 | 0:5535594ef331 | 96 | while(1) |
JulienB1 | 0:5535594ef331 | 97 | { |
MaxLaMenace | 1:7d94c1b86ad6 | 98 | // Partie moteur |
MaxLaMenace | 4:b00081eecde0 | 99 | Trig = 1; //On envoie à 1 à l'emetteur à ultrasons pour qu'il envoie ensuite une impulsion d'ultrason |
MaxLaMenace | 4:b00081eecde0 | 100 | |
MaxLaMenace | 4:b00081eecde0 | 101 | //On affiche nos différents résultats sur Teraterm |
MaxLaMenace | 4:b00081eecde0 | 102 | pc.printf("dist = %f \r\n", dist); //Distance avec le véhicule devant nous ou l'obstacle |
MaxLaMenace | 4:b00081eecde0 | 103 | pc.printf("RC = %lf \r\n", rc); //Rapport cyclique appliqué au moteur |
MaxLaMenace | 4:b00081eecde0 | 104 | pc.printf("v = %lf\n", v); //Vitesse du véhicule |
JulienB1 | 2:8817ad0d0a78 | 105 | |
thibautm | 3:f56ec086a122 | 106 | wait(0.001); //Il envoie l'impulsion pendant 1 ms |
thibautm | 3:f56ec086a122 | 107 | Trig =0 ; //On arrête l'impulsion pendant 1 ms |
JulienB1 | 0:5535594ef331 | 108 | wait(0.001); |
JulienB1 | 0:5535594ef331 | 109 | } |
JulienB1 | 0:5535594ef331 | 110 | } |