Pages: [1]   Go Down
Author Topic: Problème de boucle  (Read 586 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3435
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3435
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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

Code:
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.
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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%
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

va voir son tuto dans la section adéquate
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Pages: [1]   Go Up
Jump to: