Curriculum
Course: Memory Game With ultrasonic Sensor
Login
Text lesson

Arduino IDE Coding

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 trigPin = 11;
int echoPin = 12;

int sequence[10];

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);

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  randomSeed(analogRead(A0));
}

void loop()
{
  if (startGame())
  {
    playLevel(1, 3, 3);

    playLevel(2, 4, 3);

    playLevel(3, 5, 4);

    playLevel(4, 6, 4);

    victory();
  }
}

boolean startGame()
{
  long distance = getDistance();

  if (distance < 10)
  {
    tone(buzzer, 1000);
    delay(300);
    noTone(buzzer);

    delay(1000);

    return true;
  }

  return false;
}

void playLevel(int level, int length, int maxLed)
{
  generateSequence(length, maxLed);

  showSequence(length);

  for (int i = 0; i < length; i++)
  {
    int buttonPressed = waitForButton();

    if (buttonPressed != sequence[i])
    {
      gameOver();

      while (1);
    }

    tone(buzzer, 1500);
    delay(100);
    noTone(buzzer);
  }

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

  delay(1000);
}

void generateSequence(int length, int maxLed)
{
  for (int i = 0; i < length; i++)
  {
    sequence[i] = random(1, maxLed + 1);
  }
}

void showSequence(int length)
{
  delay(1000);

  for (int i = 0; i < length; i++)
  {
    lightLED(sequence[i]);

    delay(700);

    turnOffLEDs();

    delay(300);
  }
}

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 waitForButton()
{
  while (true)
  {
    if (digitalRead(button1) == LOW)
    {
      delay(200);
      return 1;
    }

    if (digitalRead(button2) == LOW)
    {
      delay(200);
      return 2;
    }

    if (digitalRead(button3) == LOW)
    {
      delay(200);
      return 3;
    }

    if (digitalRead(button4) == LOW)
    {
      delay(200);
      return 4;
    }
  }
}

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

    tone(buzzer, 500);

    delay(300);

    turnOffLEDs();

    noTone(buzzer);

    delay(300);
  }
}

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

    tone(buzzer, 2000);

    delay(200);

    turnOffLEDs();

    noTone(buzzer);

    delay(200);
  }
}

long getDistance()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);

  long distance = duration * 0.034 / 2;

  return distance;
}

×
×

Cart