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

volatile unsigned char vram[] = {0,0,0,0}; // LED 4er Gruppen
volatile unsigned int ticks = 0; // Zaehler für 2ms Ticks

int main() {
  DDRB = 0xFF;          // PORTB als Ausgang
  PORTD = 0x70;         // PullUps an
  /*
   * Aufgabe 1 Timer initalisieren Systemtakt 4MHz Aufruf mit 500Hz
   */
  sei();
  while (1) {
    if ((PIND&(1<<PD4))==0){
      blinken();
    }
  }
  return 0;
}
void incLeds(){ // eine weitere Led links einschalten
  unsigned char i;
  for (i=0;i<4;i++){
    if(vram[i]>=15){
      continue; // zur Bedingung in der For-Schleife springen
    }
    else{
      vram[i]=vram[i]*2+1;
      break; // die For-Schleife verlassen
    }
  }
}
void my_delay_ms(unsigned int n){ // delay ms mit Ticks
  /*
   * Aufgabe 2 delay mit ticks 
   */
}
void clearLeds(){ // alle Led aus
  /*
   * Aufgabe 3 vram loeschen
   */
}
void blinken(){ // ein Blinkzyklus
 /*
  * Aufgabe 4 blinken lassen
  */
}
ISR(TIMER0_COMPA_vect) { // jede 2ms
  static unsigned char i = 0;
  static const unsigned char vramEin[] = {0b11100000, 0b11010000, 0b10110000, 0b01110000};
  ticks++; // ein Tick weiter
  PORTB = vramEin[i] | vram[i];
  if (i < 3) i++; // vram durchgehen
  else i = 0;
}
