noraml

Dependencies:   mbed IHM_V2

Revision:
0:7e4a20d28a90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jan 23 18:40:02 2019 +0000
@@ -0,0 +1,391 @@
+#include "IHM.h"                // contient mbed.h
+#include "Nboard.h"      
+#define ENFONCE 0
+#define CONSTANTE 0.7
+
+IHM ihm;
+Timer timer;
+char rar; 
+float vpot,capt_eg,capt_cg,capt_cd,capt_rac,capt_ed;
+
+void test();
+void course();
+void nouvel_suivi_automate();
+void raccourci();
+
+/*-------------------------------------------------------------------------------------------------*/
+int main(void)
+{
+    unsigned char choix=0;
+    
+    ihm.LCD_clear();
+    timer.reset();
+    timer.start();
+    
+    while (timer.read()<3)
+        {
+            if (BP0==ENFONCE)
+                choix=1;
+        }
+        
+    if (choix==1)
+        {
+            test();
+        }
+    
+    else
+        course();
+    
+    return 0;
+}
+/*----------------------------------------------------------------------------------------------------------*/
+void test(void)
+{
+    
+    ihm.LCD_gotoxy(0,0);
+    ihm.LCD_printf("TEST Robot D3");
+    wait(1.0);
+    
+    pwmg.period_us(50);
+    pwmd.period_us(50);
+    ihm.LCD_clear();
+    
+    while (1)
+    {   
+      BusSelectMux = Ana1;//centre gauche
+      wait_us(1);
+      capt_cg=AnaIn.read();
+
+      BusSelectMux = Ana2;//centre droit
+      wait_us(1);
+      capt_cd=AnaIn.read();
+
+      BusSelectMux = Ana0;//gauche
+      wait_us(1);
+      capt_eg=AnaIn.read();
+
+      BusSelectMux = Ana5;//droite
+      wait_us(1);
+      capt_ed=AnaIn.read();
+
+      BusSelectMux = Ana4;//raccourci
+      wait_us(1);
+      capt_rac=AnaIn.read();
+      
+      
+            if (capt_rac>CONSTANTE)
+                led4=1;
+            else
+                led4=0;
+            
+            if (capt_eg>CONSTANTE)
+                led3=1;
+            else
+                led3=0;
+            
+            if (capt_cg>CONSTANTE)
+                led2=1;
+            else
+                led2=0;
+            
+            if (capt_cd>CONSTANTE)
+                led1=1;
+            else
+                led1=0;
+            
+            if (capt_ed>CONSTANTE)
+                LED0=1;
+            else
+                LED0=0; 
+      
+
+      ihm.LCD_gotoxy(0,0);
+      ihm.LCD_printf("%3.2f", capt_rac);//raccourci
+      ihm.LCD_gotoxy(1,3);
+      ihm.LCD_printf("%3.2f ", capt_eg);//gauche
+      ihm.LCD_gotoxy(0,6);
+      ihm.LCD_printf("%3.2f", capt_cg);//centre gauche
+      ihm.LCD_gotoxy(1,9);
+      ihm.LCD_printf("%3.2f", capt_cd);//centre droit
+      ihm.LCD_gotoxy(0,12);
+      ihm.LCD_printf("%3.2f", capt_ed);//droite
+      
+      //Test moteurs.
+        if(BP2==0)//gauche 
+            {
+                pwmg.write(0);
+                pwmd.write(0.25);          
+                wait(2);
+                pwmg.write(0);
+                pwmd.write(0);
+            }
+            if(BP1==0)//droite
+            {              
+                pwmg.write(0.25);
+                pwmd.write(0);              
+                wait(2);
+                pwmg.write(0);
+                pwmd.write(0);
+            } 
+         if(BP0 == 0)
+            {
+                while(BP0==0)
+                {
+                    BusSelectMux = Vpot; 
+                    wait_us(1);
+                    vpot=AnaIn.read();
+                    pwmd.write(vpot);
+                    pwmg.write(vpot);                 
+                }
+                pwmg.write(0);
+                pwmd.write(0);  
+            }
+      //Test Bouton Poussoir.     
+      if (BP==1)
+            led7=1;
+      else
+            led7=0;
+    
+      if (Jack==0)
+            course();
+    }
+}
+/*----------------------------------------------------------------------------------------------------------*/
+void course(void)
+    {
+    ihm.LCD_clear();    
+     LEDs=0x80;
+        
+    pwmg.period_us(50);
+    pwmd.period_us(50);
+    
+    ihm.LCD_gotoxy(0,0);
+    ihm.LCD_printf("COURSE D3: Jack?");
+    
+    //Attente du Jack.
+   
+    while (Jack==1)
+    {
+        BusSelectMux = Vpot;
+        wait_us(1);
+        vpot=AnaIn.read();
+        
+        ihm.LCD_gotoxy(1,0);
+        ihm.LCD_printf("%3.2f",vpot);  //Affichage valeur potentiomètre.
+        
+        //Chenillard d'attente.
+        LEDs=LEDs>>1;
+        wait(0.5-vpot);
+            if(LEDs==0x01)
+             {
+                    LEDs=0x80;
+                     wait(0.5-vpot);
+             }
+    }
+    
+    //Lancement du timer.
+    timer.reset();
+    timer.start();
+    
+    //Départ du robot sur la ligne.
+        
+                while(1)   
+                {
+                    /*if (0<rar && rar<3)
+                    {raccourci();}
+                    else*/ 
+                    nouvel_suivi_automate();
+                     
+                }
+    
+
+ }
+ /*--------------------------------------------------------------------------------------------------------------------------*/   
+void nouvel_suivi_automate(void)
+{
+    typedef enum {ligne, sortieD, attente, sortieG,arret} type_suivi ;
+    static type_suivi suivi = ligne ;
+    
+      BusSelectMux = Ana1;//centre gauche
+      wait_us(1);
+      capt_cg=AnaIn.read();
+
+      BusSelectMux = Ana2;//centre droit
+      wait_us(1);
+      capt_cd=AnaIn.read();
+
+      BusSelectMux = Ana0;//gauche
+      wait_us(1);
+      capt_eg=AnaIn.read();
+
+      BusSelectMux = Ana5;//droite
+      wait_us(1);
+      capt_ed=AnaIn.read();
+
+      BusSelectMux = Ana4;//raccourci
+      wait_us(1);
+      capt_rac=AnaIn.read();           
+    
+    
+    switch(suivi)
+    {
+        case ligne:
+                    pwmg.write(0.26+vpot);
+                    pwmd.write(0.25+vpot); 
+                  
+               /* if(capt_rac>CONSTANTE &&  capt_ed<CONSTANTE)
+                {
+                    rar=1;
+                }*/
+                if(capt_cg > CONSTANTE && capt_cd < CONSTANTE)
+                {
+                    suivi = sortieD;
+                }  
+                else if(capt_cg < CONSTANTE && capt_cd > CONSTANTE)
+                {
+                    suivi = sortieG;
+                    
+                }
+                 
+               
+                break;   
+        
+    case sortieD: //correction sortie droite
+                    pwmg.write(0.15+vpot);
+                    pwmd.write(0.45+vpot);
+                    
+                    if(capt_cg > CONSTANTE && capt_cd > CONSTANTE)
+                    {
+                    suivi = ligne;
+                    }        
+                    
+                  break;
+                    
+     case sortieG: //correction sortie gauche
+                pwmg.write(0.45+vpot);
+                pwmd.write(0.15+vpot);  
+             
+             if(capt_cg > CONSTANTE && capt_cd > CONSTANTE)
+             {
+                suivi = ligne;
+             } 
+             break;
+       case arret:
+       
+            timer.stop();
+            ihm.LCD_gotoxy(1,7);
+            ihm.LCD_printf("%.2fsec",timer.read());
+              
+            pwmg.write(0);
+            pwmd.write(0);
+            
+            if (Jack==1)
+            {
+                wait(0.2);
+                while(Jack==1);
+                course();
+            } 
+            break;
+               
+    }
+    
+    if (BP==1)
+            suivi=arret;
+}
+/*---------------------------------------------------------------------------------------*/
+
+void raccourci(void)
+{
+    typedef enum {ligne, sortieD, attente, sortieG,raccour} type_suivi ;
+    static type_suivi suivi = ligne ;
+    
+      BusSelectMux = Ana1;//centre gauche
+      wait_us(1);
+      capt_cg=AnaIn.read();
+
+      BusSelectMux = Ana2;//centre droit
+      wait_us(1);
+      capt_cd=AnaIn.read();
+
+      BusSelectMux = Ana0;//gauche
+      wait_us(1);
+      capt_eg=AnaIn.read();
+
+      BusSelectMux = Ana5;//droite
+      wait_us(1);
+      capt_ed=AnaIn.read();
+
+      BusSelectMux = Ana4;//raccourci
+      wait_us(1);
+      capt_rac=AnaIn.read();
+            
+      BusSelectMux = Vpot;//potentiometre
+      wait_us(1);
+      vpot=AnaIn.read();
+    
+    
+    switch(suivi)
+    {
+        case ligne:
+                    pwmg.write(0.257);
+                    pwmd.write(0.25); 
+                   
+                  
+                if(capt_cg < CONSTANTE && capt_cd > CONSTANTE)
+                {
+                    suivi = sortieG;
+                }  
+                if(capt_cg > CONSTANTE && capt_cd < CONSTANTE)
+             {
+                suivi = sortieD;
+             }
+                break;   
+        
+    case sortieD: //correction sortie droite
+                    pwmg.write(0.15);
+                    pwmd.write(0.25);
+                    
+                    if(capt_cg > CONSTANTE && capt_cd >CONSTANTE)
+                    {
+                    suivi = ligne;
+                    }        
+                    
+                  break;
+                    
+     case sortieG: //correction sortie gauche
+                pwmg.write(0.25);
+                pwmd.write(0.15);  
+             
+             if(capt_cg > CONSTANTE && capt_cd > CONSTANTE)
+             {
+                suivi = ligne;
+             }
+            
+               break;
+     
+     case attente: //correction sortie gauche
+                pwmg.write(0.257);
+                pwmd.write(0.25); 
+                 
+             
+             if(capt_rac > CONSTANTE )
+             {
+                suivi = raccour;
+             }
+            
+               break;
+     
+     case raccour: //correction sortie gauche
+                    while(capt_ed<CONSTANTE)
+                        {
+                            pwmg.write(0.01);
+                            pwmd.write(0.2);
+                        } 
+                         suivi = ligne;
+                         rar++;
+
+               break; 
+        if(capt_rac>0.8)
+        {suivi =attente;} 
+    }
+}