Détecteur inductif

Bonjour,

je travaille sur un programme permettant d'afficher un message d'erreur en cas de non détection d'un objet métallique au bout de 2s.

j'arrive pas à trouver la condition qui me permet d'activer mon message dès que je dépasse les
2s (dans le programme, je ne peux pas afficher le message si le capteur ne change pas d'état)

Merci d'avance

Programme :

void setup() {
Serial.begin(9600);
pinMode (7, INPUT);
pinMode (13, OUTPUT);

}
void loop() {
int start= millis(); //début du comptage de temps en ms

while ( (digitalRead(7) ==HIGH) ); //détecteur NC

int fin = millis(); //fin du comptage de temps en ms
int duree = fin- start; // calcul de temps d'absence d'objet en ms

if( duree > 2000) {

Serial.println (duree);
compteur++;
Serial.println(compteur);
}
if (compteur !=0){

Serial.println("erreur");
// tone(13,10);
//delay(100);
//noTone(13);
compteur=0; // remise du comteur à 0 après dépassement de la condition
}
}

}

:warning: Il semble que vous n'appliquez pas les recommandations du "Règlement et bonnes pratiques du Forum Francophone”.
Votre problème n'aura sans doute pas beaucoup de chances d’être lu en totalité et ainsi d'entrainer des réponses susceptibles de concourir à sa résolution.

Essayez ce code et comparez-le avec le vôtre.

unsigned long start = millis(); //début du comptage de temps en ms
int compteur;

void setup() {
  Serial.begin(9600);
  pinMode (7, INPUT);
  pinMode (13, OUTPUT);
}

void loop() {
  start = millis(); //début du comptage de temps en ms
  while ( (millis() - start) <= 2000 ) {
    if (digitalRead(7) == HIGH) {
      while (digitalRead(7) == HIGH) {}
      compteur++;
    }
  }
    if (compteur = 0) {
      Serial.println("erreur");
      // tone(13,10);
      //delay(100);
      //noTone(13);
    }
      else {
        Serial.println(compteur);
      }
      compteur = 0; // remise du comteur à 0 après dépassement de la condition
}

Les salutations .

Merci pour l'aide.
en cas de changement de passage de l'état HIGH à l'état LOW ( en moins de 2s) le compteur s'incrémente et du coup il affiche le message d'erreur

l'objectif est de ne pas afficher le message d'erreur si le capteur passe de 1 à 0 dans un temps inférieur à 2s

merci d'avance

Bonjour,

Il suffit de mémoriser le temps quand l'entrée est à 0 et d'afficher l'erreur quand il s'est écoulé 2s depuis la dernière mémorisation

const byte pinSensor=7;
const byte pinAlarm=13;

void setup() {
  Serial.begin(9600);
  pinMode (pinSensor, INPUT);
  pinMode (pinAlarm, OUTPUT);
}

void loop() {
  static unsigned long millisLastPulse=0;

  if (digitalRead(pinSensor)==LOW)
    millisLastPulse=millis();

   if (millisLastPulse!=0 && millis()-millisLastPulse>2000)
   {
    Serial.println("erreur");
    // tone(pinAlarm,10);
    //delay(100);
    //noTone(pinAlarm);
    millisLastPulse=0;
   }
}