MTobjets: Exemple 3
Gestion par événements pour UNO, Nano, Mega

Eclairage d'atelier

Problème posé

Vu sur un forum:

Je veux piloter 8 relais statiques avec 8 boutons poussoirs via une carte Arduino Mega. Les boutons poussoirs sont pourvus d'une LED. Lorsque j’appuie sur un bouton et que je le relâche, le relais correspondant se ferme, et la LED du bouton s’allume. Lorsque je refait une pression sur le même bouton, le relais s'ouvre et la LED du bouton s’éteint. Un neuvième bouton poussoir sert à éteindre d'une seule pression tous les relais qui ont été allumés.

Simulation

Nous allons voir comment réaliser:

Je veux piloter 6 leds avec 6 boutons poussoirs via une carte Uno, Nano ou Mega. Lorsque j’appuie sur un bouton et que je le relâche, la LED correspondante au bouton s’allume. Lorsque je refait une pression sur le même bouton, la LED correspondante s’éteint. Un septième bouton poussoir sert à éteindre d'une seule pression toutes les leds qui ont été allumées.

Programme complet recommandé

Ce programme se fait complètement sous interruption, et libère loop qui peut être utilisé pour faire autre chose.

// Ce programme gère 6 lumières. 

#include <MTobjects.h> // V1.0.2 Voir http://arduino.dansetrad.fr/MTobjects

const uint8_t PIN_BUTTON_0 = A0; // Bouton câblé entre GND et A0
const uint8_t PIN_BUTTON_1 = A1;
const uint8_t PIN_BUTTON_2 = A2;
const uint8_t PIN_BUTTON_3 = A3;
const uint8_t PIN_BUTTON_4 = A5;
const uint8_t PIN_BUTTON_5 = A5;

const uint8_t PIN_LED_0 = 3; // Led câblée entre 3 et GND
const uint8_t PIN_LED_1 = 4;
const uint8_t PIN_LED_2 = 5;
const uint8_t PIN_LED_3 = 6;
const uint8_t PIN_LED_4 = 7;
const uint8_t PIN_LED_5 = 8


// Pour le bouton 0
void allume0(void)
{
  digitalWrite(PIN_LED_0, HIGH);
}
void eteint0(void)
{
  digitalWrite(PIN_LED_0, LOW);
}
MTcheckButton Bouton0(PIN_BUTTON_0, allume0, eteint0);


// Pour le bouton 1
void allume1(void)
{
  digitalWrite(PIN_LED_1, HIGH);
}
void eteint1(void)
{
  digitalWrite(PIN_LED_1, LOW);
}
MTcheckButton Bouton1(PIN_BUTTON_1, allume1, eteint1);


// Pour le bouton 2
void allume2(void)
{
  digitalWrite(PIN_LED_2, HIGH);
}
void eteint2(void)
{
  digitalWrite(PIN_LED_2, LOW);
}
MTcheckButton Bouton2(PIN_BUTTON_2, allume2, eteint2);


// Pour le bouton 3
void allume3(void)
{
  digitalWrite(PIN_LED_3, HIGH);
}
void eteint3(void)
{
  digitalWrite(PIN_LED_3, LOW);
}
MTcheckButton Bouton3(PIN_BUTTON_3, allume3, eteint3);


// Pour le bouton 4
void allume4(void)
{
  digitalWrite(PIN_LED_4, HIGH);
}
void eteint4(void)
{
  digitalWrite(PIN_LED_4, LOW);
}
MTcheckButton Bouton0(PIN_BUTTON_, allume4, eteint4);


// Pour le bouton 5
void allume5(void)
{
  digitalWrite(PIN_LED_5, HIGH);
}
void eteint5(void)
{
  digitalWrite(PIN_LED_5, LOW);
}
MTcheckButton Bouton5(PIN_BUTTON_5, allume5, eteint5);


// Pour le dernier bouton
void eteintTout(void)
{
  Bouton0.unselect(); // Eteint la led 0
  Bouton1.unselect(); // Eteint la led 1
  Bouton2.unselect();
  Bouton3.unselect();
  Bouton4.unselect();
  Bouton5.unselect();
}
MTbutton BoutonEteint(PIN_BUTTON_ETEINT, eteintTout);


void setup()
{
  pinMode(PIN_LED_0, OUTPUT);
  pinMode(PIN_LED_1, OUTPUT);
  pinMode(PIN_LED_2, OUTPUT);
  pinMode(PIN_LED_3, OUTPUT);
  pinMode(PIN_LED_4, OUTPUT);
  pinMode(PIN_LED_5, OUTPUT);
}

void loop(){}