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