Lab that has to do with basic IO on mbed.
Dependencies: DebounceIn mbed PinDetect
JessesLab1/main.cpp@45:6f60aac74257, 2016-01-21 (annotated)
- Committer:
- Jesse Baker
- Date:
- Thu Jan 21 11:42:33 2016 -0500
- Revision:
- 45:6f60aac74257
- Parent:
- 44:30abfd5d24f2
- Child:
- 46:7775a1ff6915
JB commented out George main, de-commented Jesse main, testing 5-way switch code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jesse Baker |
45:6f60aac74257 | 1 | // <- remove this if you want to code this and comment Georges |
gtzintzarov3 | 33:275385014ba9 | 2 | #include "mbed.h" |
Jesse Baker |
36:d96476f81b9f | 3 | #include "DebounceIn.h" |
Jesse Baker |
36:d96476f81b9f | 4 | #include "PinDetect.h" |
Jesse Baker |
36:d96476f81b9f | 5 | |
Jesse Baker |
45:6f60aac74257 | 6 | // PinDetecnt light(p8); |
Jesse Baker |
45:6f60aac74257 | 7 | // PwmOut led(p21); |
Jesse Baker |
45:6f60aac74257 | 8 | // |
Jesse Baker |
45:6f60aac74257 | 9 | // int main() { |
Jesse Baker |
45:6f60aac74257 | 10 | // light.mode(PullUp); |
Jesse Baker |
45:6f60aac74257 | 11 | // while(1) { |
Jesse Baker |
45:6f60aac74257 | 12 | // led.write(!light); |
Jesse Baker |
45:6f60aac74257 | 13 | // } |
Jesse Baker |
45:6f60aac74257 | 14 | // } |
Jesse Baker |
45:6f60aac74257 | 15 | |
Jesse Baker |
45:6f60aac74257 | 16 | BusOut mbedleds(LED1,LED2,LED3,LED4); |
Jesse Baker |
45:6f60aac74257 | 17 | //BusOut/In is faster than multiple DigitalOut/Ins |
Jesse Baker |
36:d96476f81b9f | 18 | |
Jesse Baker |
45:6f60aac74257 | 19 | class Nav_Switch |
Jesse Baker |
45:6f60aac74257 | 20 | { |
Jesse Baker |
45:6f60aac74257 | 21 | public: |
Jesse Baker |
45:6f60aac74257 | 22 | Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire); |
Jesse Baker |
45:6f60aac74257 | 23 | int read(); |
Jesse Baker |
45:6f60aac74257 | 24 | //boolean functions to test each switch |
Jesse Baker |
45:6f60aac74257 | 25 | bool up(); |
Jesse Baker |
45:6f60aac74257 | 26 | bool down(); |
Jesse Baker |
45:6f60aac74257 | 27 | bool left(); |
Jesse Baker |
45:6f60aac74257 | 28 | bool right(); |
Jesse Baker |
45:6f60aac74257 | 29 | bool fire(); |
Jesse Baker |
45:6f60aac74257 | 30 | //automatic read on RHS |
Jesse Baker |
45:6f60aac74257 | 31 | operator int (); |
Jesse Baker |
45:6f60aac74257 | 32 | //index to any switch array style |
Jesse Baker |
45:6f60aac74257 | 33 | bool operator[](int index) { |
Jesse Baker |
45:6f60aac74257 | 34 | return _pins[index]; |
Jesse Baker |
45:6f60aac74257 | 35 | }; |
Jesse Baker |
45:6f60aac74257 | 36 | private: |
Jesse Baker |
45:6f60aac74257 | 37 | BusIn _pins; |
Jesse Baker |
36:d96476f81b9f | 38 | |
Jesse Baker |
45:6f60aac74257 | 39 | }; |
Jesse Baker |
45:6f60aac74257 | 40 | Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire): |
Jesse Baker |
45:6f60aac74257 | 41 | _pins(up, down, left, right, fire) |
Jesse Baker |
45:6f60aac74257 | 42 | { |
Jesse Baker |
45:6f60aac74257 | 43 | _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise |
Jesse Baker |
45:6f60aac74257 | 44 | wait(0.001); //delays just a bit for pullups to pull inputs high |
Jesse Baker |
45:6f60aac74257 | 45 | } |
Jesse Baker |
45:6f60aac74257 | 46 | inline bool Nav_Switch::up() |
Jesse Baker |
45:6f60aac74257 | 47 | { |
Jesse Baker |
45:6f60aac74257 | 48 | return !(_pins[0]); |
Jesse Baker |
45:6f60aac74257 | 49 | } |
Jesse Baker |
45:6f60aac74257 | 50 | inline bool Nav_Switch::down() |
Jesse Baker |
45:6f60aac74257 | 51 | { |
Jesse Baker |
45:6f60aac74257 | 52 | return !(_pins[1]); |
Jesse Baker |
45:6f60aac74257 | 53 | } |
Jesse Baker |
45:6f60aac74257 | 54 | inline bool Nav_Switch::left() |
Jesse Baker |
45:6f60aac74257 | 55 | { |
Jesse Baker |
45:6f60aac74257 | 56 | return !(_pins[2]); |
Jesse Baker |
45:6f60aac74257 | 57 | } |
Jesse Baker |
45:6f60aac74257 | 58 | inline bool Nav_Switch::right() |
Jesse Baker |
45:6f60aac74257 | 59 | { |
Jesse Baker |
45:6f60aac74257 | 60 | return !(_pins[3]); |
Jesse Baker |
45:6f60aac74257 | 61 | } |
Jesse Baker |
45:6f60aac74257 | 62 | inline bool Nav_Switch::fire() |
Jesse Baker |
45:6f60aac74257 | 63 | { |
Jesse Baker |
45:6f60aac74257 | 64 | return !(_pins[4]); |
Jesse Baker |
45:6f60aac74257 | 65 | } |
Jesse Baker |
45:6f60aac74257 | 66 | inline int Nav_Switch::read() |
Jesse Baker |
45:6f60aac74257 | 67 | { |
Jesse Baker |
45:6f60aac74257 | 68 | return _pins.read(); |
Jesse Baker |
45:6f60aac74257 | 69 | } |
Jesse Baker |
45:6f60aac74257 | 70 | inline Nav_Switch::operator int () |
Jesse Baker |
45:6f60aac74257 | 71 | { |
Jesse Baker |
45:6f60aac74257 | 72 | return _pins.read(); |
Jesse Baker |
45:6f60aac74257 | 73 | } |
Jesse Baker |
36:d96476f81b9f | 74 | |
Jesse Baker |
45:6f60aac74257 | 75 | Nav_Switch myNav( p9, p6, p7, p5, p8); //pin order on Sparkfun breakout |
Jesse Baker |
42:841b1bf3f173 | 76 | |
Jesse Baker |
45:6f60aac74257 | 77 | int main() |
Jesse Baker |
45:6f60aac74257 | 78 | { |
Jesse Baker |
45:6f60aac74257 | 79 | while(1) { |
Jesse Baker |
45:6f60aac74257 | 80 | //with pullups a button hit is a "0" - "~" inverts data to leds |
Jesse Baker |
45:6f60aac74257 | 81 | mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs |
Jesse Baker |
45:6f60aac74257 | 82 | if(myNav.fire()) mbedleds = 0x0F; //special all leds on case for fire (center button) |
Jesse Baker |
45:6f60aac74257 | 83 | //or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this |
Jesse Baker |
45:6f60aac74257 | 84 | wait(0.02); |
Jesse Baker |
42:841b1bf3f173 | 85 | } |
Jesse Baker |
45:6f60aac74257 | 86 | } |