je vient juste de me mettre à la programmation de l'arduino (je commence donc par des choses simple), le matérielle: un bp en DG8 monté de la maniére suivante:
+5V
I
I
I_ _ _ _ _ PIN 8
I
[ ]
I I
I I R= 10 Kohms
[ ]
I
I
MASSE
Jusqu'ici pas de probléme >> si appui sur BP, led = 1 (avec etat stable aprés relachement du BP.
la ou cela se complique c'est pour faire retomber la sortie 13 à 0.
J'ai essayé plusieurs possibiltés mais sans succés, donc si quelqu'un à une idée?
le fonctionnement vulu est celui du bistable.
Bonsoir,
Si je comprends bien, tu veux faire un bistable : T'appuis 1 coup, ça s'allume, tu rappuis un coup et ça s'éteint.
Si c'est cela :
Tu rajoutes une variable "bascule" que tu mets à O
après appuis sur le bouton, tu mets un if pour tester "bascule"
if (bascule = O)
bascule = 1
tu allumes la led
else
bascule = 0
tu éteins la led
Y a peut être moyen de supprimer la variable "bascule" et de simplement lire l'etat de la sortie qui commande la led mais n'étant pas ( encore ;)) un pro de l'arduino, ça ne reste qu'une supposition ( qu'il faudra que je teste )
j'avais répondu sur l'autre post avant de voir que bidouille avait répondu ici. FD, vois si tu peux supprimer le doublon.
C'est le principe du telerupteur.
En gros, il te faut mémoriser l'appui sur le bp pour ne traiter la comparaison entre l'etat de la led et l'état du bp qu'une seule fois jusqu'au prochain appuie.
Ci-dessous un code à optimiser.
Gromain
int led=13;
int bp=8;
int etat=0;
boolean mem_etat_led=false;
boolean mem_front_bp=false;
void setup ()
{
pinMode (bp,INPUT);
pinMode (led,OUTPUT);
// digitalWrite (bp,HIGH); // permet d'activer la résistance de pull-up interne à l'atmega si besoin
Serial.begin(9600);
}
void loop()
{
etat=digitalRead(bp);
if (etat && !mem_etat_led && !mem_front_bp) {
digitalWrite (led,HIGH);
mem_etat_led=true;
mem_front_bp=true; //memorisation appuie sur bp
Serial.println("on");
}
else if(etat && mem_etat_led && !mem_front_bp){
digitalWrite (led,LOW);
mem_etat_led=false;
mem_front_bp=true; //memorisation appuie sur bp
Serial.println("off");
}
if (!etat) {
mem_front_bp=false; //raz memoire sur relachement du bp
}
delay(10); // pour filtrer les rebonds du contact si besoin
}
j'ai testé vos codes et je vous confirme que les 2 fonctionnent !
Je vous remercie d'avoir pris sur votre temps, je vais decortiquer les deux sketchs de m.Zener57 et Gromain59 afin de comprendre comment cela fonctionne. Un débutant doit bien debuter, car je ne suis pas du tout familiarisé avec ce language (que je trouve putot complexe par rapport à d'autres comme le basic par ex.)
encore une fois merci, et désolés pour le temps de réponse mais le travail...