4180 lab 1

Dependencies:   mbed MCP23S17 PinDetect USBDevice

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilywilson 12:cc5bda248946 1 #include "mbed.h"
emilywilson 12:cc5bda248946 2 #include "USBMouse.h"
emilywilson 12:cc5bda248946 3 //USB mouse demo using a 5-way Navigation Switch (Digital Joystick)
emilywilson 12:cc5bda248946 4 //Needs USB connector breakout with D+, D-, and Gnd to mbed LLP1768
emilywilson 12:cc5bda248946 5 USBMouse mouse;
emilywilson 12:cc5bda248946 6
emilywilson 12:cc5bda248946 7 class Nav_Switch
emilywilson 12:cc5bda248946 8 {
emilywilson 12:cc5bda248946 9 public:
emilywilson 12:cc5bda248946 10 Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire);
emilywilson 12:cc5bda248946 11 int read();
emilywilson 12:cc5bda248946 12 //boolean functions to test each switch
emilywilson 12:cc5bda248946 13 bool up();
emilywilson 12:cc5bda248946 14 bool down();
emilywilson 12:cc5bda248946 15 bool left();
emilywilson 12:cc5bda248946 16 bool right();
emilywilson 12:cc5bda248946 17 bool fire();
emilywilson 12:cc5bda248946 18 //automatic read on RHS
emilywilson 12:cc5bda248946 19 operator int ();
emilywilson 12:cc5bda248946 20 //index to any switch array style
emilywilson 12:cc5bda248946 21 bool operator[](int index) {
emilywilson 12:cc5bda248946 22 return _pins[index];
emilywilson 12:cc5bda248946 23 };
emilywilson 12:cc5bda248946 24 private:
emilywilson 12:cc5bda248946 25 BusIn _pins;
emilywilson 12:cc5bda248946 26
emilywilson 12:cc5bda248946 27 };
emilywilson 12:cc5bda248946 28 Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire):
emilywilson 12:cc5bda248946 29 _pins(up, down, left, right, fire)
emilywilson 12:cc5bda248946 30 {
emilywilson 12:cc5bda248946 31 _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise
emilywilson 12:cc5bda248946 32 wait(0.001); //delays just a bit for pullups to pull inputs high
emilywilson 12:cc5bda248946 33 }
emilywilson 12:cc5bda248946 34 inline bool Nav_Switch::up()
emilywilson 12:cc5bda248946 35 {
emilywilson 12:cc5bda248946 36 return !(_pins[0]);
emilywilson 12:cc5bda248946 37 }
emilywilson 12:cc5bda248946 38 inline bool Nav_Switch::down()
emilywilson 12:cc5bda248946 39 {
emilywilson 12:cc5bda248946 40 return !(_pins[1]);
emilywilson 12:cc5bda248946 41 }
emilywilson 12:cc5bda248946 42 inline bool Nav_Switch::left()
emilywilson 12:cc5bda248946 43 {
emilywilson 12:cc5bda248946 44 return !(_pins[2]);
emilywilson 12:cc5bda248946 45 }
emilywilson 12:cc5bda248946 46 inline bool Nav_Switch::right()
emilywilson 12:cc5bda248946 47 {
emilywilson 12:cc5bda248946 48 return !(_pins[3]);
emilywilson 12:cc5bda248946 49 }
emilywilson 12:cc5bda248946 50 inline bool Nav_Switch::fire()
emilywilson 12:cc5bda248946 51 {
emilywilson 12:cc5bda248946 52 return !(_pins[4]);
emilywilson 12:cc5bda248946 53 }
emilywilson 12:cc5bda248946 54 inline int Nav_Switch::read()
emilywilson 12:cc5bda248946 55 {
emilywilson 12:cc5bda248946 56 return _pins.read();
emilywilson 12:cc5bda248946 57 }
emilywilson 12:cc5bda248946 58 inline Nav_Switch::operator int ()
emilywilson 12:cc5bda248946 59 {
emilywilson 12:cc5bda248946 60 return _pins.read();
emilywilson 12:cc5bda248946 61 }
emilywilson 12:cc5bda248946 62
emilywilson 12:cc5bda248946 63 Nav_Switch myNav( p9, p6, p7, p5, p8); //pin order on Sparkfun Nav SW breakout
emilywilson 12:cc5bda248946 64
emilywilson 12:cc5bda248946 65 AnalogIn pot(p20);
emilywilson 12:cc5bda248946 66 int potPrev = 0;
emilywilson 12:cc5bda248946 67
emilywilson 12:cc5bda248946 68 int run_mouseEC()
emilywilson 12:cc5bda248946 69 {
emilywilson 12:cc5bda248946 70 int16_t x = 0;
emilywilson 12:cc5bda248946 71 int16_t y = 0;
emilywilson 12:cc5bda248946 72 uint8_t left_click = 0;
emilywilson 12:cc5bda248946 73 int relPot = 0;
emilywilson 12:cc5bda248946 74 while (1) {
emilywilson 12:cc5bda248946 75 //check relative mouse movement
emilywilson 12:cc5bda248946 76 x=0;
emilywilson 12:cc5bda248946 77 y=0;
emilywilson 12:cc5bda248946 78 if (myNav.up()) x=-1;
emilywilson 12:cc5bda248946 79 if (myNav.down()) x=1;
emilywilson 12:cc5bda248946 80 if (myNav.left()) y=1;
emilywilson 12:cc5bda248946 81 if (myNav.right()) y=-1;
emilywilson 12:cc5bda248946 82 //check mouse left button click
emilywilson 12:cc5bda248946 83 if (myNav.fire()) left_click = 1;
emilywilson 12:cc5bda248946 84 if (!myNav.fire())left_click = 0;
emilywilson 12:cc5bda248946 85
emilywilson 12:cc5bda248946 86 if (potPrev < pot) {
emilywilson 12:cc5bda248946 87 relPot = 1;
emilywilson 12:cc5bda248946 88 } else if (potPrev > pot) {
emilywilson 12:cc5bda248946 89 relPot = -1;
emilywilson 12:cc5bda248946 90 } else {
emilywilson 12:cc5bda248946 91 relPot = 0;
emilywilson 12:cc5bda248946 92 }
emilywilson 12:cc5bda248946 93 potPrev = pot;
emilywilson 12:cc5bda248946 94 //send a mouse data packet to PC
emilywilson 12:cc5bda248946 95 mouse.update(x, y, left_click, relPot);
emilywilson 12:cc5bda248946 96 wait(0.001);
emilywilson 12:cc5bda248946 97 }
emilywilson 12:cc5bda248946 98 }