Allumer les leds et déclencher le buzzer sur commande

On adopte la convention suivante :

  • NL0 => 0 V

  • NL1 => +5 V

Préparation au défi

Fondamental

D'après le schéma structurel de la carte TickTock :

  • sur quel niveau logique (NL0 ou NL1) chaque diode s'allume-t-elle ?

  • quel niveau logique génère chaque poussoir quand il est actionné ?

Attention

On observe que lorsque un bouton-poussoir est relâché la broche du microcontrôleur associée se retrouve en l'air car il n'y a pas de résistance de tirage à l'état haut (pull-up).

Heureusement on peut activer une résistance de pull-up à l'intérieur du microcontrôleur par programmation en écrivant :

1
void setup() {
2
  pinMode(X, INPUT_PULLUP); // X étant le n° de la broche UNO concernée
3
}

Le défi

Le poussoir K1 allumera les 4 leds et activera le buzzer, le poussoir K2 désactivera les leds et le buzzer. Les méthodes qui suivent vous aiderons à relever ce défi.

Appeler le professeur pour valider le bon fonctionnement.

MéthodeLire l'état d'une broche

Il faut utiliser l'instruction digitalRead() et stocker le résultat dans une variable logique (booléenne).

1
// Au dessus du setup
2
bool etat_bp_K1; // on déclare une variable de type boolénne (logique)
3
const int K1 = 9; // car K1 est raccordé à la broche 9 de l'Arduino Uno
1
void setup() {
2
  pinMode(K1, INPUT_PULLUP); // car la broche 9 doit être une entrée avec une résistance de pull-up interne
3
}
1
void loop() {
2
  etat_bp_K1 = digitalRead(K1); // la variable etat_bp_K1 contiendra 0 ou 1 en fonction de l'état du bp K1 (relâché ou appuyé)
3
}

MéthodeGénérer un niveau logique sur une broche

Il faut utiliser l'instruction digitalWrite() en précisant la broche et le niveau de tension.

1
// Au dessus du setup
2
const int D1_BLUE = 2; // car la led bleu D1 est raccordée à la broche 2 de l'Arduino Uno
1
void setup() {
2
  pinMode(D1_BLUE, OUTPUT); // car la broche 2 doit être une sortie
3
}
1
void loop() {
2
  digitalWrite(D1_BLUE, HIGH); // un NL1 est généré sur la broche 2 de l'Arduino Uno
3
  digitalWrite(D1_BLUE, LOW); // un NL0 est généré sur la broche 2 de l'Arduino Uno
4
}

MéthodeTester la valeur d'une variable logique

1
void loop() {
2
  if (etat_bp_K1 == HIGH) {
3
    // code executé si etat_bp_K1 contient 1
4
  }
5
  if (etat_bp_K1 == LOW) {
6
    // code executé si etat_bp_K1 contient 0
7
  }
8
}