ver 1.0

Dependencies:   mbed

Committer:
4180_1
Date:
Tue Aug 27 16:26:32 2019 +0000
Revision:
0:35a8a081dbc3
ver 1.0

Who changed what in which revision?

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