prog de test carte eclairage kiffy

Dependencies:   mbed

main.cpp

Committer:
superphil06
Date:
2018-10-08
Revision:
0:967f1b496596

File content as of revision 0:967f1b496596:

#include "mbed.h"


#define PERIODE 10

DigitalOut myled(LED3);
DigitalOut AvD(PB_0);
DigitalOut AvClD(PB_1);
DigitalOut AvG(PF_0);
DigitalOut AvClG(PF_1);
DigitalOut myled3(LED3);
DigitalOut Buz (PA_8);
Serial pc(USBTX, USBRX); // tx, rx

DigitalIn InClD (PA_1);
DigitalIn InClG (PA_3);
DigitalIn InRoute (PA_5);
DigitalIn InCrois (PA_7);
DigitalIn InBuz (PA_6);
int iClD,iClDOld,iClG,iClGOld,iRoute=1,iRouteOld=1,iCrois,iCroisOld,iBuz,iBuzOld;
int TimCl=0;
bool bStcld=false,bStclg=false,bSroute=false,bScrois=false,bBuz=false,bTim1=false;// state of output
int iState=0,iTim1=0;// 


enum State { ROUTE,CROIS,CLIGN,OFF,OFF1,OFF2,OFF3 };
State Light = OFF3;// startup value as ROUTE beam


int giCommodo;


Ticker tick100ms;

void lect_commodo (void)
{giCommodo=giCommodo |(((!InClD)&0X1)+ ((!InClG)&0X1)<<1+((!InRoute)&0X1)<<2+((!InCrois)&0X1)<<3+((!InBuz)&0X1)<<4);
giCommodo=giCommodo &(((!InClD)&0X1)+ ((!InClG)&0X1)<<1+((!InRoute)&0X1)<<2+((!InCrois)&0X1)<<3+((!InBuz)&0X1)<<4);

 }


void Gest_Event (void) // gestionnaire d evenement global
{iClD=InClD.read();iClG=InClG.read();iRoute=InRoute.read();iCrois=InCrois.read();iBuz=InBuz.read();// read input
    
    
    
    
    if ((iRoute==0) && (iRouteOld==1)) // passage en mode Route
    { bSroute=true;// switch to high beam
    }
    if ((iRoute==1) && (iRouteOld==0)) // sortie mode Route
    { bSroute=false;// switch to high beam
    }
    
    if ((iCrois==0) && (iCroisOld==1)) // passage en mode croisement
      { bScrois=true;// switch to high beam
    }
    if ((iCrois==1) && (iCroisOld==0)) // sortie  en mode croisement
      { bScrois=false;// switch to high beam
    }
    
   /*  if ((iClD==0) && (iClDOld==1)) // cligno D actif
      { bStcld=true;// switch to high beam
    }
    if ((iClD==1) && (iClDOld==0)) // clign D inactift
      { bStcld=false;// switch to high beam
    }
    
     if ((iClG==0) && (iClGOld==1)) // cligno g actif
      { bStclg=true;// switch to high beam
    }
    if ((iClG==1) && (iClGOld==0)) // clign g inactift
      { bStclg=false;// switch to high beam
    }
*/
 if ((iBuz==0) && (iBuzOld==1)) // buzzer actif
      { bBuz=true;// switch to high beam
    }
   /* if ((iBuz==1) && (iBuzOld==0)) // buzzer inactift
      { bBuz=false;// switch to high beam
    }*/
    
    if (iTim1>0){iTim1-- ; bTim1=true;}
    else bTim1=false;
    
    
    // update old event value for next time
    iBuzOld=iBuz;
    iClGOld=iClG;
    iClDOld=iClD;
    iCroisOld=iCrois;
    iRouteOld=iRoute;
}

void init_gene(void)
{Buz=0;
     AvD=0;// front beam OFF
AvClD=0;
AvG=0;// front beam OFF
    AvClG=0;
    
    }



