int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;

int pins[8] = {2, 3, 4, 5, 6, 7, 8, 9};

int buzzer = 10;
int buttonLower = A1;
bool stateButtonL;
bool previousStateButtonL;
int buttonHigher = A2;
bool stateButtonH;
bool previousStateButtonH;
int previousRandNr;
int randNr;
int score;
String message;
long lastDebounceTime = 0;
long debounceDelay = 50;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(buttonLower, INPUT_PULLUP);
  pinMode(buttonHigher, INPUT_PULLUP);
  previousStateButtonL = digitalRead(buttonLower);
  previousStateButtonH = digitalRead(buttonHigher);
  randomSeed(analogRead(A0));
  Serial.begin(9600);

  previousRandNr = 4;
}

void loop() {
  if (score < 9) {
    makeRandNr(previousRandNr);
    turnon(previousRandNr);
    while(message == ""){
      buttonPressed(previousStateButtonL, previousStateButtonH);
    }
    higherLower(message, previousRandNr, randNr);
    Serial.println("Your score is " + String(score));
    previousRandNr = randNr;
    message = "";
  }
  else {
    Serial.println("You won!");
    turnon(10);
    turnon(0);

    while (1);
  }
}

int makeRandNr(int previousRandNr){
  randNr = random(9);
  while (randNr == previousRandNr){
    randNr = random(9);
  }
  return randNr;
}

void buttonPressed(bool previousStateButtonL, bool previousStateButtonH){
  stateButtonL = digitalRead(buttonLower);
  stateButtonH = digitalRead(buttonHigher); 
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (stateButtonL != previousStateButtonL){
      Serial.println("lower pressed");
      message = "loweron";
    }
    else if(stateButtonH != previousStateButtonH){
      Serial.println("higher pressed");
      message = "higheron";
    }
    delay(150);
    previousStateButtonL = stateButtonL;
    previousStateButtonH = stateButtonH;
    lastDebounceTime = millis();
  }
}

void higherLower(String message, int previousRandNr, int randNr){
  if (randNr < previousRandNr){
    if (message == "loweron"){
      score ++;
    }
    else {
      score --;
    }
  }
  else if (randNr > previousRandNr){
    if (message == "higheron") {
      score ++;
    }
    else {
      score --;
    }
  }

}

void turnon(int number) {
  for (int i = 0; i < 9; i++) {
    if (i < number) {
//      Serial.println("The following led is turned on: " + String(i));
      digitalWrite(pins[i], HIGH);
    }
    else {
      digitalWrite(pins[i], LOW);
    }
  }
}