//==================================================================================
// Laboratoire2
// Ce programme permet de controller deux del a partir de deux bouton poussoir
// Par: Sylvain Brisebois
// 2024-02-29
// 243-403-H24 MO
//
//Immiter le comportement d'une porte logique XOR pour la DEL1 (Jaune)
//Immiter le comportement d'une porte logique NAND pour la DEL2 (verte)
//Fait clignoter la DEL de la carte Arduino a toutes les 250ms
//Affiche sur le port série la valeur des 2 boutons a chaque clignotement de la DEL sur la carte Arduino
//
//La DEL Jaune doit etre branchée sur le IO 49
//La DEL Verte doit etre branchée sur le IO 47
//Le bouton 1 sur le IO 45
//Le bouton 2 sur le IO 43
//==================================================================================
#define DEL_VERTE 47
#define DEL_JAUNE 49
#define BOUTON_1 43
#define BOUTON_2 45
// Variables globales indiquant l'etat des boutons
unsigned char cBouton1;
unsigned char cBouton2;
// Prototypes des fonctions definies dans ce programme
void lectureDesBoutons();
void clignoterDelArduino();
void affichagePortSerie();
void controlDelVerte();
void controlDelJaune();
void setup() {
// Initialisation des entre-sorties
pinMode(LED_BUILTIN, OUTPUT);
pinMode(DEL_VERTE, OUTPUT);
pinMode(DEL_JAUNE, OUTPUT);
pinMode(BOUTON_1, INPUT_PULLUP); // Activer les pull-up pour les boutons poussoirs
pinMode(BOUTON_2, INPUT_PULLUP); // Activer les pull-up pour les boutons poussoirs
// Initialisation du port serie
Serial.begin(9600);
// Initialisation des variables globales
cBouton1 = 0;
cBouton2 = 0;
}
void loop() {
clignoterDelArduino();
lectureDesBoutons();
controlDelVerte();
controlDelJaune();
affichagePortSerie();
}
// Fonction qui lit les boutons sur les broches et qui met a jour
// les variables globales d'etat des boutons
void lectureDesBoutons() {
// Lecture de la broche du bouton 1 et inversion de son etat
// Le bouton force la ligne a 0 lorsque appuye
cBouton1 = !digitalRead(BOUTON_1);
// Meme chose que la ligne precedente, mais avec un if-else en exemple
if(digitalRead(BOUTON_2) == 0) {
cBouton2 = 1;
}
else {
cBouton2 = 0;
}
}
// Fonction qui fait clignoter la DEL sur la carte arduino
void clignoterDelArduino()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(125);
digitalWrite(LED_BUILTIN, LOW);
delay(125);
}
// Affichage de l'etat des boutons sur le port serie
void affichagePortSerie() {
Serial.print("Bouton1:");
Serial.print(cBouton1);
Serial.print(" Bouton2:");
Serial.println(cBouton2);
}
// Control de la DEL Verte (logique NAND)
void controlDelVerte() {
digitalWrite(DEL_VERTE,!(cBouton1 && cBouton2));
}
// Controle de la DEL Jaune (logique XOR)
void controlDelJaune() {
digitalWrite(DEL_JAUNE,cBouton1 ^ cBouton2);
}