Simon Says Game With a Joystick!!!!
Me and my friend made a Simon says game with a reed start switch and a joystick
Components and supplies
4
LED (generic)
1
Jumper wires (generic)
1
Analog joystick (Generic)
1
Reed Switch, SPST-NO
5
Resistor 220 ohm
1
Arduino Mega 2560
1
Buzzer, Piezo
1
Push Button
1
Male/Female Jumper Wires
Apps and platforms
1
Arduino Web Editor
1
Arduino IDE
Project description
Code
Arduino Simon Says project
arduino
1/* 2 Arduino Joystick 3 7-segment display 4 4 leds 5 Rotary Encoder 6 Buzzer 7 Touch sensor 8*/ 9 10//ADD FUNCTIONALTIY FOR DELAY 11int pause = 2500; 12int fast = 0; 13 14//For Reed Switch / Find if the player got something wrong 15int buttonpin = 10; //define switch port 16int val; //define digital variable val 17bool ON = false; 18 19bool reedStart = false; 20bool stillPlaying = true; 21 22// For the code 23const int codeLength = 4; 24int sequence[codeLength]; 25int your_sequence[codeLength]; 26 27//For Difficulty Buttons 28int Button3 = 47; 29int Button5 = 45; 30int Button7 = 49; 31 32int prevDirection = 9; 33int currentDirection = 8; 34 35const int UP = 6; 36const int DOWN = 4; 37const int LEFT = 7; 38const int RIGHT = 5; 39 40// Joystick pin numbers 41const int SW_pin = 2; // digital pin connected to switch output 42const int X_pin = 0; // analog pin connected to X output 43const int Y_pin = 1; // analog pin connected to Y output 44 45//LED Pin Numbers 46const int redLED = 4; 47const int greenLED = 5; 48const int blueLED = 6; 49const int yellowLED = 7; 50 51//Buzzer Pins 52const int buzzer = 9; 53 54//set delay 500 55unsigned long int initTime = millis(); 56 57void setup() { 58 pinMode(SW_pin, INPUT); 59 digitalWrite(SW_pin, HIGH); 60 Serial.begin(9600); 61 62 pinMode(redLED, OUTPUT); 63 pinMode(greenLED, OUTPUT); 64 pinMode(blueLED, OUTPUT); 65 pinMode(yellowLED, OUTPUT); 66 67 pinMode(buttonpin, INPUT);//define switch as a output port 68 69 pinMode(Button3, INPUT_PULLUP); 70 pinMode(Button5, INPUT_PULLUP); 71 pinMode(Button7, INPUT_PULLUP); 72 73 ///////////////////////////////// 74 75 while (fast == 0) { 76 if (digitalRead(Button3) == LOW) { 77 fast = 1500; 78 tone(buzzer, 1000); 79 delay(100); 80 noTone(buzzer); 81 } else if (digitalRead(Button5) == LOW) { 82 fast = 1000; 83 tone(buzzer, 1000); 84 delay(100); 85 noTone(buzzer); 86 } else if (digitalRead(Button7) == LOW) { 87 fast = 500; 88 tone(buzzer, 1000); 89 delay(100); 90 noTone(buzzer); 91 } 92 } 93 94 Serial.println(fast); 95} 96 97void loop() { 98 99 100 if (ON == 1 && stillPlaying == true) { 101 102 pause -= 20; 103 104 105 tone(buzzer, 500); 106 delay(500); 107 noTone(buzzer); 108 tone(buzzer, 900); 109 delay(500); 110 noTone(buzzer); 111 112 delay(200); 113 digitalWrite(redLED, HIGH); 114 digitalWrite(blueLED, HIGH); 115 digitalWrite(yellowLED, HIGH); 116 digitalWrite(greenLED, HIGH); 117 delay(300); 118 digitalWrite(redLED, LOW); 119 digitalWrite(blueLED, LOW); 120 digitalWrite(yellowLED, LOW); 121 digitalWrite(greenLED, LOW); 122 delay(200); 123 digitalWrite(redLED, HIGH); 124 digitalWrite(blueLED, HIGH); 125 digitalWrite(yellowLED, HIGH); 126 digitalWrite(greenLED, HIGH); 127 delay(300); 128 digitalWrite(redLED, LOW); 129 digitalWrite(blueLED, LOW); 130 digitalWrite(yellowLED, LOW); 131 digitalWrite(greenLED, LOW); 132 133 134 delay(2000); 135 136 137 generateSequence(); 138 139 Serial.println("Sqeuence Generated"); 140 141 delay(200); 142 tone(buzzer, 3000); 143 digitalWrite(redLED, HIGH); 144 digitalWrite(blueLED, HIGH); 145 digitalWrite(yellowLED, HIGH); 146 digitalWrite(greenLED, HIGH); 147 delay(300); 148 digitalWrite(redLED, LOW); 149 digitalWrite(blueLED, LOW); 150 digitalWrite(yellowLED, LOW); 151 digitalWrite(greenLED, LOW); 152 noTone(buzzer); 153 154 155 getSequence(); 156 157 158 for (int i = 0; i < codeLength; i++) { 159 Serial.println(your_sequence[i]); 160 } 161 162 163 delay(300); 164 165 checkSequence(); 166 Serial.println(stillPlaying); 167 } 168 169 val = digitalRead(buttonpin); //read the value of the digital interface 3 assigned to val 170 //Serial.println(ON); 171 if (val == LOW) { 172 ON = true; 173 } 174 175} 176 177 178void playTone(int led_num) { 179 if (led_num == UP) { 180 tone(buzzer, 3000); 181 delay(100); 182 } else if (led_num == DOWN) { 183 tone(buzzer, 4000); 184 delay(100); 185 } else if (led_num == LEFT) { 186 tone(buzzer, 1000); 187 delay(100); 188 } else if (led_num == RIGHT) { 189 tone(buzzer, 2000); 190 delay(100); 191 } 192 193 noTone(buzzer); 194 195} 196 197void generateSequence() { 198 for (int i = 0; i < codeLength; i++) { 199 randomSeed(analogRead(A13)); 200 int randNumber = random(4, 8); 201 202 sequence[i] = randNumber; 203 204 Serial.println(sequence[i]); 205 } 206 207 tone(buzzer, 1000); 208 209 for (int i = 0; i < codeLength; i++) { 210 //Serial.print("Hello"); 211 digitalWrite(sequence[i], HIGH); 212 playTone(sequence[i]); 213 delay(fast); 214 digitalWrite(sequence[i], LOW); 215 delay(fast); 216 217 } 218 219} 220 221void getSequence() { 222 223 Serial.println("Getting sequence"); 224 225 int i = 0; 226 227 while (i < codeLength) { 228 //Serial.println(i); 229 int xPos = analogRead(X_pin); 230 int yPos = analogRead(Y_pin); 231 int SW_pin = digitalRead(SW_pin); 232 233 if (xPos >= 1020 && yPos >= 480) { 234 Serial.println("Red LED on"); 235 236 your_sequence[i] = DOWN; 237 tone(buzzer, 4000); 238 delay(200); 239 noTone(buzzer); 240 241 digitalWrite(redLED, HIGH); 242 digitalWrite(blueLED, LOW); 243 digitalWrite(yellowLED, LOW); 244 digitalWrite(greenLED, LOW); 245 delay(300); 246 digitalWrite(redLED, LOW); 247 digitalWrite(blueLED, LOW); 248 digitalWrite(yellowLED, LOW); 249 digitalWrite(greenLED, LOW); 250 251 delay(1000); 252 253 i++; 254 255 } else if (xPos <= 10 && yPos >= 480) { 256 Serial.println("Blue LED on"); 257 258 your_sequence[i] = UP; 259 tone(buzzer, 3000); 260 delay(200); 261 noTone(buzzer); 262 263 digitalWrite(redLED, LOW); 264 digitalWrite(blueLED, HIGH); 265 digitalWrite(yellowLED, LOW); 266 digitalWrite(greenLED, LOW); 267 delay(300); 268 digitalWrite(redLED, LOW); 269 digitalWrite(blueLED, LOW); 270 digitalWrite(yellowLED, LOW); 271 digitalWrite(greenLED, LOW); 272 273 delay(1000); 274 275 i++; 276 277 } else if (xPos >= 510 && yPos <= 10) { 278 Serial.println("Green LED on"); 279 280 your_sequence[i] = RIGHT; 281 tone(buzzer, 2000); 282 delay(200); 283 noTone(buzzer); 284 285 digitalWrite(redLED, LOW); 286 digitalWrite(blueLED, LOW); 287 digitalWrite(yellowLED, LOW); 288 digitalWrite(greenLED, HIGH); 289 delay(300); 290 digitalWrite(redLED, LOW); 291 digitalWrite(blueLED, LOW); 292 digitalWrite(yellowLED, LOW); 293 digitalWrite(greenLED, LOW); 294 295 delay(1000); 296 297 i++; 298 299 } else if (xPos >= 510 && yPos >= 1020) { 300 Serial.println("Yellow LED on"); 301 302 your_sequence[i] = LEFT; 303 tone(buzzer, 1000); 304 delay(200); 305 noTone(buzzer); 306 307 digitalWrite(redLED, LOW); 308 digitalWrite(blueLED, LOW); 309 digitalWrite(yellowLED, HIGH); 310 digitalWrite(greenLED, LOW); 311 delay(300); 312 digitalWrite(redLED, LOW); 313 digitalWrite(blueLED, LOW); 314 digitalWrite(yellowLED, LOW); 315 digitalWrite(greenLED, LOW); 316 317 delay(1000); 318 319 i++; 320 321 } 322 323 } 324} 325 326void checkSequence() { 327 for (int i = 0; i < codeLength; i++) { 328 if (your_sequence[i] != sequence[i]) { 329 stillPlaying = false; 330 digitalWrite(redLED, HIGH); 331 digitalWrite(blueLED, HIGH); 332 digitalWrite(yellowLED, HIGH); 333 digitalWrite(greenLED, HIGH); 334 335 tone(buzzer, 2000); 336 delay(700); 337 noTone(buzzer); 338 delay(200); 339 tone(buzzer, 1000); 340 delay(700); 341 noTone(buzzer); 342 343 } 344 } 345}
Downloadable files
Schematic
Schematic

Comments
Only logged in users can leave comments