ECE 4180 Lab 1 Part 4

Dependencies:   PinDetect mbed

Committer:
abraha2d
Date:
Tue Oct 09 00:34:03 2018 +0000
Revision:
0:bf289fbff1dd
Save point

Who changed what in which revision?

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