void Tick100ms_(void)
{
    
   // iClD=InClD.read();iClG=InClG.read();iRoute=InRoute.read();iCrois=InCrois.read();iBuz=InBuz.read();
   Gest_Event();// call event manager
   
   
   
   
   
            switch (iState)
        {
             case OFF3:
            AvD=0;AvG=0;// front beam off
            if (bSroute==true )
            {  iState=ROUTE; 
            }
         
         
         
         /*   else{if (bRoute==true) &&(bTim1==true))
                { iState=CLIGN; iTim1=30*PERIODE;}*/
             break;
            
            case ROUTE:
            AvD=1;AvG=1;// front beam on
            if (bSroute==false)
            { iTim1=(int) 30*PERIODE;
            iState=OFF1; }
            break;
            
             case OFF1:
             AvD=0;AvG=0;// front beam off
            if ((bSroute==true) &&(bTim1==true))
            {  iState=CROIS; }
            if ((bSroute==true) &&(bTim1==false))
            {iState=ROUTE;}
            
             case CROIS:
             AvD=1;AvG=1;// front beam on
            if (bSroute==false)
            { iState=OFF2; 
            iTim1=30*PERIODE;}
                        
            break;
            
             case OFF2:
             AvD=0;AvG=0;// front beam off
            if ((bSroute==true) &&(bTim1==false))
            {  iState=ROUTE; }
            if ((bSroute==true) &&(bTim1==true))
            {iState=CLIGN;}
            break;
            
             case CLIGN:
             AvD=1;AvG=1;// front beam on
            if (bSroute==false)
            { iState=OFF3;
            iTim1=30*PERIODE; }
                        
            break;
            
                   
        }
        
     if (iBuz==0)// commande klaxon
     Buz=1;
     else Buz=0;
   
   
   
    // allumage clignotant
    if (TimCl==4)// 0.5s elapsed
    {TimCl=0;
        // clignotant droit
        if (iClD==0) // clid d actif
            if (bStcld==false) //cld off
            {bStcld=true; AvClD=1;}
            else
            {bStcld=false; AvClD=0;}
         else
         { bStcld=false; AvClD=0;}//   
          // clignotant gauche
         if (iClG==0) // clig d actif
            if (bStclg==false) //cld off
            {bStclg=true; AvClG=1;}
            else
            {bStclg=false; AvClG=0;}
         else
         { bStclg=false; AvClG=0;}//    
         
         
         
         
        }
        else TimCl++;
      
       
       
    
    
    }


int main() {
    
    
    char cChoix;
    tick100ms.attach(&Tick100ms_,(1/(float)PERIODE)); // main ticker 100ms 
    init_gene();
    
    
       while(cChoix!='q' and cChoix!='Q')
{pc.printf(" veuillez saisir un choix parmi la liste proposee: \n");
 pc.printf("a: on/off avD \n");
  pc.printf("b: on/off avG \n");
   pc.printf("c: on/off ClavD \n");
  pc.printf("d: on/off ClAvG   \n");
    pc.printf("e: on/off Buz   \n");
    pc.printf("f: lecture commodo   \n");
 pc.printf(" q:quitter \n");
 
 /************* multithreading : main thread need to sleep in order to allow web response */
 while (pc.readable()==0) // determine if char availabler
 {//Thread::wait(10);
  wait_ms(10);
 
 } // wait 10 until char available on serial input

 /************* end of main thread sleep  ****************/ 
 
 pc.scanf(" %c",&cChoix);
 switch (cChoix){
     case 'a': 
     AvD=!AvD;
     break;
     case 'b': 
     AvG=!AvG;
     break;
     case 'c': 
     AvClD=!AvClD;
     break;
     case 'd': 
     AvClG=!AvClG;
     break;
     
     case 'e': 
     Buz=!Buz;
     break;
       case 'f': 
    lect_commodo ();
   // pc.printf(" commodo=%2X \n",giCommodo);
   pc.printf ("clD:%d lcG:%d Rou:%d Crois%d Buz:%d \n",InClD.read(),InClG.read(),InRoute.read(),InCrois.read(),InBuz.read());
     break;
     
     case 'q': 
     break;
     }
} // end while
       
       
       
   }