Jan Waclawek
/
Simon
would be Simon game, as a demonstrator for buttons debouncing and \"collecting\" ---
main.cpp@0:408abc8a3d3e, 2010-12-13 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |