Prog Thib Ju

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }