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);
    }
}