Curriculum
Course: Whack-A-Mole Game
Login
Text lesson

Arduino IDE

Arduino IDE Coding 

 

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;

int button1 = 6;
int button2 = 7;
int button3 = 8;
int button4 = 9;

int buzzer = 10;

int score = 0;
int lives = 3;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);

  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);
  pinMode(button4, INPUT_PULLUP);

  pinMode(buzzer, OUTPUT);

  Serial.begin(9600);

  randomSeed(analogRead(A0));

  Serial.println("WHACK-A-MOLE GAME");
  Serial.println("Lives = 3");
}

void loop()
{
  if (lives <= 0)
  {
    gameOver();
    return;
  }

  int target = random(1, 5);

  turnOffLEDs();
  lightLED(target);

  unsigned long startTime = millis();

  bool hit = false;

  while (millis() - startTime < 2000)
  {
    int pressed = getButtonPressed();

    if (pressed != 0)
    {
      if (pressed == target)
      {
        score++;

        tone(buzzer, 1500);
        delay(150);
        noTone(buzzer);

        Serial.print("Correct! Score = ");
        Serial.println(score);
      }
      else
      {
        lives--;

        tone(buzzer, 500);
        delay(300);
        noTone(buzzer);

        Serial.print("Wrong! Lives Left = ");
        Serial.println(lives);
      }

      hit = true;
      break;
    }
  }

  if (!hit)
  {
    lives--;

    Serial.print("Too Slow! Lives Left = ");
    Serial.println(lives);

    tone(buzzer, 700);
    delay(300);
    noTone(buzzer);
  }

  turnOffLEDs();

  delay(500);
}

void lightLED(int num)
{
  if (num == 1) digitalWrite(led1, HIGH);
  if (num == 2) digitalWrite(led2, HIGH);
  if (num == 3) digitalWrite(led3, HIGH);
  if (num == 4) digitalWrite(led4, HIGH);
}

void turnOffLEDs()
{
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
}

int getButtonPressed()
{
  if (digitalRead(button1) == LOW) return 1;
  if (digitalRead(button2) == LOW) return 2;
  if (digitalRead(button3) == LOW) return 3;
  if (digitalRead(button4) == LOW) return 4;

  return 0;
}

void gameOver()
{
  Serial.println(" ");
  Serial.println("GAME OVER");
  Serial.print("Final Score = ");
  Serial.println(score);

  for (int i = 0; i < 5; i++)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);

    tone(buzzer, 400);

    delay(300);

    turnOffLEDs();

    noTone(buzzer);

    delay(300);
  }

  delay(3000);

  score = 0;
  lives = 3;

  Serial.println(" ");
  Serial.println("NEW GAME STARTED");
  Serial.println("Lives = 3");
}
×
×

Cart