J’ai besoin d’utilise la fonction millis() sur plusieurs palier ou séquence, je ne sais pas trop comment l’expliquer. Impossible pour moi d’utiliser la fonction delay() parce que ça bloque le reste du programme.
Dons pour expliquer mon programme que j’ai simplifié, c’est pour du chauffage, dans le code les radiateurs représenté par Led 1-2-3 et les 3 modes par Bouton 1-2-3. L’Arduino doit démarrer ou éteindre les radiateurs selon le mode choisi mais avec un délai entre les démarrages.
ModeOFF : aucun démarre ou arrête les 3
ModeA : Démarre le radiateur #1, 5 secondes plus tard démarre le radiateur #2 et le 3ime reste à arrêt.
ModeB : Démarre le radiateur #1, 5 secondes plus tard démarre le radiateur #2, 5 secondes plus tard démarre le radiateur #3.
Voilà, assez simple mais j’éprouve de la difficulté a géré la fonction millis().
//INPUT_PULLUP = Bouton connecter entre le GND et la PIN#
int Start_Dragon_Interval = 5000; //Temps interval entre chaque avant de demarre l'autre. (5 Sec)
unsigned long lastmillis = 0;
const byte Bouton1 = 2; //PIN_BOUTON 1 : Met le tout a OFF (Mode OFF)
const byte Bouton2 = 3; //PIN_BOUTON 2 : Active LED 1-2 (Mode A)
const byte Bouton3 = 4; //PIN_BOUTON 3 : Active LED 1-2-3 (Mode B)
const byte Led1 = 10; //PIN_LED 1
const byte Led2 = 11; //PIN_LED 2
const byte Led3 = 12; //PIN_LED 3
boolean BoutonState1 = 1;
boolean BoutonState2 = 1;
boolean BoutonState3 = 1;
boolean ModeOFF = 0;
boolean ModeA = 0;
boolean ModeB = 0;
void setup() {
pinMode(Bouton1, INPUT_PULLUP);
pinMode(Bouton2, INPUT_PULLUP);
pinMode(Bouton3, INPUT_PULLUP);
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
}
void loop() {
BoutonState1 = digitalRead(Bouton1);
BoutonState2 = digitalRead(Bouton2);
BoutonState3 = digitalRead(Bouton3);
if (BoutonState1 == 0) {
ModeOFF = 1;
ModeA = 0;
ModeB = 0;
}
if (BoutonState2 == 0) {
ModeOFF = 0;
ModeA = 1;
ModeB = 0;
}
if (BoutonState3 == 0) {
ModeOFF = 0;
ModeA = 0;
ModeB = 1;
}
if (ModeOFF == 1) {
digitalWrite (Led1, LOW);
digitalWrite (Led2, LOW);
digitalWrite (Led3, LOW);
}
if (ModeA == 1) {
lastmillis=millis();
digitalWrite (Led1, HIGH);
if (lastmillis + Start_Dragon_Interval < millis()){
digitalWrite (Led2, HIGH);
digitalWrite (Led3, LOW);
}
}
if (ModeB == 1) {
digitalWrite (Led1, HIGH);
digitalWrite (Led2, HIGH);
digitalWrite (Led3, HIGH);
}
}