koushik_jandhyala
Published © GPL3+

Simon Says Game With a Joystick!!!!

Me and my friend made a Simon says game with a reed start switch and a joystick

IntermediateFull instructions provided200
Simon Says Game With a Joystick!!!!

Things used in this project

Hardware components

Analog joystick (Generic)
×1
Reed Switch, SPST-NO
Reed Switch, SPST-NO
×1
Buzzer, Piezo
Buzzer, Piezo
choose 4 random colors of your choice
×1
LED (generic)
LED (generic)
×4
Resistor 220 ohm
Resistor 220 ohm
×5
Push Button
×1
Arduino Mega 2560
Arduino Mega 2560
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
alot are going to be required
×1
Jumper wires (generic)
Jumper wires (generic)
alot are going to be required
×1

Software apps and online services

Arduino IDE
Arduino IDE
Arduino Web Editor
Arduino Web Editor

Story

Read more

Schematics

Schematic

Code

Arduino Simon Says project

Arduino
/*
   Arduino Joystick
   7-segment display
   4 leds
   Rotary Encoder
   Buzzer
   Touch sensor
*/

//ADD FUNCTIONALTIY FOR DELAY
int pause = 2500;
int fast = 0;

//For Reed Switch / Find if the player got something wrong
int buttonpin = 10; //define switch port
int val; //define digital variable val
bool ON = false;

bool reedStart = false;
bool stillPlaying = true;

// For the code
const int codeLength = 4;
int sequence[codeLength];
int your_sequence[codeLength];

//For Difficulty Buttons
int Button3 = 47;
int Button5 = 45;
int Button7 = 49;

int prevDirection = 9;
int currentDirection = 8;

const int UP = 6;
const int DOWN = 4;
const int LEFT = 7;
const int RIGHT = 5;

// Joystick pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

//LED Pin Numbers
const int redLED = 4;
const int greenLED = 5;
const int blueLED = 6;
const int yellowLED = 7;

//Buzzer Pins
const int buzzer = 9;

//set delay 500
unsigned long int initTime = millis();

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(9600);

  pinMode(redLED, OUTPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(blueLED, OUTPUT);
  pinMode(yellowLED, OUTPUT);

  pinMode(buttonpin, INPUT);//define switch as a output port

  pinMode(Button3, INPUT_PULLUP);
  pinMode(Button5, INPUT_PULLUP);
  pinMode(Button7, INPUT_PULLUP);

  /////////////////////////////////

  while (fast == 0) {
    if (digitalRead(Button3) == LOW) {
      fast = 1500;
      tone(buzzer, 1000);
      delay(100);
      noTone(buzzer);
    } else if (digitalRead(Button5) == LOW) {
      fast = 1000;
      tone(buzzer, 1000);
      delay(100);
      noTone(buzzer);
    } else if (digitalRead(Button7) == LOW) {
      fast = 500;
      tone(buzzer, 1000);
      delay(100);
      noTone(buzzer);
    }
  }

  Serial.println(fast);
}

