Problème de boucle

Bonsoir, j'ai un petit problème que je n'arrive pas à résoudre, je vous explique la situation :
J'ai une carte arduino ethernet, un shield TinkerKit, un capteur de température, un de luminosité, une carte de commande moteur L298P et un moteur CC.

Le but de mon programme est de faire tourner le moteur dans un sens ou dans l'autre à une certaine vitesse et un certain temps puis rester à cette position.
J'ai donc codé tout ça, avec plusieurs boucle If en fonction de mes 2 variables températures et luminosité.

Par exemple si la température passe a + de 25°C le moteur tourne dans un sens pendant 5sec.
Si la luminosité passe en dessous de 200 lumens le moteur tourne dans un sens pendant 10sec.

Bref cela marche bien .. sauf que je voudrais que dès que la température passe au dessus de 25° le moteur tourne 5sec mais qu'une seule fois .. et du coup dès que la boucle recommence le moteur fait que de tourner tant que la température est > 25°.
Je cherche, réfléchis, étudie, mais je ne trouve pas de solutions convaincantes !!
S'il vous plait aidez moi !!

Cordialement

Tu fais une boucle if qui englobe le tout et qui test la valeur d'un booléan, si 0 tu fais tourner ton moteur si 1 tu passe tout droit... tu mets ta valeur de déclaration à 0 et tu change la valeur juste en dessous de la ligne qui fait tourner ton moteur.

Il faut raisonner un peu.

Comment tu ferais si c'était toi qui faisait fonctionner le système à la main.
Tu noterais quelque part que tu as déjà fait tourner le moteur au moins une fois et qu'il faut attendre une certaine condition (que tu n'as d'ailleurs pas explicitée ici) avant de pouvoir faire tourner le moteur de nouveau.
Donc tu écris ton programme pour qu'il fasse la même chose.

Au passage tes explications sur le fonctionnement attendu de ton système ne sont pas très claires. Tu devrais déjà poser sur le papier ce que tu veux obtenir.
Telle condition(s) fait(font) passer le système dans tel état. Tel autre(s) condition(s) fait(font) passer le système dans tel autre état. Et ainsi de suite.
Il faut déterminer tous les états du système et les conditions qui font passer d'un état dans un autre de manière exhaustive. Ensuite c'est beaucoup plus facile de coder quelque chose qui fonctionne bien du premier coup. Si dès le départ le fonctionnement n'est pas clairement défini la mise au point se fait par bidouillage et on arrive à coder des monstres.

Le problème du booléan est que dans le if je dois vérifier 2 valeurs ..

Mets ton code, j'ai l'impression que tu mélanges tout

Le problème du booléan est que dans le if je dois vérifier 2 valeurs .

Mais rien ne t'empêche de faire une combinaison de plusieurs test dans la condition du if

if ((valeur1>consigne1) && (valeur2>consigne2)){   // si les 2 valeurs dépassent leur consigne
    mon_code
}

if ((valeur1>consigne1) || (valeur2>consigne2)){   // si au moins l'une des 2 valeurs dépasse sa consigne
    mon_code
}

Et tu peux faire des combinaisons de ET (&&) et de OU (||) pour gérer des tests plus complexes.

Je pense que ce qu'il veut dire, c'est qu'il a deux moteurs et que si il mets le tout dans une boucle if comme je le lui ai suggéré, un seul moteur fonctionnera.....

J'aimerais justement qu'il réfléchisse... tout comme tu le lui suggère :wink:

Ok j'explique tout ! Je suis elève de terminale Sti2d, voici le cahier des charges de mon projet : " La commande d'un volet à partir d'un site web doit permettre de diffuser facilement la lumière extérieure. Lors d'une chaleur supérieure à 25°c, le volet devra se fermer automatiquement à 50% afin de conserver une certaine fraicheur dans l'habitat. A la tombée de la nuit ainsi qu'au lever du jour, sa gestion sera également automatique. "

J'ai donc, ma carte arduino, mon shield TinketKit, 1 capteur de température et un de luminosité, une carte L298P et un moteur CC.
J'ai également un site internet qui affiche le tableau avec les valeurs envoyées par les capteurs grâce à un iframe.
Je dois également créer 3 boutons sur le site pour ouvrir, fermer a 50% et fermer entièrement le volet.

J'ai donc 2 variables, une en degré Celsius, et une en lux.
Si je mets une condition If temperature >= 25, fermer volet à 50%, dans ma boucle ça fonctionnera, mais quand la boucle va recommencer et que la température n'aura pas bougée le volet redescendra encore de 50% et ainsi de suite.
Pour le reste : quand lux < 50 fermet le volet à 50%
Quand lux > 200 et <25° ouvrir le volet a 100%

Si le Barbudor était là il te dirais >>>>>>>>>> machine d'état.

va voir son tuto dans la section adéquate

Je ne trouve pas de tuto " machine d'état "

Désolé, je suis pas trop en état de chercher :sweat_smile:.... regarde là :

http://arduino.cc/forum/index.php/topic,143810.0.html