// define pins
#define OUT1 0
#define OUT2 1
#define IN1 2
int count = 1;
int value = 0;
int laststate = LOW;
int start_time = 0;
int end_time = 0;
int takt = 50;
int first = 1;
void setup() {
pinMode(OUT1, OUTPUT);
pinMode(OUT2, OUTPUT);
pinMode(IN1, INPUT);
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, LOW);
}
void loop() {
value = digitalRead(IN1);
start_time = millis();
if (laststate == LOW && value == HIGH){ //Steigende Flanke feststellen
switch(count){
case 1:
digitalWrite(OUT2, HIGH);
break;
case 2:
digitalWrite(OUT1, HIGH);
break;
case 3:
digitalWrite(OUT1, HIGH);
digitalWrite(OUT2, LOW);
break;
case 4:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, HIGH);
count = 1;
break;
}
count++;
if (first == 1){
end_time = start_time + 800;
first = 0;
}
}
if (laststate == HIGH && value == LOW){ //Fallende Flanke feststellen
first = 1;
}
if (value == HIGH && start_time >= end_time){
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, LOW);
count = 1;
first = 1;
}
laststate = value;
/*
1. digitalread IN1
WENN IN1 das erste Mal HIGH ist (OUT1+2=LOW), dann soll auf die steigende Flanke reagiert werden
SONST auf fallende Flanken
--> bool first = false und OUT1= HIGH
2. Zählen der fallenden Flanken in count
3.a Case select
count = 1 --> OUT2 = HIGH
count = 2 --> OUT1 = LOW
count = 3 --> OUT2 = LOW und OUT1 = HIGH und count = 1
3.b Wenn IN1 länger als 2s HIGH dann
OUT1 und OUT2 --> LOW and bool first = true und count = 0
*/
delay(takt);
}