would be Simon game, as a demonstrator for buttons debouncing and \"collecting\" ---

Committer:
wek
Date:
Mon Dec 13 23:34:17 2010 +0000
Revision:
0:408abc8a3d3e
Child:
1:3acf57259c58
initial revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wek 0:408abc8a3d3e 1 #include "mbed.h"
wek 0:408abc8a3d3e 2 #include "DebounceIn_.h"
wek 0:408abc8a3d3e 3 #include <stdbool.h>
wek 0:408abc8a3d3e 4
wek 0:408abc8a3d3e 5 DigitalOut led1(LED1);
wek 0:408abc8a3d3e 6 DigitalOut led2(LED2);
wek 0:408abc8a3d3e 7 DigitalOut led3(LED3);
wek 0:408abc8a3d3e 8 DigitalOut led4(LED4);
wek 0:408abc8a3d3e 9 DebounceIn button1(p15);
wek 0:408abc8a3d3e 10 DebounceIn button2(p16);
wek 0:408abc8a3d3e 11 DebounceIn button3(p17);
wek 0:408abc8a3d3e 12 DebounceIn button4(p21);
wek 0:408abc8a3d3e 13
wek 0:408abc8a3d3e 14 class CSimonButton {
wek 0:408abc8a3d3e 15 _Bool pressed;
wek 0:408abc8a3d3e 16 int button;
wek 0:408abc8a3d3e 17 public:
wek 0:408abc8a3d3e 18 CSimonButton();
wek 0:408abc8a3d3e 19 _Bool IsPressed(void);
wek 0:408abc8a3d3e 20 int GetButton(void) {return button;};
wek 0:408abc8a3d3e 21 void Handle(void);
wek 0:408abc8a3d3e 22 };
wek 0:408abc8a3d3e 23
wek 0:408abc8a3d3e 24 CSimonButton::CSimonButton() {
wek 0:408abc8a3d3e 25 button1.mode(PullUp);
wek 0:408abc8a3d3e 26 button2.mode(PullUp);
wek 0:408abc8a3d3e 27 button3.mode(PullUp);
wek 0:408abc8a3d3e 28 button4.mode(PullUp);
wek 0:408abc8a3d3e 29 pressed = 0;
wek 0:408abc8a3d3e 30 }
wek 0:408abc8a3d3e 31
wek 0:408abc8a3d3e 32 _Bool CSimonButton::IsPressed(void) {
wek 0:408abc8a3d3e 33 _Bool tmp;
wek 0:408abc8a3d3e 34
wek 0:408abc8a3d3e 35 tmp = pressed;
wek 0:408abc8a3d3e 36 pressed = 0;
wek 0:408abc8a3d3e 37 return tmp;
wek 0:408abc8a3d3e 38 }
wek 0:408abc8a3d3e 39
wek 0:408abc8a3d3e 40 void CSimonButton::Handle(void) {
wek 0:408abc8a3d3e 41 if (button1.pressed) {
wek 0:408abc8a3d3e 42 button1.pressed = 0;
wek 0:408abc8a3d3e 43 pressed = 1;
wek 0:408abc8a3d3e 44 button = 1;
wek 0:408abc8a3d3e 45 }
wek 0:408abc8a3d3e 46 if (button2.pressed) {
wek 0:408abc8a3d3e 47 button2.pressed = 0;
wek 0:408abc8a3d3e 48 pressed = 1;
wek 0:408abc8a3d3e 49 button = 2;
wek 0:408abc8a3d3e 50 }
wek 0:408abc8a3d3e 51 if (button3.pressed) {
wek 0:408abc8a3d3e 52 button3.pressed = 0;
wek 0:408abc8a3d3e 53 pressed = 1;
wek 0:408abc8a3d3e 54 button = 3;
wek 0:408abc8a3d3e 55 }
wek 0:408abc8a3d3e 56 if (button4.pressed) {
wek 0:408abc8a3d3e 57 button4.pressed = 0;
wek 0:408abc8a3d3e 58 pressed = 1;
wek 0:408abc8a3d3e 59 button = 4;
wek 0:408abc8a3d3e 60 }
wek 0:408abc8a3d3e 61
wek 0:408abc8a3d3e 62 }
wek 0:408abc8a3d3e 63
wek 0:408abc8a3d3e 64
wek 0:408abc8a3d3e 65 uint8_t ledState;
wek 0:408abc8a3d3e 66
wek 0:408abc8a3d3e 67 int main() {
wek 0:408abc8a3d3e 68 CSimonButton simonButton;
wek 0:408abc8a3d3e 69 while (1) {
wek 0:408abc8a3d3e 70 led1 = (ledState & 0x01) ? 1 : 0;
wek 0:408abc8a3d3e 71 led2 = (ledState & 0x02) ? 1 : 0;
wek 0:408abc8a3d3e 72 led3 = (ledState & 0x04) ? 1 : 0;
wek 0:408abc8a3d3e 73 led4 = (ledState & 0x08) ? 1 : 0;
wek 0:408abc8a3d3e 74
wek 0:408abc8a3d3e 75 simonButton.Handle();
wek 0:408abc8a3d3e 76
wek 0:408abc8a3d3e 77 if (simonButton.IsPressed()) {
wek 0:408abc8a3d3e 78 ledState ^= 1 << (simonButton.GetButton() - 1);
wek 0:408abc8a3d3e 79 }
wek 0:408abc8a3d3e 80 }
wek 0:408abc8a3d3e 81 }
wek 0:408abc8a3d3e 82 /*
wek 0:408abc8a3d3e 83 int main() {
wek 0:408abc8a3d3e 84 while(1) {
wek 0:408abc8a3d3e 85 myled = 1;
wek 0:408abc8a3d3e 86 wait(0.2);
wek 0:408abc8a3d3e 87 myled = 0;
wek 0:408abc8a3d3e 88 wait(0.2);
wek 0:408abc8a3d3e 89 }
wek 0:408abc8a3d3e 90 }
wek 0:408abc8a3d3e 91 */