//•	Ob vklopu mikrokrmilnika se generira naključna številka med 1 in 9. Naključno število
//  se generira samo enkrat.
//•	Na mikrokrmilnik priključi dve tipki. Z eno tipko povečujemo vrednost za 1, z drugo tipko 
//  pa jo zmanjšujemo za 1. Najmanjša vrednost je nič in največja 9.
//•	Če je vrednost enaka generirani naključni številki, se na led prikazovalniku izpiše črka a.
//•	Vrednost naj se izpiše na LED prikazovalniku, ki je priključen na pine PORTA D (PD0 do PD6). 
//•	Nalogo reši s pomočjo funkcij pinMode(), digitalWrite() in digitalRead().

int RandomNumber;
int number;

const int MaxNum = 9;
const int MinNum = 1;

const int BtnPin1 = 2;
const int BtnPin2 = 3;

bool BtnState1;
bool BtnState2;

const int segA = 4;
const int segB = 5;
const int segC = 6;
const int segD = 7;
const int segE = 8;
const int segF = 9;
const int segG = 10;


// Definicija prikaza številk od 0 do 9
int numbers[10][7] = {
  {1, 1, 1, 1, 1, 1, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0}, // 1
  {1, 1, 0, 1, 1, 0, 1}, // 2
  {1, 1, 1, 1, 0, 0, 1}, // 3
  {0, 1, 1, 0, 0, 1, 1}, // 4
  {1, 0, 1, 1, 0, 1, 1}, // 5
  {1, 0, 1, 1, 1, 1, 1}, // 6
  {1, 1, 1, 0, 0, 0, 0}, // 7
  {1, 1, 1, 1, 1, 1, 1}, // 8
  {1, 1, 1, 1, 0, 1, 1}  // 9
};

void setup() {
  pinMode(BtnPin1, INPUT_PULLUP);
  pinMode(BtnPin2, INPUT_PULLUP);

  randomSeed(analogRead(0));
  RandomNumber = random(MinNum, MaxNum+1); 

  Serial.begin(115200);
}

void loop() {
  BtnState1 = digitalRead(BtnPin1);
  BtnState2 = digitalRead(BtnPin2);

  if(BtnState1 == LOW){
    if(number > MinNum){
      number--;
    }
    delay(200);
  } else if(BtnState2 == LOW){
    if(number < MaxNum){
      number++;
    }
    delay(200);
  }
  
  if(RandomNumber == number){
    displayNumber(RandomNumber);
  } else {
    shutDown();
  }
  
}

void displayNumber(int number) {
  // Prižgemo ustrezne segmente za prikaz številke
  digitalWrite(segA, numbers[number][0]);
  digitalWrite(segB, numbers[number][1]);
  digitalWrite(segC, numbers[number][2]);
  digitalWrite(segD, numbers[number][3]);
  digitalWrite(segE, numbers[number][4]);
  digitalWrite(segF, numbers[number][5]);
  digitalWrite(segG, numbers[number][6]);
}

void shutDown() {
  // Prižgemo ustrezne segmente za prikaz številke
  digitalWrite(segA, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}