Comment allié le compteur et le capteur infrarouge ?

J'essaie de faire en sorte qu'à trois passage devant mon capteur infrarouge la led s'allume mais j'ai des problème quand j'essaie une boucle en if cela ne reste pas et donc à chaque passage il retombe à 0 et quand je fais avec while il compte jusqu'à 3 mais ne prend pas en compte le capteur. Merci de votre aide et d'avoir lue

const int buttonPin = 2;
const int ledPin = 3;
//int buttonState = 0;
int buttonState;
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  buttonState = 0;
  Serial.begin(9600);
}
void loop()
{
  buttonState = digitalRead(buttonPin);
  (buttonState == HIGH);
  while (buttonState <= 3)
  {
    Serial.print(buttonState);
    digitalWrite(ledPin, LOW);
    buttonState = buttonState + 1;
    delay(1000);
  }
  {
    digitalWrite(ledPin, HIGH);
  }
}

Poste ton code ça nous aidera à t'aider.
Pour cela, débarrasse le des lignes vides inutiles, fais CTRL T dans l'IDE pour bien l'indenter et poste le entre balises CODE (c'est la touche </> du forum).
A+

normal, le if n'est pas une boucle, mais une condition...

Il te faut un if et une boucle for

for(i=0;i<=3;i++)
{

}

comme sa ? @hazerty565

const int buttonPin = 2;
const int ledPin = 3;
//int buttonState = 0;
int buttonState;

void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  buttonState = 0;
  Serial.begin(9600);
  
}

void loop() 
{
  buttonState = digitalRead(buttonPin);
  //(buttonState== HIGH);
        if (buttonState <= 1 )
        for (int compteur = 0; compteur = 3; compteur ++)
         {
          Serial.print(buttonState);
          digitalWrite(ledPin,LOW);
           
           delay(1000);
         }
       
       {
        digitalWrite(ledPin,HIGH);
       }
  
}

il manque une accolade apres le if
if (buttonState == HIGH)
{
for(...)
{

}
}
et supprimer l'accolade avant digitalWrite(ledPin,HIGH);

@ hazerty565 cela ne fonctionne pas mon capteur ne compte pas il reste à 0

Je verrais bien un truc comme ceci :

const int IRPin = 2;
const int ledPin = 3;
int IRState =0;
byte compteur = 0;

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

void loop() 
{
  while (compteur < 3) {
    IRState = digitalRead(IRPin);
        if (IRState = 1 )
         {
          compteur += 1;
          Serial.print(compteur);
          digitalWrite(ledPin,LOW);
          delay(1000);
         }
       else
       {
        digitalWrite(ledPin,HIGH);
       }
  }
}

@lepsept le compteur fonctionne mais il est pas avec le capteur donc mon problème n'est pas résolu

Au temps pour moi, il faut écrire         if (IRState == 1 )

@lesept Cela fonctionne mais il le fait qu'une seul pourtant on a une boucle while

C'est normal, tu nous as dit :

J'essaie de faire en sorte qu'à trois passage devant mon capteur infrarouge la led s'allume

sans dire ce qui se passe une fois les 3 passages faits. On ne peut pas deviner...

Après les trois passages je veux qu'il puisse recommencer la même manip indéfiniment

Alors tu ajoutes
compteur = 0;dans le bloc du else.

Je ne comprends pas ce que tu fais avec la LED : elle s'allume au bout de 3 passages. Si tu ajoutes cette ligne, elle va s'allumer très furtivement, et on risque même de ne pas la voir. Si tu veux la voir s'allumer, il faut ajouter un delay après digitalWrite(ledPin,HIGH);

après le trois coup la LED est allumé puis elle s’éteint et sa recommence il faut refaire passer 3 passage devant le capteur pour qu'elle se rallume et ceci infiniment

Alors le delay fera l'affaire. Tu choisis la durée comme tu veux.