#include <OneButton.h>
const byte PIN_BOUTON_ALIMENTATION = 3;
const byte PIN_SELECTEUR_SORTIE = 4;
const byte PIN_SELECTEUR_ENTREE = 5;
const byte PIN_RELAY_12 = 12;
const byte PIN_RELAY_11 = 11;
const byte PIN_RELAY_10 = 10;
const byte PIN_RELAY_7 = 7;
const byte PIN_RELAY_2 = 2;
OneButton boutonAlimentation(PIN_BOUTON_ALIMENTATION, true);
OneButton boutonSelecteurSortie(PIN_SELECTEUR_SORTIE, true);
OneButton boutonSelecteurEntree(PIN_SELECTEUR_ENTREE, true);
enum EtatAlimentation : byte {
ETEINT,
ALLUMAGE_EN_COURS,
ALLUME,
EXTINCTION_EN_COURS
};
EtatAlimentation etatAlimentation = ETEINT;
boolean etatSelecteurSortieActif = false;
boolean etatSelecteurEntreeActif = false;
unsigned long debutAllumage = 0;
void boutonAlimentationAppuye() {
if (etatAlimentation == ETEINT) {
digitalWrite(PIN_RELAY_12, HIGH);
etatAlimentation = ALLUMAGE_EN_COURS;
debutAllumage = millis();
} else if (etatAlimentation == ALLUME) {
etatAlimentation = EXTINCTION_EN_COURS;
}
}
void boutonSelecteurSortieAppuye() {
etatSelecteurSortieActif = !etatSelecteurSortieActif;
digitalWrite(PIN_RELAY_11, etatSelecteurSortieActif ? HIGH : LOW);
digitalWrite(PIN_RELAY_10, etatSelecteurSortieActif ? LOW : HIGH);
}
void boutonSelecteurEntreeAppuye() {
etatSelecteurEntreeActif = !etatSelecteurEntreeActif;
digitalWrite(PIN_RELAY_7, etatSelecteurEntreeActif ? HIGH : LOW);
digitalWrite(PIN_RELAY_2, etatSelecteurEntreeActif ? LOW : HIGH);
}
void setup() {
pinMode(PIN_RELAY_12, OUTPUT);
pinMode(PIN_RELAY_11, OUTPUT);
pinMode(PIN_RELAY_10, OUTPUT);
pinMode(PIN_RELAY_7, OUTPUT);
pinMode(PIN_RELAY_2, OUTPUT);
boutonAlimentation.attachClick(boutonAlimentationAppuye);
boutonSelecteurSortie.attachClick(boutonSelecteurSortieAppuye);
boutonSelecteurEntree.attachClick(boutonSelecteurEntreeAppuye);
}
void loop() {
boutonAlimentation.tick();
boutonSelecteurSortie.tick();
boutonSelecteurEntree.tick();
switch (etatAlimentation) {
case ALLUMAGE_EN_COURS:
if (millis() - debutAllumage >= 4000) {
digitalWrite(PIN_RELAY_11, etatSelecteurSortieActif ? HIGH : LOW);
digitalWrite(PIN_RELAY_10, etatSelecteurSortieActif ? LOW : HIGH);
digitalWrite(PIN_RELAY_7, etatSelecteurEntreeActif ? HIGH : LOW);
digitalWrite(PIN_RELAY_2, etatSelecteurEntreeActif ? LOW : HIGH);
etatAlimentation = ALLUME;
}
break;
case EXTINCTION_EN_COURS:
digitalWrite(PIN_RELAY_12, LOW);
digitalWrite(PIN_RELAY_11, LOW);
digitalWrite(PIN_RELAY_10, LOW);
digitalWrite(PIN_RELAY_7, LOW);
digitalWrite(PIN_RELAY_2, LOW);
etatAlimentation = ETEINT;
break;
default: break;
}
}
R11
R10
R12
R2
R7
POWER
IN
OUT
Le programme doit:
Lorsque POWER est 'OFF' toutes les sorties et entrées doivent être coupées '12, 11, 10, 7 & 2'.
Lorsque POWER est 'ON' la sortie 12 est activée et 4 secondes plus tard la sortie 11 & 7 est activées.
Le sélecteur de sortie bascule entre la sortie 11 et 10.
Le sélecteur d'entrée bascule entre la sortie 7 et 2.