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
Diff: main.cpp
- Revision:
- 1:1aca092ceb7e
- Parent:
- 0:67efb4657416
- Child:
- 2:8ff96f7acb45
--- a/main.cpp Wed Aug 17 01:46:59 2016 +0000
+++ b/main.cpp Wed Aug 17 15:22:18 2016 +0000
@@ -1,52 +1,108 @@
#include "mbed.h"
#include "LED_Bar.h"
-LED_Bar bar(D6, D5);
-DigitalIn button1(A3);
-DigitalIn button2(A2);
-DigitalIn button3(A1);
-DigitalIn button4(A0);
-int button_index;
+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() {
- bar.setLevel(0);
- while(1) {
- wait(0.3);
- if (button1) {
- button_index = 1;
- while(button1){
- bar.setSingleLed(9, 1);
- bar.setSingleLed(8, 1);
- };
- bar.setSingleLed(9, 0);
- bar.setSingleLed(8, 0);
- }
- if (button2) {
- button_index = 2;
- while(button2){
- bar.setSingleLed(7, 1);
- bar.setSingleLed(6, 1);
- };
- bar.setSingleLed(7, 0);
- bar.setSingleLed(6, 0);
- }
- if (button3) {
- button_index = 3;
- while(button3){
- bar.setSingleLed(5, 1);
- bar.setSingleLed(4, 1);
- };
- bar.setSingleLed(5, 0);
- bar.setSingleLed(4, 0);
- }
- if (button4) {
- button_index = 4;
- while(button4){
- bar.setSingleLed(3, 1);
- bar.setSingleLed(2, 1);
- };
- bar.setSingleLed(3, 0);
- bar.setSingleLed(2, 0);
- }
- }
-}
\ No newline at end of file
+ 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
