#include <avr/io.h>     // Definitionen laden 
#include <util/delay.h> // CPU Frequenz einstellen! 

#define KEYREADER ~PIND & 0b11 // Einlesen, invertieren, maskieren zurecht schieben 
#include "keycheck.inc"        // http://mezdata.de/avr/083_c-entprellen/keycheck.inc

unsigned char muster[2][6]={{4,0b1000,0b0100,0b0010,0b0001},{5,0b0001,0b0011,0b0111,0b1111,0b0000}};
unsigned int  musterWartenZeiten[]={400,200,100,50}; // Zeiten des Wartens bis naechstes Muster
unsigned char musterWarten = 0;
unsigned char musterzaehler=1,musternummer=0;

void wechsleMuster(){
  PORTB=(PORTB|0b1111) & ~muster[musternummer][musterzaehler]; // Muster aus Array
  musterzaehler++;
  if(musterzaehler>muster[musternummer][0]){ // 
    musterzaehler=1;
  }
}

void my_delay_ms(unsigned int n){
  for(unsigned int i=0;i<n;i++){
    _delay_ms(1);
  }
}

int main(){         // Hauptprogramm 
  PORTB=0xff;       // alle LED aus 
  DDRB=0xff;        // PB als Ausgang
  PORTD=0xff;       // PullUps an
  while(1){         // Endlosschleife 
    keyCheck();
    if(keyEnter&1){ // Taste0 gedrueckt?
      musterzaehler=1;
      musternummer++;
      if(musternummer>=sizeof(muster)/sizeof(muster[0])) musternummer=0;
    }
    if(keyEnter&2){ // Taste1 gedrueckt?
      musterWarten++;
      if(musterWarten>=sizeof(musterWartenZeiten)/2) musterWarten=0; 
    }
    wechsleMuster();
    my_delay_ms(musterWartenZeiten[musterWarten]);
  } 
  return 0; 
}
