First Simon Says version
Dependencies: mbed DebounceIn WS2812
main.cpp
- Committer:
- elab
- Date:
- 2020-02-13
- Revision:
- 0:47b1ab4dd893
File content as of revision 0:47b1ab4dd893:
#include "mbed.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "LED_WS2812.h"
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);
DigitalIn greenButton(D3,PullUp);
DigitalIn redButton(D4,PullUp);
DigitalIn blueButton(D5,PullUp);
DigitalIn yellowButton(D6, PullUp);
LED_WS2812 led(D9,4);
int buttonArray[32];
int array[32]; // LEDS colors array
int readButton(int turn){
int currentValueG, currentValueR, currentValueB, currentValueY, status=0;
int max=400;
for (int i=0;i<32;i++){
buttonArray[i]=55;
}
printf("readButton\n");
for (int i=0; i<= turn; i++){
for (int t=0; t<max; t++){
currentValueG = greenButton.read();
currentValueR = redButton.read();
currentValueB = blueButton.read();
currentValueY = yellowButton.read();
if (currentValueG == 0){
printf("Green button\n");
wait_ms(250);
buttonArray[i]=0;
t=max;
status=0;
}
else if (currentValueR == 0){
printf("RedButton\n");
wait_ms(250);
buttonArray[i]=1;
t=max;
status=0;
}
else if(currentValueB == 0){
printf("BlueButton\n");
wait_ms(250);
buttonArray[i]=2;
t=max;
status=0;
}
else if(currentValueY == 0){
printf("Yellow button\n");
wait_ms(250);
buttonArray[i]=3;
t=max;
status=0;
}
else if(t>=(max-1)){
printf("time out !!! \n");
status=1;
}
wait_ms(10);
}
}
for(int j=0; j<=turn; j++) {
printf("buttonArray[%d]=%d\n", j, buttonArray[j]);
}
printf("end of readButton \n");
return status;
}
int main() {
int maxTurn=5, status, diff=0;
srand(time(0));
led.SetColor(BLACK);
led.SetIntensity(25);
for(int t=0; t<=maxTurn; t++){
// generate the array and ON the LEDs
printf("turn = %d\n", t);
array[t]=rand()%4;
for (int i=0; i<=t; i++){
switch(array[i])
{
case 0:
printf(" >>>>>>> green\n");
led.SetColor(GREEN,0);
wait_ms(500);
led.SetColor(BLACK);
wait_ms(50);
break;
case 1:
printf(" >>>>>>> red\n");
led.SetColor(RED,1);
wait_ms(500);
led.SetColor(BLACK);
wait_ms(50);
break;
case 2:
printf(" >>>>>>> blue\n");
led.SetColor(BLUE,2);
wait_ms(500);
led.SetColor(BLACK);
wait_ms(50);
break;
case 3:
printf(" >>>>>>> yellow\n");
led.SetColor(YELLOW,3);
wait_ms(500);
led.SetColor(BLACK);
wait_ms(50);
break;
default:
printf(" >>>>>>> no color \n");
break;
}
}
status = readButton(t);
// compare two arrays
if (status==1){
printf("Time out, game over !\n");
led.SetColor(ORANGE);
t=maxTurn;// force t to maxTurn to exit
}
else {
for(int j=0; j<=t; j++){
if(array[j]!=buttonArray[j]){
j=t;
diff=1;
}
}
if (diff==1){
t=maxTurn;
printf("Color no match, Game Over !\n");
led.InsertColor(RED);
led.StartBlink(0.2);
}
else{
if(t<maxTurn){
printf("t=%d\n",t);
printf("next level !!!\n");
}
else{
printf("t=%d\n",t);
printf("You win !\n");
led.InsertColor(GREEN);
led.StartBlink(0.2);
wait(3);
led.StopBlink();
}
}
}
printf("Turn finished\n");
}
}