4180 lab 1

Dependencies:   mbed MCP23S17 PinDetect USBDevice

Committer:
emilywilson
Date:
Wed Jan 22 13:08:48 2020 +0000
Revision:
12:cc5bda248946
Parent:
7:b7720a8623b5
mouse extra credit and power management extra credit

Who changed what in which revision?

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