A simple Simon Says game using a Grove Base Shield, 3 Grove LED Bars, 1 Grove Buzzer, and 3 Grove Buttons.
Components Used
Platform: ST-Nucleo-F401RE
Component Configuration
LED_Bar mid(D6, D5); //D5 LED_Bar right(D8, D7); //D7 LED_Bar left(D4, D3); //D3 InterruptIn button_left(A2); InterruptIn button_mid(A1); InterruptIn button_right(A0); DigitalOut buzzer(D2);
Gallery
main.cpp
- Committer:
- jplunkett
- Date:
- 2016-08-17
- Revision:
- 1:1aca092ceb7e
- Parent:
- 0:67efb4657416
- Child:
- 2:8ff96f7acb45
File content as of revision 1:1aca092ceb7e:
#include "mbed.h"
#include "LED_Bar.h"
LED_Bar top(D6, D5);
LED_Bar right(D8, D7);
LED_Bar left(D4, D3);
DigitalIn button_left(A2);
DigitalIn button_top(A1);
DigitalIn button_right(A0);
int input[10];
int sequence[] = {3, 2, 1, 3, 2, 1};
void simon_loop() {
for(int i = 0; i < (sizeof(sequence)/sizeof(sequence[0])); i++) {
if (sequence[i] == 1) {
right.setLevel(10);
wait(0.4);
right.setLevel(0);
}
else if (sequence[i] == 2) {
top.setLevel(10);
wait(0.4);
top.setLevel(0);
}
else {
left.setLevel(10);
wait(0.4);
left.setLevel(0);
}
}
}
void input_loop() {
for(int j = 0; j < (sizeof(sequence)/sizeof(sequence[0])); j++) {
wait(0.4);
if (button_top) {
input[j] = 2;
while(button_top){
top.setLevel(10);
};
top.setLevel(0);
}
if (button_right) {
input[j] = 1;
while(button_right){
right.setLevel(10);
};
right.setLevel(0);
}
if (button_left) {
input[j] = 3;
while(button_left){
left.setLevel(10);
};
left.setLevel(0);
}
}
return;
}
bool win_or_lose() {
for(int k = 0; k < (sizeof(sequence)/sizeof(sequence[0])); k++) {
if (input[k] == sequence[k]) { continue; }
else { return false; }
}
return true;
}
void success() {
for(int h = 0; h <=10; h++){
top.setLevel(h);
right.setLevel(h);
left.setLevel(h);
wait(0.1);
}
for(int h = 0; h <=10; h++){
top.setLevel(h);
right.setLevel(h);
left.setLevel(h);
wait(0.1);
}
top.setLevel(0);
right.setLevel(0);
left.setLevel(0);
}
void failure() {
for(int g = 0; g <= 10; g++){
top.setLevel(10-g);
right.setLevel(10-g);
left.setLevel(10-g);
wait(0.1);
}
}
int main() {
top.setLevel(0);
right.setLevel(0);
left.setLevel(0);
// wait for user to start simon says
wait(0.3);
simon_loop();
input_loop();
wait(0.2);
bool winner = win_or_lose();
if (winner == true) { success(); }
else { failure; }
}
Jenny Plunkett
