[RESOLU]Reset un Delay

Bonjour/bonsoir , :D Voila, je me remet vers vous car je suis un peux perdu !! Je précise que je débute :)

Pour commencer , voici mon projet:

Un escalier (déjà la je vois que vous avez compris) , des bandes leds , et des capteurs :D.

Objectif final complexe , donc je vais faire simple: éclairer l'escalier dans le sens de marche lorsqu'il fait assez sombre. (une marche à la fois de bas en haut ou de haut en bas , selon le sens dans le quel on arrive)

Fonctionnement: Capteur bas s'active -> leds commencent à s'allumer par le bas jusqu'en haut. Une fois toutes allumées , un delay(o) se met en route (le temps que monsieur monte). Soit le delay(o) se termine et les led s’éteignent de bas en haut (une à la fois). Soit madame passe en même temps pour descendre pendant que l'escalier est éclaire -> capteur haut (ou bas)détecte quelque chose , et le delay(o) recommence(donc les leds ne s'éteignent pas !)

En gros, le temps que le processus est lancé, je voudrais que les capteurs Reset le delay(o). Ou une solution équivalente pour ne pas que l'escalier se coupe.

Probleme: Je ne parviens pas à faire en sorte que, si madame monte en même temps (ou descend) pendant que le delay (o) est en cours, que le delay(o) recommence.

Du a expliquer :/

Merci d'avance !

voici le code simplifié avec uniquement 3leds pour montrer le sens de marche et 2 capteur:

int i = 1000; //vitesse d'allumage des marches
int o = 5000; //temps que les marches restes toutes allumées
int led1 = 13;
int led2 = 12;
int led3 = 11;
int bouton1 = 10; //capteur 1
int bouton2 = 9;  // capteur 2


void setup() 
{
  pinMode(led1, OUTPUT); //led1
  pinMode(led2, OUTPUT); //led2 
  pinMode(led3, OUTPUT); //led3
  pinMode(bouton1, INPUT); //bouton1
  pinMode(bouton2, INPUT); //bouton 2
  Serial.begin(9600);
}


void loop() 
{
       if (digitalRead(bouton1)==HIGH)
    {
    Serial.println("Mode 1");
    digitalWrite(led1, HIGH);
    delay(i); 
    digitalWrite(led2, HIGH);
    delay(i); 
    digitalWrite(led3, HIGH);
    delay(o);    
    Serial.println("Mode 1 FIN");
    digitalWrite(led1, LOW);
    delay(i);
    digitalWrite(led2, LOW);
    delay(i);
    digitalWrite(led3, LOW);   
    delay(i);   
    }
  

    
    if (digitalRead(bouton2)==HIGH)       
    {
    Serial.println("Mode 2");
    digitalWrite(led3, HIGH);
    delay(i); 
    digitalWrite(led2, HIGH);
    delay(i); 
    digitalWrite(led1, HIGH);
    delay(o); 
    digitalWrite(led3, LOW);
    delay(i);
    digitalWrite(led2, LOW);
    delay(i);
    digitalWrite(led1, LOW);
    delay(i);
    } 
  
}

Bonsoir!

As-tu essayé/pensé à millis() ?

Non pas du tout, une explication ? je viens de chercher sur le site même mais ce n'est pas tres clair. :s

Alors je pense que ta solution est ici! Je ne suis pas assez calé (je débute également) pour t'expliquer. Tape "blinkwithoutdelay" dans ton moteur de recherche favori et tu comprendras mieux (il y a un exemple aussi dans l'IDE.

En gros, millis() comptabilise le nombre de milliseconde écoulées depuis le début du programme. Avec des if et une certaine logique math/temps, tu pourras temporiser ton programme sans le mettre hs comme avec delay.

Il y a des tutos en français là-dessus, tape millis() sans délai ou des trucs du genre, tu vas finir par trouver, et vite comprendre!

Je ne pourrai pas t'en dire plus, bon courage à toi pour ton projet !

Je te remercie ! Je me lance dans les recherches pour cette nouvelles piste !

Si D'autre idée il ne faut pas hésité ! Je donnerai suite en bien ou en mal à propos de mes recherches.

Il faut effectivement utiliser millis() et pas delay()

Lire le tuto http://eskimon.fr/76-arduino-202-introduire-le-temps et regarder vers la fin

Et il faudra bâtir cela comme une machine à états (automates finis ou state machine en anglais)

Merci pour les mots-clés J-M-L, c'est pratique pour faire des recherches...

Mon dieu ca ma l'air prometteur ! Merci beaucoup pour vos réponse rapide !!

Je vous tiens au jus ! je lis le long poste que tu m'as envoyer =D

MERCI beaucoup !! j'ai enfin réussi ! Serte il faut que je peaufine tout ca , mais le fonctionnement à l'air en ordre maintenant ! Apres toutes c'est heure de recherche quelle plaisir!!

Merci beaucoup pour vos réponse si rapide

Bravo!