goodmobiley
Published

GM Says

It's just Simon Says.

IntermediateShowcase (no instructions)179
GM Says

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
LED (generic)
LED (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×9
Buzzer
Buzzer
×1
Tactile Switch, Top Actuated
Tactile Switch, Top Actuated
×4
Resistor 221 ohm
Resistor 221 ohm
×4
Resistor 330 ohm
Resistor 330 ohm
×1

Story

Read more

Schematics

file_000_(2)_KYVwCSRMkX.jpeg

Code

Untitled file

Arduino
const int light11 = 2, light12 = 3, light21 = 4, light22 = 5, light31 = 6, light32 = 7, light41 = 8, light42 = 9, lightStart = 10, buzzer = 11;
const int button1 = A0, button2 = A1, button3 = A2, button4 = A3;
const int startTone = 1760, tone1 = 262, tone2 = 330, tone3 = 392, tone4 = 523;
int score = 0;
int sDTime = 100;
int lDTime = 400;
int rando[8];
bool alive = LOW;
void setup() {
  pinMode(light11, OUTPUT);
  pinMode(light12, OUTPUT);
  pinMode(light21, OUTPUT);
  pinMode(light22, OUTPUT);
  pinMode(light31, OUTPUT);
  pinMode(light32, OUTPUT);
  pinMode(light41, OUTPUT);
  pinMode(light42, OUTPUT);
  pinMode(lightStart, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  Serial.begin(9600);
  pinMode(A4, INPUT);
  randomSeed(analogRead(A4));
}

void loop() {
  while (alive == HIGH){
    rando[0] = random(4);
    rando[1] = random(4);
    rando[2] = random(4);
    rando[3] = random(4);
    rando[4] = random(4);
    rando[5] = random(4);
    rando[6] = random(4);
    rando[7] = random(4);
    if (score < 4){
      pattern(2);
      readpattern(2);
    }
    else if (score < 8){
      pattern(4);
      readpattern(4);
    }
    else if (score < 12){
      pattern(8);
      readpattern(8);
    }
  }
  if (alive == LOW){
    digitalWrite(lightStart, HIGH);
    Serial.println("PRESS ANY BUTTON TO START!");
    while(not(digitalRead(button1) == HIGH or digitalRead(button2) == HIGH or digitalRead(button3) == HIGH or digitalRead(button4) == HIGH)){}
    digitalWrite(lightStart, HIGH);
    tone(buzzer, startTone);
    delay(sDTime);
    digitalWrite(lightStart, LOW);
    noTone(buzzer);
    delay(lDTime);
    alive = HIGH;
    score = 0;
  }
}

void pattern(int num){
  for(int ctr = 0; ctr < num; ctr++){
    if(rando[ctr] == 0){
      digitalWrite(light12, HIGH);
      tone(buzzer, tone1);
      delay(sDTime);
      digitalWrite(light12, LOW);
      noTone(buzzer);
      delay(lDTime);
    }
    if(rando[ctr] == 1){
      digitalWrite(light22, HIGH);
      tone(buzzer, tone2);
      delay(sDTime);
      digitalWrite(light22, LOW);
      noTone(buzzer);
      delay(lDTime);
    }
    if(rando[ctr] == 2){
      digitalWrite(light32, HIGH);
      tone(buzzer, tone3);
      delay(sDTime);
      digitalWrite(light32, LOW);
      noTone(buzzer);
      delay(lDTime);
    }
    if(rando[ctr] == 3){
      digitalWrite(light42, HIGH);
      tone(buzzer, tone4);
      delay(sDTime);
      digitalWrite(light42, LOW);
      noTone(buzzer);
      delay(lDTime);
    }
  }
  digitalWrite(lightStart, HIGH);
  tone(buzzer, startTone);
  delay(sDTime);
  digitalWrite(lightStart, LOW);
  noTone(buzzer);
}

void readpattern(int num){
  for(int ctr = 0; ctr < num; ctr++ && alive == HIGH){
    while(not(digitalRead(button1) == HIGH or digitalRead(button2) == HIGH or digitalRead(button3) == HIGH or digitalRead(button4) == HIGH)){}
    if(digitalRead(button1) == HIGH && rando[ctr] == 0){
      digitalWrite(light11, HIGH);
      tone(buzzer, tone1);
      delay(sDTime);
      digitalWrite(light11, LOW);
      noTone(buzzer);
    }
    else if(digitalRead(button2) == HIGH && rando[ctr] == 1){
      digitalWrite(light21, HIGH);
      tone(buzzer, tone2);
      delay(sDTime);
      digitalWrite(light21, LOW);
      noTone(buzzer);
    }
    else if(digitalRead(button3) == HIGH && rando[ctr] == 2){
      digitalWrite(light31, HIGH);
      tone(buzzer, tone3);
      delay(sDTime);
      digitalWrite(light31, LOW);
      noTone(buzzer);
    }
    else if(digitalRead(button4) == HIGH && rando[ctr] == 3){
      digitalWrite(light41, HIGH);
      tone(buzzer, tone4);
      delay(sDTime);
      digitalWrite(light41, LOW);
      noTone(buzzer);
    }
    else{
      alive = LOW;
    }
    while(digitalRead(button1) == HIGH or digitalRead(button2) == HIGH or digitalRead(button3) == HIGH or digitalRead(button4) == HIGH){} 
  }
  score++;
  delay(sDTime);
  digitalWrite(lightStart, HIGH);
  tone(buzzer, startTone);
  delay(sDTime);
  digitalWrite(lightStart, LOW);
  noTone(buzzer);
  delay (lDTime);
  Serial.println(score);
}

Credits

goodmobiley
1 project • 1 follower

Comments