Lab that has to do with basic IO on mbed.

Dependencies:   DebounceIn mbed PinDetect

Committer:
Jesse Baker
Date:
Sun Jan 24 16:45:15 2016 -0500
Revision:
53:1c8235c49b70
Parent:
51:e12b3635afae
JB is about to test expansion

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jesse Baker 53:1c8235c49b70 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 // */