Arduino + relais +minuterie

Bonjour Je suis bloqué par mon manque de connaissances sur la programmation. J'ai récupéré un programme pour mon arduino pour pilotée des relais . J'ai branché mes volets dessus le système fonctionne très bien comme ça. Vous allez me dire il y a pas de problème alors, si justement. Mes volets s'ouvrent et ce ferment complètement sans positionnement intermédiaires. J'ai oublié de vous dire que je pilote mes volets par un raspberry( domoticz). Voilà ce que je voudrais faire : Quand j'envoie ma commande de monte ou descendre mettre une tempo réglable depuis domiticz. En surfant sur le forum, j'ai trouvé 2 façon. le delay (qui fait une pause )que je ne veut pas car j 'ai une fonction en cour sur le raspberry est ne me plais pas. Le millis que je voudrais intégrait a mon programme arduino.Le problème est la comment faire ?

Re bonjour
voici le programme de mon aurduino en piece jointe.

sketch_aug05a.ino (9.66 KB)

Bonjour personne pour m'aider.

hello il est joli ton prg mais ou est la cde du volet ?

un "digitalWrite(voletN°x, HIGH);" et il faudra connaitre la tempo ou alors elle sera par défaut

voila

// paramétrage des pin digital en output pour radiateur et relay en Low par defaut

Mode chaîne = " " ;
Pour ( int i = 14 ; i < 41 ; i ++) {
Mode = EEPROMvalues. Sous - chaîne (i - 14 , i - 13 );
PinMode (i, OUTPUT);
Si (mode == " 1 " ) {
digitalWrite (i, HIGH);
}
Si (mode == " 0 " ) {
digitalWrite (i, LOW);
}
}
de la ligne 119 a 131.
pour la tempo il y a de problème par contre j’ai plusieurs volet a commande qui on pas la même taille.

tu dois faire un truc dans ce style

Si '(mode == " 1 " ) &&(montee_volet==true))
    {
      unsigned long deb =millis();
      while ((millis()-deb)<2000){digitalWrite (i, HIGH);}//montee pendant 2 secondes par defaut
    }
    else (Si (mode == " 0 " ) 
    {
      digitalWrite (i, LOW);
    }

Pas la peine de répéter les commandes pour mettre à HIGH ou LOW tout le temps

Fairewhile ((millis()-deb)<2000){digitalWrite (i, HIGH);}c’est vraiment comme faire

digitalWrite(i,HIGH);
delay(2000);

car on ne repasse pas par la loop entre temps… ce n’est pas la bonne approche s’il veut se débarrasser des delay(). Il faut une machine à états qui gère un état “volets en déplacement” et un évenement “minuterie” (cf mon tuto sur les machines à états)

@ JML c'est vrai, j'avais zappé la fin de son message

Bonjour ,j 'ai un peut de mal avec les code que vous me donnez a vrai dire.

J'ai lu le truc en diagonal mais C'est un gros bazar votre code... rien de parametrable, des Nos de pins sans noms, des Strings partout , une identation totalement approximative... c'est un truc généré automatiquement ?

Comme l'interface web ne sait traiter que des ordres simples de on ou off vous ne pouvez pas passer d'information supplémentaire de durée au programme arduino - il faut donc gérer cela de l'autre côté - L'application qui envoie les URL doit déclencher une action puis l'interrompre... je ne connais pas domoticz donc à vous de creuser de ce côté là

Sinon faut tout jeter à la poubelle (oui je sais je suis assez extrême :) ) et re-ecrire cela directement sur l'arduino. (Il sert à quoi tellement le RPI ?)

Bon dans ce cas ,je vais plutôt refait le code car je l ai récupéré sur un forum . le rpi commande toute ma domotique car j'ai plusieurs appareil, je commande mon arduino pas un page web, il pilote mes volets (un relais pour monte et un relais pour descendre avec un sécurité), ça pilote aussi mes portes de garage et mes portails. Mon but est de pouvoir pilote mes volets comme un variateur.

Comme l'interface web ne sait traiter que des ordres simples de on ou off vous ne pouvez pas passer d'information supplémentaire de durée au programme arduino - il faut donc gérer cela de l'autre côté - L'application qui envoie les URL doit déclencher une action puis l'interrompre... je ne connais pas domoticz donc à vous de creuser de ce côté là Pour envoyer des info suplemementaires(des ordres suplementaires) a l arduino , on peut passe par le cordon usb?

Pour envoyer des info suplemementaires(des ordres suplementaires) a l arduino , on peut passe par le cordon usb?

oui si votre Arduino écoute aussi son port série