4180 lab 1
Dependencies: mbed MCP23S17 PinDetect USBDevice
mouse_EC.h@12:cc5bda248946, 2020-01-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |