Prog Thib Ju
Dependencies: mbed
Revision 4:b00081eecde0, committed 2019-05-09
- Comitter:
- MaxLaMenace
- Date:
- Thu May 09 14:34:14 2019 +0000
- Parent:
- 3:f56ec086a122
- Commit message:
- fusion final commente
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r f56ec086a122 -r b00081eecde0 main.cpp --- a/main.cpp Thu May 02 11:33:20 2019 +0000 +++ b/main.cpp Thu May 09 14:34:14 2019 +0000 @@ -1,116 +1,110 @@ #include "mbed.h" - + // Definition des variables : moteur -PwmOut moteur1(D10); //On déclare la 1ère broche PWM pour la relier au moteur pour ainsi moduler la vitesse du moteur -PwmOut moteur2(D9); //On déclare la 2ème broche PWM -DigitalOut Trig(D12); //On déclare la broche qui va envoyer le signal à l'emetteur-recepteur d'ultrasons -InterruptIn reception(D8); //On déclare notre broche d'interruption + +PwmOut moteur1(D10); //On déclare la 1ère broche PWM pour la relier au moteur pour ainsi moduler la vitesse du moteur +PwmOut moteur2(D9); //On déclare la 2ème broche PWM +DigitalOut Trig(D12); //On déclare la broche qui va envoyer le signal à l'emetteur-recepteur d'ultrasons +InterruptIn reception(D8); //On déclare notre broche d'interruption -Serial pc(USBTX, USBRX); //On crée la connexion Pc-µchip pour afficher les résultats sur Teraterm +Serial pc(USBTX, USBRX); //On crée la connexion Pc-µchip pour afficher les résultats sur Teraterm -Timer t2; //On déclarer le timer servant pour calculer la distance emetteur-objet +Timer t2; //On déclarer le timer servant pour calculer la distance emetteur-objet -double rc; //Variable compris entre 0 et 1 qui contrôlera le rapport cyclique du moteur -float dist; //Variable qui nous permettra de calculer la distance voiture-objet -float dist_securite; //Variable à laquelle on affectera la distance à respecter +double rc; //Variable compris entre 0 et 1 qui contrôlera le rapport cyclique du moteur +float dist; //Variable qui nous permettra de calculer la distance voiture-objet +float dist_securite; //Variable à laquelle on affectera la distance à respecter +float tps3; //Variable de lecture de temps -// Definition des variables : codeur -InterruptIn ComptIncr(D7); +// Definition des variables : codeur incrémentale -Timer t1; +InterruptIn ComptIncr(D7); //Broche d'interruption permettant le comptage de front montant du codeur incrémentale + +Timer t1; //Timer pour connaître le temps qu'a mis la roue pour faire un tour -float tps1; -float tps2; -float tps3; -float dt; -int a; -double v; +float tps1; //Variable servant de zéro pour la mesure de temps d'un tour de roue +float tps2; //Variable servant de stop pour la mesure de temps d'un tour de roue +float dt; //Variable de stockage du calcul de l'intervalle de temps (tps2 - tps1) +int a; //Variable correspondant au nombre de front montant +double v; //Variable de stockage pour le calcul de la vitesse des roues // Definition des fonctions : moteur -void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant +void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant { - t2.start(); //On lance le timer + t2.start(); //On lance le timer } -void front_descendant()//Fonction qui s'effectuera lorsque la broche D8 verra un front descendant +void front_descendant() //Fonction qui s'effectuera lorsque la broche D8 verra un front descendant { - t2.stop(); //On arrête le timer - tps3=t2.read(); //On affecte à tps3 la valeur du timer (temps entre le front montant et le front descendant) - dist=174.9*tps3; //On calcule la distance emetteur-objet et donc voiture-objet - t2.reset(); //On réinitialise le timer à 0 - 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 - //qu'il doit y avoir entre la voiture et de la voiture devant elle en fonction de la vitesse - 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 - if (dist<=0.1) {rc = 0;} //On arrête le moteur quand la distance est trop petit - moteur2.write(rc); //On applique le nouveau rapport cyclique au moteur et par conséquent la nouvelle vitesse - - + t2.stop(); //On arrête le timer + tps3=t2.read(); //On affecte à tps3 la valeur du timer (temps entre le front montant et le front descendant) + dist=174.9*tps3; //On calcule la distance emetteur-objet et donc voiture-objet + t2.reset(); //On réinitialise le timer à 0 + 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 + {rc = rc-rc/200;} //qu'il doit y avoir entre la voiture et de la voiture devant elle en fonction de la vitesse + 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 + if (dist<=0.1) //On arrête le moteur quand la distance est trop petit + {rc = 0;} + moteur2.write(rc); //On applique le nouveau rapport cyclique au moteur et par conséquent la nouvelle vitesse +} -// Definition des fonctions : codeur +// Définition des fonctions : codeur incrémentale -void vitesse(){ - if (a == 0){ - tps1 = t1.read(); - } - a++; - if (a == 8) { - tps2 = t1.read(); - dt = tps2 - tps1; - v = 0.0201056/dt; // (8/25)*2*pi*4.5 cm de rayon - // pc.printf("v = %lf\n", v); - // pc.printf("dt = %f\n", 1/dt); - a = 0; - dist_securite = 6*v; - //printf("Vitesse = %f tours/s\n", 10/t.read()); +void vitesse() +{ + if (a == 0) //On s'assure que l'on compte bien chaque front montant du codeur + {tps1 = t1.read();} //On mesure le zéro pour le départ d'un tour de roue + a++; //La fonction est une boucle d'interruption donc si elle s'active cela signifie qu'un front montant est apparue + if (a == 8){ //Une fois le compteur de front montant arrivé à 8, on calcule la vitesse du véhicule + tps2 = t1.read(); //Mesure du temps qui s'est écoulé depuis tps1 + dt = tps2 - tps1; //Calcul de l'intervalle de temps + 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 + a = 0; //Remise à zéro du compteur + dist_securite = 6*v; //Critère de distance à respecter : 6 x la vitesse } } +// Début de la fonction principale -// Debut du main int main() { // Initialisation Moteur t2.reset(); - reception.rise(&front_montant); //On dit d'effectuer la fonction front_montant lorsque la broche reception (D8) reçoit un front montant - reception.fall(&front_descendant); //On dit d'effectuer la fonction front_descendant lorsque la broche reception (D8) reçoit un front descendant - moteur1.period_ms(10); //On définit la période du signal envoyé au moteur1 - moteur2.period_ms(10); //On définit la période du signal envoyé au moteur2 - moteur1.write(0); // On initialise le rapport cyclique du moteur1 à 0 - moteur2.write(0); // On initialise le rapport cyclique du moteur2 à 0 - pc.baud(9600); //On définit le débit d'information envoyé de la µchip au PC + reception.rise(&front_montant); //On dit d'effectuer la fonction front_montant lorsque la broche de réception (D8) reçoit un front montant + reception.fall(&front_descendant); //On dit d'effectuer la fonction front_descendant lorsque la broche de réception (D8) reçoit un front descendant + moteur1.period_ms(10); //On définit la période du signal envoyé au moteur1 + moteur2.period_ms(10); //On définit la période du signal envoyé au moteur2 + moteur1.write(0); //On initialise le rapport cyclique du moteur1 à 0 + moteur2.write(0); //On initialise le rapport cyclique du moteur2 à 0 + pc.baud(9600); //On définit le débit d'information envoyé de la µchip au PC // Initialisation Codeur - a = 0; - dt = 0; - t1.start(); - ComptIncr.rise(&vitesse); + a = 0; //Mise à zéro du compteur de front montant + dt = 0; //Mise à zéro de l'intervalle de temps pour le comptage de front montant + t1.start(); //Démarage du timer + ComptIncr.rise(&vitesse); //Appel de la fonction vitesse à chaque front montant détecté sur la broche de réception (D7) - // Debut du while + // Début de la boucle while(1) { // Partie moteur - Trig = 1; //On envoie à 1 à l'emetteur à ultrasons pour qu'il envoie ensuite une impulsion d'ultrason - //On affiche nos différent résultats sur Teraterm - pc.printf("dist = %f \r\n", dist); - pc.printf("RC = %lf \r\n", rc); - pc.printf("v = %lf\n", v); + Trig = 1; //On envoie à 1 à l'emetteur à ultrasons pour qu'il envoie ensuite une impulsion d'ultrason + + //On affiche nos différents résultats sur Teraterm + pc.printf("dist = %f \r\n", dist); //Distance avec le véhicule devant nous ou l'obstacle + pc.printf("RC = %lf \r\n", rc); //Rapport cyclique appliqué au moteur + pc.printf("v = %lf\n", v); //Vitesse du véhicule wait(0.001); //Il envoie l'impulsion pendant 1 ms Trig =0 ; //On arrête l'impulsion pendant 1 ms wait(0.001); - - - // Partie codeur - printf("Compteur = %d\n", a); - printf("Temps 1 = %f\n", tps1); - printf("Temps 2 = %f\n", tps2); - printf("Test temps 1 = %f\n", b); } } \ No newline at end of file