Prog Thib Ju
Dependencies: mbed
Diff: main.cpp
- Revision:
- 3:f56ec086a122
- Parent:
- 2:8817ad0d0a78
- Child:
- 4:b00081eecde0
--- a/main.cpp Thu May 02 10:25:13 2019 +0000 +++ b/main.cpp Thu May 02 11:33:20 2019 +0000 @@ -1,16 +1,20 @@ #include "mbed.h" - + + // Definition des variables : moteur -PwmOut moteur1(D10); -PwmOut moteur2(D9); -DigitalOut Trig(D12); -InterruptIn reception(D8); +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); +Timer t2; //On déclarer le timer servant pour calculer la distance emetteur-objet -Timer t2; +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; // Definition des variables : codeur InterruptIn ComptIncr(D7); @@ -23,44 +27,31 @@ float dt; int a; double v; -float dist; -float dist_securite; + // Definition des fonctions : moteur -void front_montant() +void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant { - t2.start(); + t2.start(); //On lance le timer } -void front_descendant() +void front_descendant()//Fonction qui s'effectuera lorsque la broche D8 verra un front descendant { - t2.stop(); - tps3=t2.read(); - dist=174.9*tps3; - // pc.printf("dist = %lf \r\n", dist); - t2.reset(); - // if (dist == 0.0000){ rc = 1;} - /* if (dist<=v*2){ rc = 0;} - if (dist<= v*3 && dist>v*2){ rc = 0.2;} - if (dist<= v*4 && dist>v*3){ rc = 0.4;} - if (dist<= v*5 && dist>v*4){ rc = 0.6;} - if (dist<= v*6 && dist>v*5){ rc = 0.8;} - if (dist >= v*6) { rc = 1; }*/ - //if (dist<= dist_securite){rc = rc-rc/200;} - //if (dist> dist_securite){rc = rc+(rc+1)/200;} - //if (dist<=0.1) {rc = 0;} - rc= 1; - moteur2.write(rc); + 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 - // pc.printf("RC = %lf \r\n", rc); + -} - // Definition des fonctions : codeur -void vitesse(); - void vitesse(){ if (a == 0){ tps1 = t1.read(); @@ -78,46 +69,48 @@ } } + + // Debut du main int main() { - - // Initialisation Moteur t2.reset(); - reception.rise(&front_montant); - reception.fall(&front_descendant); - moteur1.period_ms(10); - moteur2.period_ms(10); - moteur1.write(0); - moteur2.write(0); - pc.baud(9600); + 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 + // Initialisation Codeur a = 0; dt = 0; t1.start(); - ComptIncr.rise(&vitesse); + // Debut du while while(1) { // Partie moteur - Trig = 1; - pc.printf("dist = %f \r\n", dist); + 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); - wait(0.001); - Trig =0 ; + 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); + 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