Simuler un telerupteur

int ledPin = 13; 
int inPin = 6;   
int val = 0;     
int nombre = 1;


void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);  
  pinMode(inPin, INPUT);  
}

void loop(){
  val = digitalRead(inPin);  
  if (val==HIGH) {         
    nombre = nombre + 1;  
  } 
  if (nombre%2 == 0) {         
    digitalWrite(ledPin, HIGH); 
  } 
  
  else {
    digitalWrite(ledPin, LOW);  
  }
  Serial.println(nombre);
  delay(200);
}

Bonjour. Je débute tout juste . Je voulais me faire la main en créant un télérupteur. Celui que j'ai crée fonctionne mais si on laisse le bouton enfoncé cela clignote. J'ai mis un delay mais si celui ci est trop petit le compteur s'incrémente a la vitesse de l'éclair et trop grand il est difficile d'incrémenter le compteur. J'aurais aimé mettre en pause tant que le bouton est enfoncé... Est ce possible. Merci

Bonjour,

Il faut que tu testes si le bouton vient d'être enfoncé. Pour ça il faut que tu regardes s'il a changé d'état en comparant à l'état précédent que tu auras mémorisé à l'appel précédent de loop()

Merci pour ta reponse Kamill. Mon bouton change bien d'etat car mon compteur s'increment bien. Mais je laisse appuyé sur le bouton dans ce cas mon compteur s'incremente a chaque tour de loop et ma led clignote du coup . J'aurais aime evite cela. Je sais pas si je m'explique bien. J'ai pas les bons termes....

Tu peux faire comme ça:

void loop() {
  static int precVal = LOW; // valeur précédente du bouton
  val = digitalRead(inPin);

  if (val != precVal)
  {
    if (val == HIGH) {
      nombre = nombre + 1;
      if (nombre % 2 == 0) {
        digitalWrite(ledPin, HIGH);
      }
      else {
        digitalWrite(ledPin, LOW);
      }
      Serial.println(nombre);
    }
    precVal=val;          // mémorise l'état pour le prochain appel de loop()
    delay(20);            // anti rebond
  }
}

Putain t'es un chef. Ca marche du feu de dieu !! Merci bien !Maintenant je vais essayer de bien comprendre ce que tu as ecris. Mais merci mille fois.
PS. Je souhaite faire un petit projet. Ca te dirais de m'aider le jour ou je me lance ? Je pourrais t'expliquer en Mp si ca te dis. Je pense que tu en aurais pour 35 secondes a le programmer
:slight_smile:

Content de t'avoir aidé.
Tu aurais pu simplifier ton programme en inversant simplement la sortie.

void loop() {
  static int precVal = LOW; // valeur précédente du bouton
  val = digitalRead(inPin);

  if (val != precVal)
  {
    if (val == HIGH) {
      digitalWrite(ledPin, !digitalRead(ledPin));
    }
    precVal=val;          // mémorise l'état pour le prochain appel de loop()
    delay(20);            // anti rebond
  }
}

J'aurais pu :slight_smile: . Mais je commence juste . Je m'y suis penché depuis quelques heures en tout et pour tout. Mais c'est super intéressant. "Static int" je ne connaissais pas. Merci beaucoup . Ca fait progresser.