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

Committer:
wek
Date:
Mon Dec 13 23:51:43 2010 +0000
Revision:
1:3acf57259c58
Parent:
0:408abc8a3d3e
Child:
2:fe450a70f8a4
rev2 - individual LEDs now collected to a DigitalBusOut

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 DebounceIn button1(p15);
wek 0:408abc8a3d3e 6 DebounceIn button2(p16);
wek 0:408abc8a3d3e 7 DebounceIn button3(p17);
wek 0:408abc8a3d3e 8 DebounceIn button4(p21);
wek 0:408abc8a3d3e 9
wek 0:408abc8a3d3e 10 class CSimonButton {
wek 0:408abc8a3d3e 11 _Bool pressed;
wek 0:408abc8a3d3e 12 int button;
wek 0:408abc8a3d3e 13 public:
wek 0:408abc8a3d3e 14 CSimonButton();
wek 0:408abc8a3d3e 15 _Bool IsPressed(void);
wek 0:408abc8a3d3e 16 int GetButton(void) {return button;};
wek 0:408abc8a3d3e 17 void Handle(void);
wek 0:408abc8a3d3e 18 };
wek 0:408abc8a3d3e 19
wek 0:408abc8a3d3e 20 CSimonButton::CSimonButton() {
wek 0:408abc8a3d3e 21 button1.mode(PullUp);
wek 0:408abc8a3d3e 22 button2.mode(PullUp);
wek 0:408abc8a3d3e 23 button3.mode(PullUp);
wek 0:408abc8a3d3e 24 button4.mode(PullUp);
wek 0:408abc8a3d3e 25 pressed = 0;
wek 0:408abc8a3d3e 26 }
wek 0:408abc8a3d3e 27
wek 0:408abc8a3d3e 28 _Bool CSimonButton::IsPressed(void) {
wek 0:408abc8a3d3e 29 _Bool tmp;
wek 0:408abc8a3d3e 30
wek 0:408abc8a3d3e 31 tmp = pressed;
wek 0:408abc8a3d3e 32 pressed = 0;
wek 0:408abc8a3d3e 33 return tmp;
wek 0:408abc8a3d3e 34 }
wek 0:408abc8a3d3e 35
wek 0:408abc8a3d3e 36 void CSimonButton::Handle(void) {
wek 0:408abc8a3d3e 37 if (button1.pressed) {
wek 0:408abc8a3d3e 38 button1.pressed = 0;
wek 0:408abc8a3d3e 39 pressed = 1;
wek 0:408abc8a3d3e 40 button = 1;
wek 0:408abc8a3d3e 41 }
wek 0:408abc8a3d3e 42 if (button2.pressed) {
wek 0:408abc8a3d3e 43 button2.pressed = 0;
wek 0:408abc8a3d3e 44 pressed = 1;
wek 0:408abc8a3d3e 45 button = 2;
wek 0:408abc8a3d3e 46 }
wek 0:408abc8a3d3e 47 if (button3.pressed) {
wek 0:408abc8a3d3e 48 button3.pressed = 0;
wek 0:408abc8a3d3e 49 pressed = 1;
wek 0:408abc8a3d3e 50 button = 3;
wek 0:408abc8a3d3e 51 }
wek 0:408abc8a3d3e 52 if (button4.pressed) {
wek 0:408abc8a3d3e 53 button4.pressed = 0;
wek 0:408abc8a3d3e 54 pressed = 1;
wek 0:408abc8a3d3e 55 button = 4;
wek 0:408abc8a3d3e 56 }
wek 0:408abc8a3d3e 57
wek 0:408abc8a3d3e 58 }
wek 0:408abc8a3d3e 59
wek 0:408abc8a3d3e 60
wek 0:408abc8a3d3e 61 uint8_t ledState;
wek 0:408abc8a3d3e 62
wek 1:3acf57259c58 63 BusOut leds(LED1, LED2, LED3, LED4);
wek 1:3acf57259c58 64
wek 0:408abc8a3d3e 65 int main() {
wek 0:408abc8a3d3e 66 CSimonButton simonButton;
wek 0:408abc8a3d3e 67 while (1) {
wek 1:3acf57259c58 68 leds.write(ledState);
wek 0:408abc8a3d3e 69 simonButton.Handle();
wek 0:408abc8a3d3e 70
wek 0:408abc8a3d3e 71 if (simonButton.IsPressed()) {
wek 0:408abc8a3d3e 72 ledState ^= 1 << (simonButton.GetButton() - 1);
wek 0:408abc8a3d3e 73 }
wek 0:408abc8a3d3e 74 }
wek 0:408abc8a3d3e 75 }
wek 0:408abc8a3d3e 76 /*
wek 0:408abc8a3d3e 77 int main() {
wek 0:408abc8a3d3e 78 while(1) {
wek 0:408abc8a3d3e 79 myled = 1;
wek 0:408abc8a3d3e 80 wait(0.2);
wek 0:408abc8a3d3e 81 myled = 0;
wek 0:408abc8a3d3e 82 wait(0.2);
wek 0:408abc8a3d3e 83 }
wek 0:408abc8a3d3e 84 }
wek 0:408abc8a3d3e 85 */