/* •	Napiši program, ki prebere stanje tipke, ki je priključena na pinu porta D2.
•	Uporabi zunanji pull-up upor tako, da pritisnjena tipka zagotovi logično ničlo.
•	Ob pritisnjeni tipki sveti LED dioda na pinu porta D8, sicer je LED dioda ugasnjena.
•	Pravilna shema z ustrezno definiranimi vrednostmi uporov.
*/

/*int buttPin = 2;
int ledPin = 8;

void setup() {
  pinMode(buttPin, INPUT);
  pinMode(ledPin, OUTPUT);

}

void loop() {
  int but = digitalRead(buttPin);
  if (but == 1) {
    digitalWrite(ledPin, LOW);
  }
  else {
    digitalWrite(ledPin, HIGH);
  }
}*/

/*•	Mikrokontroler generira naključna števila od 4 do 
vključno 9; uporabi tudi funkcijo randomSeed(). 
Naključno število se generira samo enkrat in sicer ob zagonu mikrokrmilnika.
•	Generirana vrednost naj se izpiše na LED prikazovalniku, 
ki je priključen na pine PORTA D (PD0 do PD6). 
•	S pomočjo tipke, ki je priključena na PORT D 
(PD7), generirano vrednost z vsakim pritiskom na tipko 
zmanjšamo za 1. Število lahko zmanjšujemo do vrednosti 0. 
Nova vrednost se izpiše na LED prikazovalniku.
•	Nalogo reši s pomočjo funkcij pinMode(), 
digitalWrite() in digitalRead().
*/


/*int digit[] = {0xFE, 0xB0, 0xED, 0xF9, 0xB3, 0xDB, 0xDF, 0xF0, 0xFF, 0xF3};
int num;
int butPin = 7;

void setup() {
  for (int x = 0; x < 7; x++) {
    pinMode(x, OUTPUT);
  }
  randomSeed(analogRead(A0));
  num = random(4, 9);
  pinMode(butPin, INPUT_PULLUP);
}


void loop() {
  int but = digitalRead(butPin);
  if (but == 0) {
    num--;
    delay(400);
    if (num <= 0) {
      num = 0;
    }
  }
  int k = digit[num];
  for (int x = 0; x < 7; x++) {
    int temp = k & 0x01;
    digitalWrite(x, temp);
    k = k >> 1;
  }

}*/

/*
•	Na PORT D priključi 8 LED diod.
•	Na pin A0 priključi potenciometer. Prebrano vrednost potenciometra mapiraj tako, da bo najmanjša vrednost 0 in največja 8.
•	Vrednost potenciometra določa kateri element seznama se bo izpisal na PORT D. 
•	Seznam določi tako, da bo pri vrednosti potenciometra 1 svetila 1 LED, pri vrednosti 2 bosta svetili 2 LED, pri 3 bodo svetile tri LED … , pri 8 bo svetilo vseh 8 LED diod.
•	Nalogo reši z registri.
*/


int potValue;
int leds[] = {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};

void setup() {
  DDRC = 0x00;
  DDRD = 0xFF;
  ADMUX |= (1 << REFS0); // refs0 = Vcc (Microcontroller voltage), refs1 = AREF (refrence voltage)
  ADCSRA |= (0 << ADPS2) | (0 << ADPS1) | (1 << ADPS0); // independent ADC clock set to 0b111 = 128 and 0b000 and 0b001 = 2. Bigger number in this case means faster and less accurate readings
  ADCSRA |= (1 << ADEN); // enables the adc converter, to disable it, run ADMUX |= ~(1 << ADEN)
}

void loop() {
  ADCSRA |= (1 << ADSC); // Starts the read of the ADSC PIN
  while (ADCSRA & (1 << ADSC));
  potValue = ADC;
  potValue = map(potValue, 1023, 0, 8, 1);    // / 128; /// 2 / 2 / 2 / 2 / 2 / 2 / 2;
  PORTD = leds[potValue];
  delay(100);
}