Ignorer la navigation

Programme Arduino

Programme Arduino :

 

//Parameters
#define bp_Pin1 2
#define bp_Pin2 5
#define imp1_pin 10
#define imp2_pin 12

//Variables
boolean etat1 = false; // etat de l'entrée 1 après gestion de l'antirebond
boolean ancien_etat1 = false;
boolean etat2 = false; // etat de l'entrée 2 après gestion de l'antirebond
boolean ancien_etat2 = false;
unsigned long memo_temps1 = 0;
unsigned long memo_temps2 = 0;
unsigned long temps_rebond = 50; // durée de prise en compte des rebonds
boolean bp1, bp2;
boolean ancien_etat1f = false; // variable pour le changement d'état
boolean ancien_etat2f = false; // variable pour le changement d'état
boolean front1= false; // front vu et génération de l'impulsion 1
boolean front2= false; // front vu et génération de l'impulsion 2
unsigned long memo_temps_imp1 = 0;
unsigned long memo_temps_imp2 = 0;
unsigned duree_imp = 500; // durée de l'impulsion


void setup() {
  //Init digital input
  pinMode(bp_Pin1, INPUT_PULLUP);
  pinMode(bp_Pin2, INPUT_PULLUP);
  pinMode(imp1_pin, OUTPUT);
  pinMode(imp2_pin, OUTPUT);
  digitalWrite(imp1_pin, LOW);
  digitalWrite(imp2_pin, LOW);

}

void loop() {

////lecture BP1 (sans rebonds)
bp1 = digitalRead(bp_Pin1);
if (bp1 != ancien_etat1) {
  memo_temps1 = millis();
  }

if ((millis() - memo_temps1)>= temps_rebond) {
  if (bp1 != etat1) {
     etat1 = bp1;
     }
  }
ancien_etat1 = bp1;

////lecture BP2 (sans rebonds)
bp2 = digitalRead(bp_Pin2);
if (bp2 != ancien_etat2) {
   memo_temps2 = millis();
   }
if ((millis() - memo_temps2)>= temps_rebond) {
    if (bp2 != etat2) {
       etat2 = bp2;
    }
  }
ancien_etat2 = bp2;


/// détection d'un changement d'état (front) et génération d'une impulsion pour BP1
if (etat1 !=ancien_etat1f && front1==false)
 {
  front1=true;
  ancien_etat1f=etat1;
  memo_temps_imp1 = millis();
  digitalWrite(imp1_pin, HIGH); // début de l'impulsion 1
 }


if (front1==true) // gestion de la durée de l'impulsion 1
 {
  if ((millis() - memo_temps_imp1)> duree_imp) // fin de l'impulsion 1
  {
     digitalWrite(imp1_pin, LOW);
     front1=false;
  }
 }


/// détection d'un changement d'état (front) et génération d'une impulsion pour BP2
if (etat2 !=ancien_etat2f && front2==false)
  {
     front2=true;
     ancien_etat2f=etat2;
     memo_temps_imp2 = millis();
    digitalWrite(imp2_pin, HIGH); // début de l'impulsion 2
  }


if (front2==true) // gestion de la durée de l'impulsion 2
  {
     if ((millis() - memo_temps_imp2)> duree_imp) // fin de l'impulsion 2
       {
           digitalWrite(imp2_pin, LOW);
           front2=false;
       }
   }

} // fin du loop