Bonjour,
je tente de me faire une centrale clignotants / warning / feu de stop pour l'intégrer sur ma future remorque cargo (livraison de paniers de légumes et marchés).
Les clignotants et feu fonctionnent en 12V, je passe par de la commande de relais.
J'utilise une la bibliothèque EZbutton pour connecter un combo de boutons de guidon pour moto.
Il y a un interrupteur ON/OFF/ON pour les clignotants.
Un interrupteur ON/OFF pour les warning.
Pour le test, j'ai un switch pour simuler l'appuie sur la poignée de frein.
J'ai réussi à faire la base, clignotants droit / gauche et feu de stop.
J'utilise millis() pour le clignotement gauche / droite dans une fonction.
1 relais par côté.
Mon petit soucis concerne la partie warning, je souhaite également utiliser une fonction avec la gestion des clignotments avec millis() mais dès que je remplace les digitalwrite / delay() mis directement de le loop(), plus rien ne fonctionne.
Quand j'essaye avec la fonction "ActionCligno" qui tourne avec le bouton ON/OFF/ON, plus rien ne fonctionne non plus.
Voici le code, si vous avez une piste...
#include <ezButton.h>
byte etatCligno = LOW;
unsigned long dateDernierChangement = 0;
//Parameters
//boutons
ezButton BtnClignoG(5);
ezButton BtnClignoD(6);
ezButton BtnWarning(7);
ezButton BtnFeuStop(8);
//relais
const int ClignoG = 2;
const int ClignoD = 3;
const int FeuStop = 4;
void setup() {
//Init Serial USB
Serial.begin(9600);
BtnClignoG.setDebounceTime(50);
BtnClignoD.setDebounceTime(50);
BtnWarning.setDebounceTime(50);
BtnFeuStop.setDebounceTime(50);
pinMode(ClignoG, OUTPUT);
pinMode(ClignoD, OUTPUT);
pinMode(FeuStop, OUTPUT);
}
void loop() {
BtnClignoG.loop();
BtnClignoD.loop();
BtnWarning.loop();
BtnFeuStop.loop();
int BtnClignoGEtat = BtnClignoG.getState();
int BtnClignoDEtat = BtnClignoD.getState();
int BtnWarningEtat = BtnWarning.getState();
int BtnFeuStopEtat = BtnFeuStop.getState();
// vérification état des boutons
if (BtnClignoG.isPressed())
Serial.println("ON : Clignotant gauche");
if (BtnClignoD.isPressed())
Serial.println("ON : Clignotant droite");
if (BtnWarning.isPressed())
Serial.println("ON : Warning");
if (BtnFeuStop.isPressed())
Serial.println("ON : STOP");
if (BtnClignoG.isReleased())
Serial.println("OFF : Clignotant gauche");
if (BtnClignoD.isReleased())
Serial.println("OFF : Clignotant droite");
if (BtnWarning.isReleased())
Serial.println("OFF : Warning");
if (BtnFeuStop.isReleased())
Serial.println("OFF : STOP");
//Gestion des relais
//Feu Stop
if (BtnFeuStopEtat == 1) {
// le bouton est OFF
digitalWrite(FeuStop, LOW);
} else {
// le bouton est ON
digitalWrite(FeuStop, HIGH);
}
//Clignotant Gauche
if (BtnClignoGEtat == 1) {
// le bouton est OFF
digitalWrite(ClignoG, LOW);
} else {
// le bouton est ON
ActionCligno(ClignoG);
}
//Clignotant Droite
if (BtnClignoDEtat == 1) {
// le bouton est OFF
digitalWrite(ClignoD, LOW);
} else {
// le bouton est ON
ActionCligno(ClignoD);
}
//Warning
if (BtnWarningEtat == 1) {
// le bouton est OFF
} else {
// le bouton est ON
digitalWrite(ClignoD, HIGH);
digitalWrite(ClignoG, HIGH);
delay(500);
digitalWrite(ClignoD, LOW);
digitalWrite(ClignoG, LOW);
delay(500);
}
}
void ActionCligno(int Cote)
{
unsigned long dateCourante = millis();
unsigned long intervalle = dateCourante - dateDernierChangement;
if (etatCligno == HIGH && intervalle > 500) {
// extinction de la DEL car elle est allumée (HIGH) et 500ms se sont écoulées
etatCligno = LOW;
digitalWrite(Cote, etatCligno);
dateDernierChangement = dateCourante;
Serial.println(etatCligno);
}
else if (etatCligno == LOW && intervalle > 250) {
// allumage de la DEL car elle est éteinte (LOW) et 250ms se sont écoulées
etatCligno = HIGH;
digitalWrite(Cote, etatCligno);
dateDernierChangement = dateCourante;
Serial.println(etatCligno);
}
}
void ActionWarning()
{
unsigned long dateCourante = millis();
unsigned long intervalle = dateCourante - dateDernierChangement;
if (etatCligno == HIGH && intervalle > 500) {
// extinction de la DEL car elle est allumée (HIGH) et 500ms se sont écoulées
etatCligno = LOW;
digitalWrite(ClignoG, etatCligno);
digitalWrite(ClignoD, etatCligno);
dateDernierChangement = dateCourante;
}
else if (etatCligno == LOW && intervalle > 250) {
// allumage de la DEL car elle est éteinte (LOW) et 250ms se sont écoulées
etatCligno = HIGH;
digitalWrite(ClignoG, etatCligno);
digitalWrite(ClignoD, etatCligno);
dateDernierChangement = dateCourante;
}
}
Merci d'avance