Bonjour à tous !
Je suis tout nouveau sur ce forum et je suis ultra débutant en programmation / électronique.
Je n'aimais pas ça du tout étant aux études mais maintenant ça m'attire beaucoup ! (ya que les c... qui ne changent pas d'avis)
Alors voilà, j'ai essayé de faire le petit exercice suivant :
un bouton poussoir (NO), une led sur une breadboard (et les quelques composants nécessaires au bon fonctionnement)
But : j'appuie sur le bouton, la led s'allume (si elle est éteinte) et reste allumée quand je relache. A l'inverse, si elle est allumée, elle s'éteint et reste éteinte.
Voici mon code : (qui fonctionne bien !)
const int led = 2;
const int bouton =4;
int etatBouton; //bouton appuyé ou non
int etatLed; //led allumée ou éteinte
void setup()
{
// put your setup code here, to run once:
pinMode (led, OUTPUT);
pinMode (bouton, INPUT);
}
void loop()
{
etatBouton = digitalRead(bouton);
if (etatBouton == LOW) // vérifie si qqun est en train d'appuyer sur le bouton
{
//si qqun appuie sur le bouton, allume si led éteinte, ou éteint si led allumée
if (etatLed == HIGH)
{
digitalWrite (led, LOW);
etatLed = LOW;
delay (200);
}
else
{
digitalWrite (led, HIGH);
etatLed = HIGH;
delay (200);
}
}
}
Ce code fonctionne très bien, mais uniquement après que j'aie mis les "delay". Avant cela, il était très instable. Parfois ça marchait, et parfois non.
Je pense que c'est parce que pendant que j'appuyais, la boucle "void loop()" s'effectuait plusieurs fois et rendait donc l'opération aléatoire. J'ai donc par la suite inséré ces "delay".
Ma question est : y a-t-il un autre moyen de faire fonctionner l'histoire sans les "delay" ? ça ne me paraît pas très catholique comme méthode.
Merci d'avance pour votre aide !
Horia