1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
const int nbBtn = 8; // le code est composé de 8 boutons
// Les boutons sont sur les entrées 2, 3, 4, 5, 6, 7, 8, 9. Sur UNO on évitera de connecter les voies 0 et 1 surtout si on utilise les fonctions Serial()
int codeBtn[nbBtn]={2,3,4,5,6,7,8,9}; // code, l'ordre a une importance (le code est ici 23456789).
int relais = 13; // sortie pour le relais (il y a aussi une led montée sur la platine)
int i, idx;
bool erreur;
void setup()
{
// configuration des E/S
for (i=0; i<nbBtn; i++)
{
pinMode(codeBtn[i], INPUT_PULLUP);
}
pinMode(relais, OUTPUT);
idx = 0;
erreur = false;
}
void loop()
{
erreur = false;
// rappel : les entrées sont en pull-up.
// on scanne toutes les voies, si une voie est à 0 (LOW) et que cela correspond, on incrémente un compteur
// si le mauvais bouton est pressé, il y a erreur, le compteur retourne à et on doit recommencer la séquence.
for (i=0; i<nbBtn; i++)
{
if (digitalRead(codeBtn[i]) == LOW)
{
if (i == idx)
idx++;
else
erreur = true;
}
}
if (erreur)
idx = 0;
if (idx == nbBtn) // gagné
{
digitalWrite(relais, HIGH); // ouverture loquet
delais(10000);
digitalWrite(relais, LOW); // fermeture loquet après 10s
}
delay(500); // pour gérer les rebonds des interrupteurs
} |
Partager