Dans l'Espace
Offline
Full Member
Karma: 0
Posts: 233
ArduinoBot builder \^^/
|
 |
« on: January 26, 2011, 12:35:00 pm » |
Bonjour @toutes et @tous Voilà je souhaite faire ce montage : (pour mon hexapode) - un bp poussoir - une led - mon arduino avec comme code : if ETAT_BP==APPUI && LED==OFF => LED=ON if ETAT_BP==APPUI && LED==ON => LED=OFF if ETAT_BP==PAS_APPUI && LED==OFF => LED=OFF if ETAT_BP==PAS_APPUI && LED==ON => LED=ON En gros je cherche à coder un état bistable ON / OFF ainsi si je relâche le bp poussoir, la led reste allumée et si je rappui, elle s'éteint. (peut être avec une mémorisation de l'état dans une variable, mais j'ai le même problème : la variable se remet à zéro quand je relâche le bp  ) Merci d'avance 
|
|
|
|
|
Logged
|
Proverbe Tibétain : Un mensonge est un saut du haut du toit
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2894
Yoplait... le pt'it suisse
|
 |
« Reply #1 on: January 26, 2011, 12:41:15 pm » |
Tu compliques drôlement... if (bouton==1){ led =! led; }
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Dans l'Espace
Offline
Full Member
Karma: 0
Posts: 233
ArduinoBot builder \^^/
|
 |
« Reply #2 on: January 26, 2011, 12:48:48 pm » |
@Jean-François :  et ça marche ?? pourrais-tu préciser ton idée ? stp 
|
|
|
|
|
Logged
|
Proverbe Tibétain : Un mensonge est un saut du haut du toit
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2894
Yoplait... le pt'it suisse
|
 |
« Reply #3 on: January 26, 2011, 12:51:26 pm » |
L'état de la led est inversé à chaque appuis sur le bouton.
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Dans l'Espace
Offline
Full Member
Karma: 0
Posts: 233
ArduinoBot builder \^^/
|
 |
« Reply #4 on: January 26, 2011, 12:54:23 pm » |
Ok  En gros cela donne ça :  const int APPUI=0; const int PAS_APPUI=1; const int BP=52; const int LED=13; int ETAT_BP; int ETAT_LED=LOW;
void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, HIGH) ; }
void loop() { ETAT_BP=digitalRead(BP); if (ETAT_BP==APPUI) { ETAT_LED != ETAT_LED } digitalWrite(LED,ETAT_LED); j'ai bon ? 
|
|
|
|
|
Logged
|
Proverbe Tibétain : Un mensonge est un saut du haut du toit
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2894
Yoplait... le pt'it suisse
|
 |
« Reply #5 on: January 26, 2011, 01:11:47 pm » |
Oui c'est ça, mais j'ai peut-être fait une erreur : etat_led = !etat_led
à la place de : etat_led != etat_led
et mets ça : bolean ETAT_LED=LOW; à la place de : int ETAT_LED=LOW;
|
|
|
|
« Last Edit: January 26, 2011, 01:17:18 pm by Jean-François »
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Dans l'Espace
Offline
Full Member
Karma: 0
Posts: 233
ArduinoBot builder \^^/
|
 |
« Reply #6 on: January 26, 2011, 01:39:13 pm » |
@Jean-françois : Merci \^^/ mais  tu as raison en disant : ETAT_LED != ETAT_LED; car Opérateurs logiques de comparaison :
* x == y (x est égal à y) * x != y (x est différent de y) * x < y (x est inférieur à y) * x > y (x est supérieur à y) * x <= y (x est inférieur ou égal à y) * x >= y (x est supérieur ou égal à y) Mais le programme ne marche pas  Au départ j'étais parti sur ce programme : const int APPUI=0; const int PAS_APPUI=1; const int BP=52; const int LED=13; int ETAT_BP;
void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, HIGH) ; }
void loop() { ETAT_BP=digitalRead(BP); if (ETAT_BP==APPUI) { digitalWrite(LED,1); } else { digitalWrite(LED,0); } } y-a-t-il pas moyen de le modifier ? pour qu'il fasse comme je le souhaites ? car moi je sèche complètement  Merci d'avance et désolé pour ces questions. 
|
|
|
|
|
Logged
|
Proverbe Tibétain : Un mensonge est un saut du haut du toit
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2894
Yoplait... le pt'it suisse
|
 |
« Reply #7 on: January 26, 2011, 01:49:36 pm » |
Essaye ça : const int BP=52; const int LED=13; bolean ETAT_LED=LOW;
void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, LOW) ; }
void loop() { if (digitalRead(BP)==1) { ETAT_LED = !ETAT_LED; } digitalWrite(LED,ETAT_LED); }
|
|
|
|
« Last Edit: January 26, 2011, 01:55:41 pm by Jean-François »
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1835
There is an Arduino for that
|
 |
