Lab that has to do with basic IO on mbed.
Dependencies: DebounceIn mbed PinDetect
JessesLab1/main.cpp@51:e12b3635afae, 2016-01-24 (annotated)
- Committer:
- Jesse Baker
- Date:
- Sun Jan 24 16:32:04 2016 -0500
- Revision:
- 51:e12b3635afae
- Parent:
- 47:0efd125c7f2d
- Child:
- 53:1c8235c49b70
trying to demo joystick
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jesse Baker |
51:e12b3635afae | 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" |
jbaker66 | 46:7775a1ff6915 | 5 | #include <mpr121.h> |
Jesse Baker |
36:d96476f81b9f | 6 | |
jbaker66 | 46:7775a1ff6915 | 7 | //// Simple LED Lighting using pushbutton |
jbaker66 | 46:7775a1ff6915 | 8 | // PinDetect light(p8); |
Jesse Baker |
45:6f60aac74257 | 9 | // PwmOut led(p21); |
Jesse Baker |
45:6f60aac74257 | 10 | // |
Jesse Baker |
45:6f60aac74257 | 11 | // int main() { |
Jesse Baker |
45:6f60aac74257 | 12 | // light.mode(PullUp); |
Jesse Baker |
45:6f60aac74257 | 13 | // while(1) { |
Jesse Baker |
45:6f60aac74257 | 14 | // led.write(!light); |
Jesse Baker |
45:6f60aac74257 | 15 | // } |
Jesse Baker |
45:6f60aac74257 | 16 | // } |
Jesse Baker |
45:6f60aac74257 | 17 | |
jbaker66 | 46:7775a1ff6915 | 18 | // 5-way switch test |
Jesse Baker |
45:6f60aac74257 | 19 | BusOut mbedleds(LED1,LED2,LED3,LED4); |
Jesse Baker |
45:6f60aac74257 | 20 | //BusOut/In is faster than multiple DigitalOut/Ins |
Jesse Baker |
36:d96476f81b9f | 21 | |
Jesse Baker |
45:6f60aac74257 | 22 | class Nav_Switch |
Jesse Baker |
45:6f60aac74257 | 23 | { |
Jesse Baker |
45:6f60aac74257 | 24 | public: |
Jesse Baker |
45:6f60aac74257 | 25 | Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire); |
Jesse Baker |
45:6f60aac74257 | 26 | int read(); |
Jesse Baker |
45:6f60aac74257 | 27 | //boolean functions to test each switch |
Jesse Baker |
45:6f60aac74257 | 28 | bool up(); |
Jesse Baker |
45:6f60aac74257 | 29 | bool down(); |
Jesse Baker |
45:6f60aac74257 | 30 | bool left(); |
Jesse Baker |
45:6f60aac74257 | 31 | bool right(); |
Jesse Baker |
45:6f60aac74257 | 32 | bool fire(); |
Jesse Baker |
45:6f60aac74257 | 33 | //automatic read on RHS |
Jesse Baker |
45:6f60aac74257 | 34 | operator int (); |
Jesse Baker |
45:6f60aac74257 | 35 | //index to any switch array style |
Jesse Baker |
45:6f60aac74257 | 36 | bool operator[](int index) { |
Jesse Baker |
45:6f60aac74257 | 37 | return _pins[index]; |
Jesse Baker |
45:6f60aac74257 | 38 | }; |
Jesse Baker |
45:6f60aac74257 | 39 | private: |
Jesse Baker |
45:6f60aac74257 | 40 | BusIn _pins; |
Jesse Baker |
36:d96476f81b9f | 41 | |
Jesse Baker |
45:6f60aac74257 | 42 | }; |
Jesse Baker |
45:6f60aac74257 | 43 | Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire): |
Jesse Baker |
45:6f60aac74257 | 44 | _pins(up, down, left, right, fire) |
Jesse Baker |
45:6f60aac74257 | 45 | { |
Jesse Baker |
45:6f60aac74257 | 46 | _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise |
Jesse Baker |
45:6f60aac74257 | 47 | wait(0.001); //delays just a bit for pullups to pull inputs high |
Jesse Baker |
45:6f60aac74257 | 48 | } |
Jesse Baker |
45:6f60aac74257 | 49 | inline bool Nav_Switch::up() |
Jesse Baker |
45:6f60aac74257 | 50 | { |
Jesse Baker |
45:6f60aac74257 | 51 | return !(_pins[0]); |
Jesse Baker |
45:6f60aac74257 | 52 | } |
Jesse Baker |
45:6f60aac74257 | 53 | inline bool Nav_Switch::down() |
Jesse Baker |
45:6f60aac74257 | 54 | { |
Jesse Baker |
45:6f60aac74257 | 55 | return !(_pins[1]); |
Jesse Baker |
45:6f60aac74257 | 56 | } |
Jesse Baker |
45:6f60aac74257 | 57 | inline bool Nav_Switch::left() |
Jesse Baker |
45:6f60aac74257 | 58 | { |
Jesse Baker |
45:6f60aac74257 | 59 | return !(_pins[2]); |
Jesse Baker |
45:6f60aac74257 | 60 | } |
Jesse Baker |
45:6f60aac74257 | 61 | inline bool Nav_Switch::right() |
Jesse Baker |
45:6f60aac74257 | 62 | { |
Jesse Baker |
45:6f60aac74257 | 63 | return !(_pins[3]); |
Jesse Baker |
45:6f60aac74257 | 64 | } |
Jesse Baker |
45:6f60aac74257 | 65 | inline bool Nav_Switch::fire() |
Jesse Baker |
45:6f60aac74257 | 66 | { |
Jesse Baker |
45:6f60aac74257 | 67 | return !(_pins[4]); |
Jesse Baker |
45:6f60aac74257 | 68 | } |
Jesse Baker |
45:6f60aac74257 | 69 | inline int Nav_Switch::read() |
Jesse Baker |
45:6f60aac74257 | 70 | { |
Jesse Baker |
45:6f60aac74257 | 71 | return _pins.read(); |
Jesse Baker |
45:6f60aac74257 | 72 | } |
Jesse Baker |
45:6f60aac74257 | 73 | inline Nav_Switch::operator int () |
Jesse Baker |
45:6f60aac74257 | 74 | { |
Jesse Baker |
45:6f60aac74257 | 75 | return _pins.read(); |
Jesse Baker |
45:6f60aac74257 | 76 | } |
Jesse Baker |
36:d96476f81b9f | 77 | |
Jesse Baker |
51:e12b3635afae | 78 | Nav_Switch myNav( p19, p16, p17, p15, p18); //pin order on Sparkfun breakout |
Jesse Baker |
42:841b1bf3f173 | 79 | |
Jesse Baker |
45:6f60aac74257 | 80 | int main() |
Jesse Baker |
45:6f60aac74257 | 81 | { |
Jesse Baker |
45:6f60aac74257 | 82 | while(1) { |
Jesse Baker |
45:6f60aac74257 | 83 | //with pullups a button hit is a "0" - "~" inverts data to leds |
Jesse Baker |
45:6f60aac74257 | 84 | mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs |
Jesse Baker |
45:6f60aac74257 | 85 | if(myNav.fire()) mbedleds = 0x0F; //special all leds on case for fire (center button) |
Jesse Baker |
45:6f60aac74257 | 86 | //or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this |
Jesse Baker |
45:6f60aac74257 | 87 | wait(0.02); |
Jesse Baker |
42:841b1bf3f173 | 88 | } |
Jesse Baker |
45:6f60aac74257 | 89 | } |
jbaker66 | 46:7775a1ff6915 | 90 | |
jbaker66 | 46:7775a1ff6915 | 91 | |
jbaker66 | 46:7775a1ff6915 | 92 | //// Touch Keypad Demo |
jbaker66 | 46:7775a1ff6915 | 93 | // |
jbaker66 | 46:7775a1ff6915 | 94 | //DigitalOut led1(LED1); |
jbaker66 | 46:7775a1ff6915 | 95 | //DigitalOut led2(LED2); |
jbaker66 | 46:7775a1ff6915 | 96 | //DigitalOut led3(LED3); |
jbaker66 | 46:7775a1ff6915 | 97 | //DigitalOut led4(LED4); |
jbaker66 | 46:7775a1ff6915 | 98 | //// Create the interrupt receiver object on pin 26 |
jbaker66 | 46:7775a1ff6915 | 99 | //InterruptIn interrupt(p26); |
jbaker66 | 46:7775a1ff6915 | 100 | //// Setup the i2c bus on pins 9 and 10 |
jbaker66 | 46:7775a1ff6915 | 101 | //I2C i2c(p9, p10); |
jbaker66 | 46:7775a1ff6915 | 102 | //// Setup the Mpr121: |
jbaker66 | 46:7775a1ff6915 | 103 | //// constructor(i2c object, i2c address of the mpr121) |
jbaker66 | 46:7775a1ff6915 | 104 | //Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); |
Jesse Baker |
51:e12b3635afae | 105 | // |
jbaker66 | 46:7775a1ff6915 | 106 | //// Key hit/release interrupt routine |
jbaker66 | 46:7775a1ff6915 | 107 | //void fallInterrupt() { |
jbaker66 | 46:7775a1ff6915 | 108 | // int key_code=0; |
jbaker66 | 46:7775a1ff6915 | 109 | // int i=0; |
jbaker66 | 46:7775a1ff6915 | 110 | // int value=mpr121.read(0x00); |
jbaker66 | 46:7775a1ff6915 | 111 | // value +=mpr121.read(0x01)<<8; |
jbaker66 | 46:7775a1ff6915 | 112 | // // LED demo mod |
jbaker66 | 46:7775a1ff6915 | 113 | // i=0; |
jbaker66 | 46:7775a1ff6915 | 114 | // // puts key number out to LEDs for demo |
jbaker66 | 46:7775a1ff6915 | 115 | // for (i=0; i<12; i++) { |
jbaker66 | 46:7775a1ff6915 | 116 | // if (((value>>i)&0x01)==1) key_code=i+1; |
jbaker66 | 46:7775a1ff6915 | 117 | // } |
jbaker66 | 46:7775a1ff6915 | 118 | // led4=key_code & 0x01; |
jbaker66 | 46:7775a1ff6915 | 119 | // led3=(key_code>>1) & 0x01; |
jbaker66 | 46:7775a1ff6915 | 120 | // led2=(key_code>>2) & 0x01; |
jbaker66 | 46:7775a1ff6915 | 121 | // led1=(key_code>>3) & 0x01; |
jbaker66 | 46:7775a1ff6915 | 122 | //} |
Jesse Baker |
51:e12b3635afae | 123 | // |
jbaker66 | 46:7775a1ff6915 | 124 | //int main() { |
jbaker66 | 46:7775a1ff6915 | 125 | // interrupt.fall(&fallInterrupt); |
jbaker66 | 46:7775a1ff6915 | 126 | // interrupt.mode(PullUp); |
jbaker66 | 46:7775a1ff6915 | 127 | // while (1) {} |
gtzintzarov3 | 47:0efd125c7f2d | 128 | //} |
gtzintzarov3 | 47:0efd125c7f2d | 129 | |
Jesse Baker |
51:e12b3635afae | 130 | // */ |