byte etat; //numéro de l'état actif
byte entreeA; //valeur lue sur l'entrée A
byte entreeB; //valeur lue sur l'entrée B
int brocheA; //numéro de broche Arduino utilisée pour l'entrée A
int brocheB; //numéro de broche Arduino utilisée pour l'entrée B
int position; //position angulaire mesurée
void setup() // configuration matérielle
{
Serial.begin(115200);
// put your setup code here, to run once:
brocheA = A4;
brocheB = A5;
pinMode(brocheA, INPUT_PULLUP);
pinMode(brocheB, INPUT_PULLUP);
entreeA = digitalRead(brocheA);
entreeB = digitalRead(brocheB);
position = 0;
etat = 0;
}
void loop() {
// put your main code here, to run repeatedly:
entreeA = digitalRead(brocheA);
entreeB = digitalRead(brocheB);
// lecture des broches simultanéments ( problème sur Arduino ) en cc la HAL
if ((etat==0) && (entreeA == 1))
position = position + 1;
if ((etat==1) && (entreeA == 0))
position = position - 1;
// codage de la machine à état
switch (etat){
case 0: if ( entreeA == 1)
etat= 1;
else if (entreeB == 1)
etat= 3;
break;
case 1: if ( entreeB == 1)
etat= 2;
else if (entreeA == 0)
etat= 0;
break;
case 2: if ( entreeA == 0)
etat= 3;
else if (entreeB == 0)
etat= 1;
break;
case 3: if ( entreeB == 0)
etat= 0;
else if (entreeA == 1)
etat= 2;
break;
default:
etat = 0;
}
//actions sur état
//affichage de la valeur mesurée 10 fois par seconde
unsigned int periodiciteTache1=100;
static unsigned long timerTache1 = millis();
if (millis() - timerTache1 >= periodiciteTache1) {
timerTache1 += periodiciteTache1;
Serial.println(position);
}
}