#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

/*
 * Aufgabe 1 muster-Array
 */
unsigned char musterzaehler=1,musternummer=0;

#define KEYREADER (~PIND)>>4 // Einlesen, invertieren, maskieren zurecht schieben
unsigned char keyOld = 0;         // alter Tasten-Zustand
unsigned char keyEnter, keyExit;  // gedrueckte und losgelassene Tasten

void keyCheck() {                 // Tastaturabfrage mit Flankendedektion
  unsigned char keyTest, tmp;
  keyEnter = 0, keyExit = 0;
  keyTest = KEYREADER;            // Einlesen
  if (keyOld != keyTest) {        // hat sich was getan
    _delay_ms(20);                // Prellen abwarten
    tmp = KEYREADER;              // noch mal Einlesen
    if (tmp == keyTest) {         // ist es stabil?
      keyEnter = (~keyOld) & keyTest; // steigende Flanke !alt und neu
      keyExit = keyOld & (~keyTest);  // fallende Flanke alt und !neu
      keyOld = keyTest;
    }
  }
}

void wechsleMuster(){
  /*
   * Aufgabe 2 
   */
}
 
int main(){         // Hauptprogramm 
  DDRB = 0xFF;      // PORTB als Ausgang
  PORTB = 0xE0;     // Leds L3..L0 aktiv
  PORTD = 0x70;     // PullUps an
  while(1){         // Endlosschleife 
    keyCheck();
    if(keyEnter&1){ // Taste gedrueckt?
      musternummer++;
      if(musternummer>=sizeof(muster)/sizeof(muster[0])) musternummer=0;
    }
    wechsleMuster();
    _delay_ms(400);
  } 
  return 0; 
}