Emily Wilson / Mbed 2 deprecated ECE4180Lab1

Dependencies:   mbed MCP23S17 PinDetect USBDevice

Committer:
emilywilson
Date:
Wed Jan 15 19:58:39 2020 +0000
Revision:
5:d1ad3a964858
part 4;

Who changed what in which revision?

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