// 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);
}
ATTINY8520PU