Prog Thib Ju
Dependencies: mbed
main.cpp
- Committer:
- thibautm
- Date:
- 2019-05-02
- Revision:
- 3:f56ec086a122
- Parent:
- 2:8817ad0d0a78
- Child:
- 4:b00081eecde0
File content as of revision 3:f56ec086a122:
#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 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 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 // Definition des variables : codeur InterruptIn ComptIncr(D7); Timer t1; float tps1; float tps2; float tps3; float dt; int a; double v; // Definition des fonctions : moteur void front_montant() //Fonction qui s'effectuera lorsque la broche D8 verra un front montant { t2.start(); //On lance le timer } 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 // Definition des fonctions : codeur 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()); } } // 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 // Initialisation Codeur a = 0; dt = 0; t1.start(); ComptIncr.rise(&vitesse); // Debut du while 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); 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); } }