Problème avec la condition if

Bonjour,
Voici mon programme :

char alphabet[26] = {"abcdefghijklmnopqrstuvwxyz"};
//F=5 ; O=14 ; U=20 ; D=3 ; R=17 ; E=4 ; K=10; T=19 ; Z=25 ; I=8 ; W=22 ; J=9
int pinPR = A0; //pin de connexion pour la photorésistance
int valMin = 0
             ; // on initialise la valeur minimale au plus haut
int valMax = 600; // et la valeur maximale au plus bas
int compteur = 0;
int pourcentageMax = 70; //valeur obtenue suite à plusieurs tests
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int valeur = analogRead(pinPR); // on lit la valeur transmise par la photorésistance
  /*if (valeur>valMax) //on compare avec valMax
    valMax=valeur;  // on modifie valMax
    if (valeur<valMin) // on compare avec valMin
    valMin=valeur;  // on modifie valMin*/
  int pourcentage = map(valeur, valMin, valMax, 0, 100); //pourcentage entre les bornes
  //Séquence d'affichage
  /*Serial.print("Valeur : ");
  Serial.print(valMin);
  Serial.print(" < ");
  Serial.print(valeur);
  Serial.print(" < ");
  Serial.print(valMax);
  Serial.print("  soit : ");
  Serial.print(pourcentage);
  Serial.println(" %");*/
  delay(400);
  if (pourcentage <= pourcentageMax)
  {
    compteur=0;
  }
  else
  {
    compteur++;
  }
  if (compteur==1)
  {
    Serial.print("Valeur : ");
    Serial.print(valMin);
    Serial.print(" < ");
    Serial.print(valeur);
    Serial.print(" < ");
    Serial.print(valMax);
    Serial.print("  soit : ");
    Serial.print(pourcentage);
    Serial.println(" %");
    Serial.println("une courte");
  }
  else if (compteur==3)
  {
    Serial.print("Valeur : ");
    Serial.print(valMin);
    Serial.print(" < ");
    Serial.print(valeur);
    Serial.print(" < ");
    Serial.print(valMax);
    Serial.print("  soit : ");
    Serial.print(pourcentage);
    Serial.println(" %");
    Serial.println("une longue");
  }
}

Ce programme a pour but d’affecter un pourcentage de lumière capter par une photorésistance à des caractères morses. Sachant que cette valeur moyenne est calculée toutes les 400mms. Et qu’une courte dure 400mms et une longue 1200mms. Mon problème est le suivant : j’aimerais que lorsque mon compteur est égale à 3 alors il affiche qu’il y “une longue”, mais qu’il n’affiche pas en même temps qu’il y a “une courte”. Car pour être égale à 3, mon compteur à forcément été égal à 1 auparavant et a donc vérifiée la condition “compteur==1”.
Désolé si je ne suis pas très explicite, merci d’avance pour vos réponses.

Bonjour,

En gros tu veux mesurer la durée de l'illumination. Si c'est 400ms c'est un point, si c'est 1200ms c'est un trait?

Si c'est ça il suffit ce mesurer le temps ou c'est allumé et faire de test après.

Merci, pour vos réponse !
pepe, ta solution fonctionne il a juste fallu que je remette le compteur à 0, à l'intérieur du if(compteur==1) et du else if(compteur==3).

super si ça fonctionne,
Souvent quand on plus états à tester, on utilise les instructions

switch case

ça permet d'optimiser le code sinon la lecture.