Lab 1 - Part 4 Using navigation switch with BusIn

Dependencies:   mbed

Committer:
Nydrel
Date:
Thu Jan 18 03:13:22 2018 +0000
Revision:
0:9677ae35a15c
Demo code for using NavSwitch and mini USB;

Who changed what in which revision?

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