void loop() {


  if (ON == 1 && stillPlaying == true) {

    pause -= 20;


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

    delay(200);
    digitalWrite(redLED, HIGH);
    digitalWrite(blueLED, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(greenLED, HIGH);
    delay(300);
    digitalWrite(redLED, LOW);
    digitalWrite(blueLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);
    delay(200);
    digitalWrite(redLED, HIGH);
    digitalWrite(blueLED, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(greenLED, HIGH);
    delay(300);
    digitalWrite(redLED, LOW);
    digitalWrite(blueLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);


    delay(2000);


    generateSequence();

    Serial.println("Sqeuence Generated");

    delay(200);
    tone(buzzer, 3000);
    digitalWrite(redLED, HIGH);
    digitalWrite(blueLED, HIGH);
    digitalWrite(yellowLED, HIGH);
    digitalWrite(greenLED, HIGH);
    delay(300);
    digitalWrite(redLED, LOW);
    digitalWrite(blueLED, LOW);
    digitalWrite(yellowLED, LOW);
    digitalWrite(greenLED, LOW);
    noTone(buzzer);


    getSequence();


    for (int i = 0; i < codeLength; i++) {
      Serial.println(your_sequence[i]);
    }


    delay(300);

    checkSequence();
    Serial.println(stillPlaying);
  }

  val = digitalRead(buttonpin); //read the value of the digital interface 3 assigned to val
  //Serial.println(ON);
  if (val == LOW) {
    ON = true;
  }

}


void playTone(int led_num) {
  if (led_num == UP) {
    tone(buzzer, 3000);
    delay(100);
  } else if (led_num == DOWN) {
    tone(buzzer, 4000);
    delay(100);
  } else if (led_num == LEFT) {
    tone(buzzer, 1000);
    delay(100);
  } else if (led_num == RIGHT) {
    tone(buzzer, 2000);
    delay(100);
  }

  noTone(buzzer);

}

void generateSequence() {
  for (int i = 0; i < codeLength; i++) {
    randomSeed(analogRead(A13));
    int randNumber = random(4, 8);

    sequence[i] = randNumber;

    Serial.println(sequence[i]);
  }

  tone(buzzer, 1000);

  for (int i = 0; i < codeLength; i++) {
    //Serial.print("Hello");
    digitalWrite(sequence[i], HIGH);
    playTone(sequence[i]);
    delay(fast);
    digitalWrite(sequence[i], LOW);
    delay(fast);

  }

}

void getSequence() {

  Serial.println("Getting sequence");

  int i = 0;

  while (i < codeLength) {
    //Serial.println(i);
    int xPos = analogRead(X_pin);
    int yPos = analogRead(Y_pin);
    int SW_pin = digitalRead(SW_pin);

    if (xPos >= 1020 && yPos >= 480) {
      Serial.println("Red LED on");

      your_sequence[i] = DOWN;
      tone(buzzer, 4000);
      delay(200);
      noTone(buzzer);

      digitalWrite(redLED, HIGH);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, LOW);
      delay(300);
      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, LOW);

      delay(1000);

      i++;

    } else if (xPos <= 10 && yPos >= 480) {
      Serial.println("Blue LED on");

      your_sequence[i] = UP;
      tone(buzzer, 3000);
      delay(200);
      noTone(buzzer);

      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, HIGH);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, LOW);
      delay(300);
      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, LOW);

      delay(1000);

      i++;

    } else if (xPos >= 510 && yPos <= 10) {
      Serial.println("Green LED on");

      your_sequence[i] = RIGHT;
      tone(buzzer, 2000);
      delay(200);
      noTone(buzzer);

      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, HIGH);
      delay(300);
      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, LOW);

      delay(1000);

      i++;

    } else if (xPos >= 510 && yPos >= 1020) {
      Serial.println("Yellow LED on");

      your_sequence[i] = LEFT;
      tone(buzzer, 1000);
      delay(200);
      noTone(buzzer);

      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, HIGH);
      digitalWrite(greenLED, LOW);
      delay(300);
      digitalWrite(redLED, LOW);
      digitalWrite(blueLED, LOW);
      digitalWrite(yellowLED, LOW);
      digitalWrite(greenLED, LOW);

      delay(1000);

      i++;

    }

  }
}

void checkSequence() {
  for (int i = 0; i < codeLength; i++) {
    if (your_sequence[i] != sequence[i]) {
      stillPlaying = false;
      digitalWrite(redLED, HIGH);
      digitalWrite(blueLED, HIGH);
      digitalWrite(yellowLED, HIGH);
      digitalWrite(greenLED, HIGH);

      tone(buzzer, 2000);
      delay(700);
      noTone(buzzer);
      delay(200);
      tone(buzzer, 1000);
      delay(700);
      noTone(buzzer);

    }
  }
}

Credits

koushik_jandhyala
0 projects • 1 follower
Contact

Comments

Please log in or sign up to comment.