Bonjour,
Je me présente, je suis Eddy, nouveau sur ce forum, je ne suis pas développeur du tout...

Je vous expose mon problème, j'ai fait ce petit programme pour créer un coupe circuit sur ma voiture.
Le coupe circuit doit s'activer tout seul quand Alim (entrée 10 sur l'Arduino) tombe a 0v pendant plus de 10 secondes, ce qui signifie que la voiture a été arrêtée.
Le coupe circuit doit se désactiver quand une pression sur le poussoir de l'entrée 8 est compris entre 3s et 5secondes. Cette partie la fonctionne dans mon programme.
Quand le coupe circuit se désactive, il fait monter les niveaux des sorties 11, 12 et 13, cette partie la fonctionne bien.

Mon problème est le suivant, comme la valeur de TimeClock est incrémentée toutes les secondes durant le While, des que la valeur de l'entrée 10 tombe, immédiatement après le coupe circuit s'active.
Je vois très bien ou est l'erreur mais je n'arrive pas a trouver comment faire autrement.
Si une personne pouvait m'aider ce serait très sympa.

Le programme ci dessous...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
int BoutonAppuiLong = 8;
unsigned long duration;
int val = 0;
int Alim = 10;
 
void setup(){
  Serial.begin(9600);
  pinMode(BoutonAppuiLong,INPUT);
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(Alim,INPUT);
}
 
void loop(){
  int Temps=0;
 
  bool bTempEcoule=false;
  int TimeClock=0;
 
 
  duration = 0;
  duration = pulseIn(BoutonAppuiLong, HIGH,10000000);
 
  //timeout ==> pas d'appui ou temp dépassé;
  if (duration==0) {
    Serial.println("PAS d'Appui");
    // Pas d'appui ou Appui trop long
    return;
  }
 
  Temps=(duration/1000000);
  Serial.print(duration);
  Serial.print("   :  Temps  = ");
  Serial.println(Temps);
 
  if ((Temps>=3) && (Temps<=5)) {
      Serial.println("Appui long OK");
      // Appui dans la plage
       digitalWrite(13,HIGH);
       delay(1000);
       digitalWrite(12,HIGH);
       delay(1000);
       digitalWrite(11,HIGH);
       delay(1000);
 
while ((digitalRead(Alim)==HIGH) || (!bTempEcoule)){
      // Audi en Run
      Serial.println("Audi en run");
      TimeClock++;
      delay(1000);
      val = digitalRead(Alim);
      if ((val==LOW) && (TimeClock>10)){
        bTempEcoule=true;
        Serial.println("activation coupe circuit");
        digitalWrite(13,LOW);
        delay(1000);
        digitalWrite(12,LOW);
        delay(1000);
        digitalWrite(11,LOW);
        delay(1000);
      }
      //
    }
 
 
  }
 
}