CodeShare

Dependencies:   mbed

Committer:
jeremycai3721
Date:
Sun Sep 25 20:18:23 2016 +0000
Revision:
0:0dce1fd2072d
CodeShare

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jeremycai3721 0:0dce1fd2072d 1 #include "mbed.h"
jeremycai3721 0:0dce1fd2072d 2
jeremycai3721 0:0dce1fd2072d 3 BusOut mbedleds(LED1,LED2,LED3,LED4);
jeremycai3721 0:0dce1fd2072d 4 //BusOut/In is faster than multiple DigitalOut/Ins
jeremycai3721 0:0dce1fd2072d 5
jeremycai3721 0:0dce1fd2072d 6 class Nav_Switch
jeremycai3721 0:0dce1fd2072d 7 {
jeremycai3721 0:0dce1fd2072d 8 public:
jeremycai3721 0:0dce1fd2072d 9 Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire);
jeremycai3721 0:0dce1fd2072d 10 int read();
jeremycai3721 0:0dce1fd2072d 11 //boolean functions to test each switch
jeremycai3721 0:0dce1fd2072d 12 bool up();
jeremycai3721 0:0dce1fd2072d 13 bool down();
jeremycai3721 0:0dce1fd2072d 14 bool left();
jeremycai3721 0:0dce1fd2072d 15 bool right();
jeremycai3721 0:0dce1fd2072d 16 bool fire();
jeremycai3721 0:0dce1fd2072d 17 //automatic read on RHS
jeremycai3721 0:0dce1fd2072d 18 operator int ();
jeremycai3721 0:0dce1fd2072d 19 //index to any switch array style
jeremycai3721 0:0dce1fd2072d 20 bool operator[](int index) {
jeremycai3721 0:0dce1fd2072d 21 return _pins[index];
jeremycai3721 0:0dce1fd2072d 22 };
jeremycai3721 0:0dce1fd2072d 23 private:
jeremycai3721 0:0dce1fd2072d 24 BusIn _pins;
jeremycai3721 0:0dce1fd2072d 25
jeremycai3721 0:0dce1fd2072d 26 };
jeremycai3721 0:0dce1fd2072d 27 Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire):
jeremycai3721 0:0dce1fd2072d 28 _pins(up, down, left, right, fire)
jeremycai3721 0:0dce1fd2072d 29 {
jeremycai3721 0:0dce1fd2072d 30 _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
jeremycai3721 0:0dce1fd2072d 31 wait(0.001); //delays just a bit for pullups to pull inputs high
jeremycai3721 0:0dce1fd2072d 32 }
jeremycai3721 0:0dce1fd2072d 33 inline bool Nav_Switch::up()
jeremycai3721 0:0dce1fd2072d 34 {
jeremycai3721 0:0dce1fd2072d 35 return !(_pins[0]);
jeremycai3721 0:0dce1fd2072d 36 }
jeremycai3721 0:0dce1fd2072d 37 inline bool Nav_Switch::down()
jeremycai3721 0:0dce1fd2072d 38 {
jeremycai3721 0:0dce1fd2072d 39 return !(_pins[1]);
jeremycai3721 0:0dce1fd2072d 40 }
jeremycai3721 0:0dce1fd2072d 41 inline bool Nav_Switch::left()
jeremycai3721 0:0dce1fd2072d 42 {
jeremycai3721 0:0dce1fd2072d 43 return !(_pins[2]);
jeremycai3721 0:0dce1fd2072d 44 }
jeremycai3721 0:0dce1fd2072d 45 inline bool Nav_Switch::right()
jeremycai3721 0:0dce1fd2072d 46 {
jeremycai3721 0:0dce1fd2072d 47 return !(_pins[3]);
jeremycai3721 0:0dce1fd2072d 48 }
jeremycai3721 0:0dce1fd2072d 49 inline bool Nav_Switch::fire()
jeremycai3721 0:0dce1fd2072d 50 {
jeremycai3721 0:0dce1fd2072d 51 return !(_pins[4]);
jeremycai3721 0:0dce1fd2072d 52 }
jeremycai3721 0:0dce1fd2072d 53 inline int Nav_Switch::read()
jeremycai3721 0:0dce1fd2072d 54 {
jeremycai3721 0:0dce1fd2072d 55 return _pins.read();
jeremycai3721 0:0dce1fd2072d 56 }
jeremycai3721 0:0dce1fd2072d 57 inline Nav_Switch::operator int ()
jeremycai3721 0:0dce1fd2072d 58 {
jeremycai3721 0:0dce1fd2072d 59 return _pins.read();
jeremycai3721 0:0dce1fd2072d 60 }
jeremycai3721 0:0dce1fd2072d 61
jeremycai3721 0:0dce1fd2072d 62
jeremycai3721 0:0dce1fd2072d 63 // pin 9 up, 10 down, 11 left, 12right, 13fire
jeremycai3721 0:0dce1fd2072d 64 Nav_Switch myNav( p9, p10, p11, p12, p13); //pin order on Sparkfun breakout
jeremycai3721 0:0dce1fd2072d 65
jeremycai3721 0:0dce1fd2072d 66 int main()
jeremycai3721 0:0dce1fd2072d 67 {
jeremycai3721 0:0dce1fd2072d 68 while(1) {
jeremycai3721 0:0dce1fd2072d 69 //with pullups a button hit is a "0" - "~" inverts data to leds
jeremycai3721 0:0dce1fd2072d 70 mbedleds = ~(myNav & 0x0F); //update leds with nav switch direction inputs
jeremycai3721 0:0dce1fd2072d 71 if(myNav.fire()) mbedleds = 0x0F; //special all leds on case for fire (center button)
jeremycai3721 0:0dce1fd2072d 72 //or use - if(myNav[4]==0) mbedleds = 0x0F; //can index a switch bit like this
jeremycai3721 0:0dce1fd2072d 73 wait(0.02);
jeremycai3721 0:0dce1fd2072d 74 }
jeremycai3721 0:0dce1fd2072d 75 }