« Reply #8 on: January 26, 2011, 02:15:59 pm » |
En fait ce n'est pas tout à fait aussi simple. Si tu tiens le bouton appuyé la LED va clignoter. A chaque boucle on rentre dans le IF et on complémente l'état.
En fait il faut: - Tester l'appui c'est à dire le changement de l'état repos à l'état actif. - Changer l'état de la LED - Attendre le retour à l'état repos
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 104
|
 |
« Reply #9 on: January 26, 2011, 04:12:43 pm » |
Bonjour, dans les exemples du soft arduino il y a plusieurs exemples, si l'on est pas anglophobe cela peut aider  je crois que c'est le sketch "debounce" qui correspond à ce cas de figure.
|
|
|
|
|
Logged
|
J'apprends tous les jours!
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2894
Yoplait... le pt'it suisse
|
 |
« Reply #10 on: January 27, 2011, 01:26:45 am » |
@fdufnews > c'est juste j'avais pas pensé à ça...  @ MrAlexis > J'ai fais des essais avec Debounce et c'est pas encore ça.  (en fait Debonce est pour l'anti-rebond)
|
|
|
|
« Last Edit: January 27, 2011, 02:28:03 am by Jean-François »
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Ales
Offline
Edison Member
Karma: 8
Posts: 1799
Do or DIY
|
 |
« Reply #11 on: January 27, 2011, 02:32:10 am » |
Pour limiter l'effet de rebond ce qui marche très bien c'est de mettre un condo (moi je mets 1µF) sur l'entrée. Sinon au niveau code, si on veut prendre en compte le mentien, il faut faire ça : const int BP=52; const int LED=13; bolean ETAT_LED=LOW;
void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, LOW) ; }
void loop() { if (digitalRead(BP)==1) { ETAT_LED = !ETAT_LED; delay(1); while (digitalRead(BP)==1) { } } digitalWrite(LED,ETAT_LED); } Valeur du delay() à ajuster.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2894
Yoplait... le pt'it suisse
|
 |
« Reply #12 on: January 27, 2011, 06:22:20 am » |
Là, changement de l'état de la led à chaque appui et l'état de la led est préservé en cas d'appui prolongé : const int BP=52; const int LED=13; boolean ETAT_LED=LOW; boolean ETAT_BP=HIGH;
void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, LOW) ; }
void loop() { if(ETAT_BP==HIGH){ if (digitalRead(BP)==0) { delay(5); ETAT_LED = !ETAT_LED; ETAT_BP = LOW; }} else if(digitalRead(BP)==1){ ETAT_BP=HIGH;} digitalWrite(LED,ETAT_LED);
} + l'anti rebond de B@tto 
|
|
|
|
« Last Edit: January 27, 2011, 06:24:47 am by Jean-François »
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Dans l'Espace
Offline
Full Member
Karma: 0
Posts: 233
ArduinoBot builder \^^/
|
 |
« Reply #13 on: January 27, 2011, 09:09:28 am » |
@Jean-François, @B@tto, @MrAlexis44600 , @fdufnews : Merci pour vos conseils et vos codes, j'essaie cela ce jour et vous retournerai les résultats  MERCI  encore 
|
|
|
|
|
Logged
|
Proverbe Tibétain : Un mensonge est un saut du haut du toit
|
|
|
|
Dans l'Espace
Offline
Full Member
Karma: 0
Posts: 233
ArduinoBot builder \^^/
|
 |
« Reply #14 on: January 27, 2011, 11:28:58 am » |
@Jean-François : Merci pour ton programme ça MARCHE \^^/ const int BP=52; const int LED=13; boolean ETAT_LED=LOW; boolean ETAT_BP=HIGH;
void setup() { pinMode(LED, OUTPUT); pinMode(BP, INPUT); digitalWrite(BP, LOW) ; }
void loop() { if(ETAT_BP==HIGH){ if (digitalRead(BP)==0) { delay(5); ETAT_LED = !ETAT_LED; ETAT_BP = LOW; }} else if(digitalRead(BP)==1){ ETAT_BP=HIGH;} digitalWrite(LED,ETAT_LED);
} J'ai remplacé la ligne : delay(5); par delay(2); ça évite de bugger si j'actionne rapidement le bp MERCI encore @toutes et @tous pour votre précieuse aide 
|
|
|
|
|
Logged
|
Proverbe Tibétain : Un mensonge est un saut du haut du toit
|
|
|
|
|