Pages: [1]   Go Down
Author Topic: Duemilanove, 2 questions: pourquoi boucle While(?) et pourquoi delay(?)  (Read 595 times)
0 Members and 1 Guest are viewing this topic.
FR
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Perdu dans le médoc
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Ceci est mon 1° post, c'est aussi mon 1° programme sur arduino, et aussi mon 1° programme sur µControleur !

Pour la question 1, le télérupteur avec sa boucle "tant que" ne fonctionne pas; la solution: une boucle "si" fonctionne, mais pourquoi !?
Mon test est pourtant bien tant que le bouton 3 est appuyé, mof?

Pour la question 2, j'ai des routines de test en dehors du "Loop" (mais j'ai essayé en les intégrant dans le "Loop", c'est pareil),
ou j'affecte des valeurs à des variables (simple quoi!), et quand je teste ces variables dans le "Loop", PAF, tout est bloqué !?
J'ai là aussi trouvé la solution en mettant un delai avant tout test ultérieur (mis juste après l'appel de la routine dans le "Loop"),
mais là encore, pourquoi ?
Je ne veux pas de delay(), dans mon cheminement, je fait du comptage précis dans une autre routine (chrono) et ça me gène !
Merci d'avance pour vos réponses éclairées  smiley-wink
Code:
//Question 1:
void loop(){
while (bouton == 3){
  if (etat == 1 && front == false){
  etat = 0;
  front = true;  //memo appui
  Serial.println("off");
  }
  else if (etat == 0 && front == false){
  etat = 1;
  front = true;  //memo appui
  Serial.println("on");
  }
}
if (bouton != 3){
  front = false;  //raz memo sur relachement
}
}

//Question 2 : Pourquoi le µC (ou le programme?) plante si j'enlève le "delay", si petit soit-il !?
void loop(){
recepteur();
delay(1);
appui();
delay(1);

if (/* PAF, sans les delay(1) */){
//blabla
}
}
Logged

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

Question 1 :

qu'est ce qui change la valeur de bouton ?

Question 2 :

il faut que tu nous en dises plus sur les fonctions recepteur() et appui().
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

FR
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Perdu dans le médoc
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

question 1: mes boutons sont tous branchés sur A0 (toutes les pins sont utilisées sur le bazar  smiley-roll-sweat)
Code:
void appui(){
vBouton =analogRead(0);
if (vBouton >700) {bouton = 0;}
else if (vBouton >586 && vBouton <596) {bouton = 1;}
else if (vBouton >482 && vBouton <492) {bouton = 2;}
else if (vBouton >313 && vBouton <323) {bouton = 3;}
}
Donc est-ce parce-que les affectations sont faites avec des "if" qui fait que "while" dans la boucle de télérupteur marche pas, mais "if" si? ( smiley-red)

question 2: voir au-dessus, mais j'ai mis les tests de la variable en dehors du Loop (le programme est trop gros pour
la compréhension et le debuggage) et je n'ai plus de plantage  smiley
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour la question 1, le télérupteur avec sa boucle "tant que" ne fonctionne pas; la solution: une boucle "si" fonctionne, mais pourquoi !?
Mon test est pourtant bien tant que le bouton 3 est appuyé, mof?
La fonction loop() est appelé par une boucle infini, avec if (bouton == 3) à chaque itération de la fonction loop le µc fait la comparaison, si elle est vrai le µc exécute le code ou passe à la suite, avec un while le programme resterai bloquer.

Pour la question 2, j'ai des routines de test en dehors du "Loop" (mais j'ai essayé en les intégrant dans le "Loop", c'est pareil),
ou j'affecte des valeurs à des variables (simple quoi!), et quand je teste ces variables dans le "Loop", PAF, tout est bloqué !?
J'ai là aussi trouvé la solution en mettant un delai avant tout test ultérieur (mis juste après l'appel de la routine dans le "Loop"),
mais là encore, pourquoi ?
Je ne veux pas de delay(), dans mon cheminement, je fait du comptage précis dans une autre routine (chrono) et ça me gène !
Avec le code complet cela serais beaucoup plus simple pour résoudre ton probléme.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

FR
Offline Offline
Newbie
*
Karma: 1
Posts: 49
Perdu dans le médoc
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour vos réponses,
Pour la boucle "while", je vois que je ne suis pas le seul à avoir eu des problèmes :
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1237119479/0  smiley-wink
Je ne m'en servirais à l'avenir que pour des itérations (du style while  i<100 , faire qqchose, i++) mais pas
pour des conditions d'attentes ou je me servirais seulement du "if".
Pour la question 2, j'ai sorti les tests de ces variables du "loop" (j'en ai fait aussi une routine) et tout fonctionne correctement,
je n'ai plus de delay(1) dans mon programme  smiley
Logged

Pages: [1]   Go Up
Jump to: