Arduino codes for the Memory Game coded for NUCLEO-L053R8 board use

Dependencies:   arduino mbed

Committer:
kkc
Date:
Sun Mar 19 06:08:55 2017 +0000
Revision:
0:c7dba72a5541
Memory Game coded for NUCLEO-L053R8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kkc 0:c7dba72a5541 1 #include "mbed.h"
kkc 0:c7dba72a5541 2 #include "arduino.h"
kkc 0:c7dba72a5541 3
kkc 0:c7dba72a5541 4 AnalogIn ran(A0);
kkc 0:c7dba72a5541 5
kkc 0:c7dba72a5541 6 DigitalIn button1(D2);
kkc 0:c7dba72a5541 7 DigitalIn button2(D3);
kkc 0:c7dba72a5541 8 DigitalIn button3(D4);
kkc 0:c7dba72a5541 9 DigitalIn button4(D5);
kkc 0:c7dba72a5541 10
kkc 0:c7dba72a5541 11 DigitalOut led1(D7);
kkc 0:c7dba72a5541 12 DigitalOut led2(D8);
kkc 0:c7dba72a5541 13 DigitalOut led3(D9);
kkc 0:c7dba72a5541 14 DigitalOut led4(D10);
kkc 0:c7dba72a5541 15
kkc 0:c7dba72a5541 16 DigitalOut buzzer(D12);
kkc 0:c7dba72a5541 17
kkc 0:c7dba72a5541 18 const int tones[] = {1915, 1700, 1519, 1432, 2700}; // tones when you press the LED's - the last one is when you fail.
kkc 0:c7dba72a5541 19
kkc 0:c7dba72a5541 20 // Variables
kkc 0:c7dba72a5541 21 int buttonState[] = {0,0,0,0}; // current state of the button
kkc 0:c7dba72a5541 22 int lastButtonState[] = {0,0,0,0}; // previous state of the button
kkc 0:c7dba72a5541 23 int buttonPushCounter[] = {0,0,0,0};
kkc 0:c7dba72a5541 24
kkc 0:c7dba72a5541 25
kkc 0:c7dba72a5541 26 void playTone(int tone, int duration) {
kkc 0:c7dba72a5541 27 for (long i = 0; i < duration * 1000L; i += tone * 2) {
kkc 0:c7dba72a5541 28 buzzer = 1;
kkc 0:c7dba72a5541 29 delayMicroseconds(tone);
kkc 0:c7dba72a5541 30 buzzer = 0;
kkc 0:c7dba72a5541 31 delayMicroseconds(tone);
kkc 0:c7dba72a5541 32 }
kkc 0:c7dba72a5541 33 }
kkc 0:c7dba72a5541 34
kkc 0:c7dba72a5541 35 int game_on = 0;
kkc 0:c7dba72a5541 36 int pause = 0;
kkc 0:c7dba72a5541 37 int currentlevel = 1; // This is the level (also the number of button presses to pass to next level)
kkc 0:c7dba72a5541 38 long rand_num = 0; //initialize long variable for random number from 0-100.
kkc 0:c7dba72a5541 39 int rando = 0; //initialize random integer for loopgame_on. Will be from 1-4 later.
kkc 0:c7dba72a5541 40 int butpause = 500; //amount of time to pause for next button input (ghetto de-bounce)
kkc 0:c7dba72a5541 41 int ledtime = 500; //amount of time each LED flashes for when button is pressed
kkc 0:c7dba72a5541 42 int n_levels = 10; //number of levels until the game is won
kkc 0:c7dba72a5541 43 int pinandtone = 0; //This integer is used when the sequence is displayed
kkc 0:c7dba72a5541 44 int right = 0; //This variable must be 1 in order to go to the next level
kkc 0:c7dba72a5541 45 int speedfactor = 5; //This is the final speed of the lights and sounds for the last level. This increases as more games are won
kkc 0:c7dba72a5541 46 int leddelay = 200; //Initializing time for LED. This will decrease as the level increases
kkc 0:c7dba72a5541 47
kkc 0:c7dba72a5541 48
kkc 0:c7dba72a5541 49 int main() {
kkc 0:c7dba72a5541 50 randomSeed(ran);
kkc 0:c7dba72a5541 51
kkc 0:c7dba72a5541 52
kkc 0:c7dba72a5541 53 while(1) {
kkc 0:c7dba72a5541 54 int n_array[n_levels];
kkc 0:c7dba72a5541 55 int u_array[n_levels];
kkc 0:c7dba72a5541 56
kkc 0:c7dba72a5541 57 int i;
kkc 0:c7dba72a5541 58 //clears arrays both "n_array" and "u_array" and starts a new game
kkc 0:c7dba72a5541 59 if (game_on == 0){
kkc 0:c7dba72a5541 60 for(i=0; i<n_levels; i=i+1){
kkc 0:c7dba72a5541 61 n_array[i]=0;
kkc 0:c7dba72a5541 62 u_array[i]=0;
kkc 0:c7dba72a5541 63 rand_num = random(1,200);
kkc 0:c7dba72a5541 64 if (rand_num <= 50){
kkc 0:c7dba72a5541 65 rando=0;
kkc 0:c7dba72a5541 66 }
kkc 0:c7dba72a5541 67 else if (rand_num>50 && rand_num<=100){
kkc 0:c7dba72a5541 68 rando=1;
kkc 0:c7dba72a5541 69 }
kkc 0:c7dba72a5541 70 else if (rand_num>100 && rand_num<=150){
kkc 0:c7dba72a5541 71 rando=2;
kkc 0:c7dba72a5541 72 }
kkc 0:c7dba72a5541 73 else if (rand_num<=200){
kkc 0:c7dba72a5541 74 rando=3;
kkc 0:c7dba72a5541 75 }
kkc 0:c7dba72a5541 76 //saves a random number in our n_array
kkc 0:c7dba72a5541 77 n_array[i]=rando;
kkc 0:c7dba72a5541 78 }
kkc 0:c7dba72a5541 79 if (i == n_levels){
kkc 0:c7dba72a5541 80 game_on = 1;
kkc 0:c7dba72a5541 81 }
kkc 0:c7dba72a5541 82
kkc 0:c7dba72a5541 83 }
kkc 0:c7dba72a5541 84
kkc 0:c7dba72a5541 85
kkc 0:c7dba72a5541 86 //shows the user the current sequence
kkc 0:c7dba72a5541 87 if (pause == 0){
kkc 0:c7dba72a5541 88 delay (200);
kkc 0:c7dba72a5541 89 i = 0;
kkc 0:c7dba72a5541 90 for (i = 0; i < currentlevel; i= i + 1){
kkc 0:c7dba72a5541 91 leddelay = ledtime/(1+(speedfactor/n_levels)*(currentlevel - 1));
kkc 0:c7dba72a5541 92 pinandtone = n_array[i];
kkc 0:c7dba72a5541 93 if (pinandtone == 0){
kkc 0:c7dba72a5541 94 led1 = 1;
kkc 0:c7dba72a5541 95 playTone(tones[pinandtone], leddelay);
kkc 0:c7dba72a5541 96 led1 = 0;
kkc 0:c7dba72a5541 97 delay(100/speedfactor);}
kkc 0:c7dba72a5541 98 else if (pinandtone == 1){
kkc 0:c7dba72a5541 99 led2 = 1;
kkc 0:c7dba72a5541 100 playTone(tones[pinandtone], leddelay);
kkc 0:c7dba72a5541 101 led2 = 0;
kkc 0:c7dba72a5541 102 delay(100/speedfactor);}
kkc 0:c7dba72a5541 103 else if (pinandtone == 2){
kkc 0:c7dba72a5541 104 led3 = 1;
kkc 0:c7dba72a5541 105 playTone(tones[pinandtone], leddelay);
kkc 0:c7dba72a5541 106 led3 = 0;
kkc 0:c7dba72a5541 107 delay(100/speedfactor);}
kkc 0:c7dba72a5541 108 else if (pinandtone == 3){
kkc 0:c7dba72a5541 109 led4 = 1;
kkc 0:c7dba72a5541 110 playTone(tones[pinandtone], leddelay);
kkc 0:c7dba72a5541 111 led4 = 0;
kkc 0:c7dba72a5541 112 delay(100/speedfactor);}
kkc 0:c7dba72a5541 113
kkc 0:c7dba72a5541 114 }
kkc 0:c7dba72a5541 115 pause = 1;
kkc 0:c7dba72a5541 116 }
kkc 0:c7dba72a5541 117 i = 0;
kkc 0:c7dba72a5541 118 int buttonchange = 0;
kkc 0:c7dba72a5541 119 int j = 0; // This is the current position in the sequence
kkc 0:c7dba72a5541 120 while (j < currentlevel){
kkc 0:c7dba72a5541 121 while (buttonchange == 0){
kkc 0:c7dba72a5541 122 for (i = 0; i < 4; i = i + 1){
kkc 0:c7dba72a5541 123 if (i == 0)
kkc 0:c7dba72a5541 124 buttonState[i] = button1.read();
kkc 0:c7dba72a5541 125 else if (i == 1)
kkc 0:c7dba72a5541 126 buttonState[i] = button2.read();
kkc 0:c7dba72a5541 127 else if (i == 2)
kkc 0:c7dba72a5541 128 buttonState[i] = button3.read();
kkc 0:c7dba72a5541 129 else if (i == 3)
kkc 0:c7dba72a5541 130 buttonState[i] = button4.read();
kkc 0:c7dba72a5541 131 buttonchange = buttonchange + buttonState[i];
kkc 0:c7dba72a5541 132 }
kkc 0:c7dba72a5541 133 }
kkc 0:c7dba72a5541 134 for (i = 0; i < 4; i = i + 1){
kkc 0:c7dba72a5541 135 if (buttonState[i] == 1) {
kkc 0:c7dba72a5541 136 if (i == 0){
kkc 0:c7dba72a5541 137 led1 = 1;
kkc 0:c7dba72a5541 138 playTone(tones[i], ledtime);
kkc 0:c7dba72a5541 139 led1 = 0;
kkc 0:c7dba72a5541 140 }
kkc 0:c7dba72a5541 141 else if (i == 1){
kkc 0:c7dba72a5541 142 led2 = 1;
kkc 0:c7dba72a5541 143 playTone(tones[i], ledtime);
kkc 0:c7dba72a5541 144 led2 = 0;
kkc 0:c7dba72a5541 145 }
kkc 0:c7dba72a5541 146 else if (i == 2){
kkc 0:c7dba72a5541 147 led3 = 1;
kkc 0:c7dba72a5541 148 playTone(tones[i], ledtime);
kkc 0:c7dba72a5541 149 led3 = 0;
kkc 0:c7dba72a5541 150 }
kkc 0:c7dba72a5541 151 else if (i == 3){
kkc 0:c7dba72a5541 152 led4 = 1;
kkc 0:c7dba72a5541 153 playTone(tones[i], ledtime);
kkc 0:c7dba72a5541 154 led4 = 0;
kkc 0:c7dba72a5541 155 }
kkc 0:c7dba72a5541 156
kkc 0:c7dba72a5541 157 pause = 0;
kkc 0:c7dba72a5541 158 u_array[j]=i;
kkc 0:c7dba72a5541 159 buttonState[i] = 0;
kkc 0:c7dba72a5541 160 buttonchange = 0;
kkc 0:c7dba72a5541 161 }
kkc 0:c7dba72a5541 162 }
kkc 0:c7dba72a5541 163 if (u_array[j] == n_array[j]){
kkc 0:c7dba72a5541 164 j++;
kkc 0:c7dba72a5541 165 right = 1;
kkc 0:c7dba72a5541 166 }
kkc 0:c7dba72a5541 167 else{
kkc 0:c7dba72a5541 168
kkc 0:c7dba72a5541 169 right = 0;
kkc 0:c7dba72a5541 170 i = 4;
kkc 0:c7dba72a5541 171 j = currentlevel;
kkc 0:c7dba72a5541 172 pause = 0;
kkc 0:c7dba72a5541 173 }
kkc 0:c7dba72a5541 174 }
kkc 0:c7dba72a5541 175
kkc 0:c7dba72a5541 176 if (right == 0){
kkc 0:c7dba72a5541 177 delay(300);
kkc 0:c7dba72a5541 178 i = 0;
kkc 0:c7dba72a5541 179 game_on = 0;
kkc 0:c7dba72a5541 180 currentlevel = 1;
kkc 0:c7dba72a5541 181 for (i = 0; i < 4; i = i + 1){
kkc 0:c7dba72a5541 182 if (i == 0)
kkc 0:c7dba72a5541 183 led1 = 1;
kkc 0:c7dba72a5541 184 else if (i == 1)
kkc 0:c7dba72a5541 185 led2 = 1;
kkc 0:c7dba72a5541 186 else if (i == 2)
kkc 0:c7dba72a5541 187 led3 = 1;
kkc 0:c7dba72a5541 188 else if (i == 3)
kkc 0:c7dba72a5541 189 led4 = 1;
kkc 0:c7dba72a5541 190 }
kkc 0:c7dba72a5541 191 playTone(tones[4], ledtime);
kkc 0:c7dba72a5541 192 for (i = 0; i < 4; i = i + 1){
kkc 0:c7dba72a5541 193 if (i == 0)
kkc 0:c7dba72a5541 194 led1 = 0;
kkc 0:c7dba72a5541 195 else if (i == 1)
kkc 0:c7dba72a5541 196 led2 = 0;
kkc 0:c7dba72a5541 197 else if (i == 2)
kkc 0:c7dba72a5541 198 led3 = 0;
kkc 0:c7dba72a5541 199 else if (i == 3)
kkc 0:c7dba72a5541 200 led4 = 0;
kkc 0:c7dba72a5541 201 }
kkc 0:c7dba72a5541 202 delay (200);
kkc 0:c7dba72a5541 203 for (i = 0; i < 4; i = i + 1){
kkc 0:c7dba72a5541 204 if (i == 0)
kkc 0:c7dba72a5541 205 led1 = 1;
kkc 0:c7dba72a5541 206 else if (i == 1)
kkc 0:c7dba72a5541 207 led2 = 1;
kkc 0:c7dba72a5541 208 else if (i== 2)
kkc 0:c7dba72a5541 209 led3 = 1;
kkc 0:c7dba72a5541 210 else if (i == 3)
kkc 0:c7dba72a5541 211 led4 = 1;
kkc 0:c7dba72a5541 212 }
kkc 0:c7dba72a5541 213 playTone(tones[4], ledtime);
kkc 0:c7dba72a5541 214 for (i = 0; i < 4; i = i + 1){
kkc 0:c7dba72a5541 215 if (i == 0)
kkc 0:c7dba72a5541 216 led1 = 0;
kkc 0:c7dba72a5541 217 else if (i == 1)
kkc 0:c7dba72a5541 218 led2 = 0;
kkc 0:c7dba72a5541 219 else if (i == 2)
kkc 0:c7dba72a5541 220 led3 = 0;
kkc 0:c7dba72a5541 221 else if (i == 3)
kkc 0:c7dba72a5541 222 led4 = 0;
kkc 0:c7dba72a5541 223 }
kkc 0:c7dba72a5541 224
kkc 0:c7dba72a5541 225 delay(500);
kkc 0:c7dba72a5541 226 game_on = 0;
kkc 0:c7dba72a5541 227 }
kkc 0:c7dba72a5541 228
kkc 0:c7dba72a5541 229
kkc 0:c7dba72a5541 230 //if you insert the right sequence it levels up
kkc 0:c7dba72a5541 231 if (right == 1){
kkc 0:c7dba72a5541 232 currentlevel++;
kkc 0:c7dba72a5541 233 pause = 0;
kkc 0:c7dba72a5541 234 }
kkc 0:c7dba72a5541 235 //if you finish the game
kkc 0:c7dba72a5541 236 if (currentlevel == n_levels){
kkc 0:c7dba72a5541 237 delay(500);
kkc 0:c7dba72a5541 238 // The following is the victory sound:
kkc 0:c7dba72a5541 239 int notes[] = {2, 2, 2, 2, 0, 1, 2, 1, 2};
kkc 0:c7dba72a5541 240 int note = 0;
kkc 0:c7dba72a5541 241 int tempo[] = {200, 200, 200, 400, 400, 400, 200, 200, 600};
kkc 0:c7dba72a5541 242 int breaks[] = {100, 100, 100, 200, 200, 200, 300, 100, 200};
kkc 0:c7dba72a5541 243 for (i = 0; i < 9; i = i + 1){
kkc 0:c7dba72a5541 244 note = notes[i];
kkc 0:c7dba72a5541 245 if (note == 0){
kkc 0:c7dba72a5541 246 led1 = 1;
kkc 0:c7dba72a5541 247 playTone(tones[note], tempo[i]);
kkc 0:c7dba72a5541 248 led1 = 0;
kkc 0:c7dba72a5541 249 }
kkc 0:c7dba72a5541 250 else if (note == 1){
kkc 0:c7dba72a5541 251 led2 = 1;
kkc 0:c7dba72a5541 252 playTone(tones[note], tempo[i]);
kkc 0:c7dba72a5541 253 led2 = 0;
kkc 0:c7dba72a5541 254 }
kkc 0:c7dba72a5541 255 else if (note == 2){
kkc 0:c7dba72a5541 256 led3 = 1;
kkc 0:c7dba72a5541 257 playTone(tones[note], tempo[i]);
kkc 0:c7dba72a5541 258 led3 = 0;
kkc 0:c7dba72a5541 259 }
kkc 0:c7dba72a5541 260 else if (note == 3){
kkc 0:c7dba72a5541 261 led4 = 1;
kkc 0:c7dba72a5541 262 playTone(tones[note], tempo[i]);
kkc 0:c7dba72a5541 263 led4 = 0;
kkc 0:c7dba72a5541 264 }
kkc 0:c7dba72a5541 265 delay(breaks[i]);
kkc 0:c7dba72a5541 266 }
kkc 0:c7dba72a5541 267 //sets game_on to 0, so it restarts a new game
kkc 0:c7dba72a5541 268 game_on = 0;
kkc 0:c7dba72a5541 269 currentlevel = 1;
kkc 0:c7dba72a5541 270 n_levels = n_levels + 2;
kkc 0:c7dba72a5541 271 speedfactor = speedfactor + 1;
kkc 0:c7dba72a5541 272 }
kkc 0:c7dba72a5541 273
kkc 0:c7dba72a5541 274 }
kkc 0:c7dba72a5541 275
kkc 0:c7dba72a5541 276 }
kkc 0:c7dba72a5541 277