programme course avec menu amélioré

Dependencies:   MMA8451Q mbed

Fork of Programme_course_2017_virage_ameliore by Freescale_Cachan

main.cpp

Committer:
leandre
Date:
2017-03-18
Revision:
3:c0aae5aa230b
Parent:
2:a37de5eb8bf3

File content as of revision 3:c0aae5aa230b:



#include "Mlib.h"



MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADRESS);
DigitalOut activate_motor (PTE21);
DigitalOut led1(PTB8);
DigitalOut led2(PTB9);
DigitalOut led3(PTB10);
DigitalOut led4(PTB11);


AnalogIn pot1 (PTB3);
AnalogIn pot2 (PTB2);

DigitalIn S1(PTE2);
DigitalIn S2(PTE3);
DigitalIn S3(PTE4);
DigitalIn S4(PTE5);
Timer t_ligne;
Timer timer;
int ralentire = 0;

/*
AnalogIn pot1 (PTB3);
AnalogIn pot2 (PTB2);

printf("%f", pot1.read());
*/

int tempsInte = MAX_INTE;
unsigned char cam_data[128];
int baricentre = 0;
int begin = 0;
char flag = 0;
char clk_active = 0;
char bosse = 0; 
int bary_tab[3];
int bary_tab_bis[3];
char last_five[5];
float last_three[3];
Timer t_debut;
int somme_derivee = 0;
int VIT = 0;
int KP = 80;
int seuil_der = 0;
int ajust_vitesse = 0;
int new_bari = 0;
int vitesse_virage = 0;
int ligne_droite = 0;
int integral;
char Interval[TAILLE_TAB_INT];
char mem_a;
char mem_b;


DigitalOut BP1(PTC13);//boutton A
DigitalOut BP2(PTC17);//boutton B
DigitalOut SI(PTD7);
DigitalIn CLK_IN(PTE31);
DigitalOut CLK(PTE1);
AnalogIn AIN(PTD5);

Ticker t_cyc; 
Ticker t_clk;
Ticker t_finInte;

Serial pc(USBTX, USBRX);


void cycle()
{
    flag = 1;
}






void Init_car()
{
    motor_init();

    init_bary();

    Get_pot_value();
    
    t_cyc.attach_us(&cycle, FRQ_CYC);//interruption cycle
    
    clk_active = 0;//L'horloge est désactivée
    t_clk.attach(&F_CLK, 1/(2.0*FRQ_CLK));//interruption horloge
    
    
    
    timer.start();

    angle_servo_moteur(0);//on met les roues droite pour commencer
}

void arret()
{
    PWM_motor(MOTEUR_A, 0);//arret des moteurs
    PWM_motor(MOTEUR_B, 0);
    angle_servo_moteur(0);//roues droites                                                   //ici
    while(BP1);
    while(!BP1){                                                                            //ici
    menu();
    }
    while(BP1);
    Init_car();     //permet de changer la vitesse avec le pot                              //ici
    t_debut.reset();
}

int main() {
    Init_car();
    
    
    while(!BP1)//tant que l'on appuie pas sur BP1
    {
        menu();
    }
    while(BP1);//on attends le relachement de BP1
    
    
/***************Début de la course***************/   

    t_debut.start();//Timer du début de la course
    t_ligne.start();
    
    

/************************************************/ 
   
/**********On demarre les moteurs****************/
    PWM_motor(MOTEUR_A, VIT);
    PWM_motor(MOTEUR_B, VIT);
    
    while(1) {//boucle principale
        if(BP1)
        {
            arret();
        }
        if(flag == 1)//début du cycle
        {
            flag = 0;

            /***************Récupération données*****************/
            
            F_GetData();
            
            /*****************Traitement Image*******************/
            
            T_image();
            
            /****************Gestion des Moteurs*****************/
            
            angle_servo_moteur(new_bari);
            
            moteurs_arriere();

            /****************Balance des blancs******************/
            
            F_BalanceBlancs();
            
            /******************Gestion_bosse*********************/
            
            Gestion_bosse();
            
            /****************Detection_arrivee*******************/
            
            fin_course();
            if(VIT==0) arret();
            

        }
        
    }
}