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
| const byte pin2 = 2;
const byte pin3 = 3;
enum : byte {waitingp2Low, p2LOW, p3Pulse1, p3Pulse2, p3Pulse3} etat = waitingp2Low;
unsigned long chrono;
void gestionEtat() {
switch (etat) {
case waitingp2Low: // attente repos
if (digitalRead(pin2) == LOW) etat = p2LOW; break;
case p2LOW: // attente du front montant
if (digitalRead(pin2) == HIGH) {
digitalWrite(pin3, LOW); // lancement du front
chrono = millis();
etat = p3Pulse1;
}
break;
case p3Pulse1: // si pin2 tombe on arrête, sinon on attend 15s
if (digitalRead(pin2) == LOW) {
digitalWrite(pin3, HIGH);
etat = p2LOW;
} else if (millis() - chrono >= 15000) { // on a atteint 15s
digitalWrite(pin3, HIGH);
chrono = millis();
etat = p3Pulse2;
}
break;
case p3Pulse2: // si pin2 tombe on arrête, sinon on attend 15s
if (digitalRead(pin2) == LOW) {
digitalWrite(pin3, HIGH);
etat = p2LOW;
} else if (millis() - chrono >= 15000) {
digitalWrite(pin3, LOW);
chrono = millis();
etat = p3Pulse3;
}
break;
case p3Pulse3: // si pin2 tombe on arrête, sinon on attend 15s
if (digitalRead(pin2) == LOW) {
digitalWrite(pin3, HIGH);
etat = p2LOW;
} else if (millis() - chrono >= 15000) {
digitalWrite(pin3, HIGH);
etat = waitingp2Low;
}
break;
}
}
void setup() {
pinMode(pin2, INPUT);
pinMode(pin3, OUTPUT);
digitalWrite(pin3, HIGH);
}
void loop() {
gestionEtat();
} |
Partager