compteur jusqu'a 3

Bonjours a tous, voila j'essaie de concevoir un code pour compter jusqu'à 3, Lorsque que j'appuie sur un bouton je m'explique... lorsque j'appuie sur un bouton je voudrais afficher "1" sur le moniteur série lorsque je ré-appuie sur le même bouton une deuxième fois "2" s'affiche sur le moniteur série, Lorsque que j'appuie une troisième fois sur le même bouton "3" s'affiche sur le moniteur série et lorsque que j'appuie une quatrième fois sur le bouton, "1" s'affiche sur le moniteur série et ainsi de suite

Merci

Il te faut une boucle du genre:

If(bouton == high)
{compteur++
Serial.println(compteur)}

If(compteur == 3)
{compteur = 0}

Chaque appui va incrémenter ta variable compteur de 1 en 1, et l'afficher. Après chaque affichage, un test sur compteur pour voir s'il a atteint 3 et remise à zéro si c'est le cas.

ça marchera bien si ton code: -ne fait que ça (ou presque, d'autre action peuvent masquer une lecture d'appui) -pas de delay() bloquant qui peuvent masquer un appui sur le bouton -Anti rebond sur ton bouton

et il faudrait peut-être aussi attendre le relâché du bouton sinon le compteur va tourner à toute vitesse tant que le bouton est appuyé.

un relâché?? comment j'inclus ca dans le code?

minuit001:
un relâché?? comment j’inclus ca dans le code?

bonjour,
debounce arduino sur le net
au pire tu mets un delay(500); si bouton appuyé

J'ai fait se code

const int bouton = 2;
int var;
boolean boutonstate = 0;

void setup() {
  Serial.begin(9600);
  pinMode(bouton, INPUT);
}

void loop() {
  boutonstate = digitalRead(bouton);
  
if(boutonstate == HIGH) {
  var++;
  Serial.println(var);
 }

if(var == 3) {
  var = 0;
  }
}

le compteur fait 1-2-3 mais ne s'arète que lorsque je relâche le bouton je ne sais pas comment faire pour compter chaque appuie sur le bouton. Merci

Il faut que tu mette en mémoire l'état du bouton. Ton test se transforme en si bouton == HIGH et bouton !=memoire

Sinon tu peut essayer de faire une interruption qui ferais l'action suivante :

Si bouton = appuyé, interrompre le programme, faire +1, si bouton relâché, ne rien faire.

De cette manière, je pense que tu aura +1 uniquement a chaque fois que tu appuie sur le bouton et non une incrémentation énorme si tu reste appuyé alors qu'il n'y a pas de delay dans ton programme.

Sinon l'idée du Delay est pas mauvaise mais je pense qu'une interruption sera plus adapté pour ce que tu veux faire.. voila ^^'

j’ai refait ceci sa fonctionne presque mais c.est pas encore ca

const int bouton = 2;
int var;
boolean boutonstate = 0;

void setup() {
  Serial.begin(9600);
  pinMode(bouton, INPUT);
  attachInterrupt(0, compteur, FALLING);
}

void loop() {
  boutonstate = digitalRead(bouton);
}

void compteur() {
  var++;
  Serial.println(var);

if(var == 3) {
  var = 0;
  }
}

Merci de votre aide a l’avance

Bonjour,

Pour ton application il est inutile d'utiliser les interruptions. De plus en utilisant les interruptions il est plus difficile de filtrer les rebonds. La meilleure méthode est celle que t'a indiquée solfra qui consiste à mémoriser l'état précédent et à voir si le bouton a changé d'état. Ce qui donne:

const int bouton = 2;
int var;
int boutonstate = 0;

void setup() {
 Serial.begin(9600);
 pinMode(bouton, INPUT);
}

void loop() {
 int prevBoutonstate=false;
 boutonstate = digitalRead(bouton);

 if(boutonstate == HIGH  && prevBoutonstate==LOW)
 {
   var++;
   Serial.println(var);
 }
 prevBoutonstate=boutonstate;

 if(var == 3)
 {
   var = 0;
 }

 delay(10);
}

sa fonctionne pas lorsque j'appuie sur le bouton 1-2-3-1-2-3-1... s'affiche jusqu'au moment que je relâche le bouton moi tout se que je voudrais c un compteur qui a chaque fois que j'appuie sur le bouton (var+1) jusqua un maximum de 3 et retombe a 1

Oups! J'ai oublié de mettre prevBoutonstate en static.

const int bouton = 2;
int var;
int boutonstate = 0;

void setup() {
Serial.begin(9600);
pinMode(bouton, INPUT);
}

void loop() {
static int prevBoutonstate=LOW;
boutonstate = digitalRead(bouton);

if(boutonstate == HIGH  && prevBoutonstate==LOW)
{
  var++;
  Serial.println(var);
}
prevBoutonstate=boutonstate;

if(var == 3)
{
  var = 0;
}

delay(10);
}

merci ca m'aide beaucoup