![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ECE 4180 Lab 1 Part 5
Fork of USBMouse_NavSwitch by
Diff: main.cpp
- Revision:
- 5:679a07e00e4c
- Parent:
- 3:b8caa902d79e
--- a/main.cpp Fri Mar 01 13:26:13 2013 +0000 +++ b/main.cpp Mon Jun 26 17:27:42 2017 +0000 @@ -1,20 +1,85 @@ #include "mbed.h" #include "USBMouse.h" - +//USB mouse demo using a 5-way Navigation Switch (Digital Joystick) +//Needs USB connector breakout with D+, D-, and Gnd to mbed LLP1768 USBMouse mouse; -int main() { +class Nav_Switch +{ +public: + Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire); + int read(); +//boolean functions to test each switch + bool up(); + bool down(); + bool left(); + bool right(); + bool fire(); +//automatic read on RHS + operator int (); +//index to any switch array style + bool operator[](int index) { + return _pins[index]; + }; +private: + BusIn _pins; + +}; +Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire): + _pins(up, down, left, right, fire) +{ + _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise + wait(0.001); //delays just a bit for pullups to pull inputs high +} +inline bool Nav_Switch::up() +{ + return !(_pins[0]); +} +inline bool Nav_Switch::down() +{ + return !(_pins[1]); +} +inline bool Nav_Switch::left() +{ + return !(_pins[2]); +} +inline bool Nav_Switch::right() +{ + return !(_pins[3]); +} +inline bool Nav_Switch::fire() +{ + return !(_pins[4]); +} +inline int Nav_Switch::read() +{ + return _pins.read(); +} +inline Nav_Switch::operator int () +{ + return _pins.read(); +} + +Nav_Switch myNav( p9, p6, p7, p5, p8); //pin order on Sparkfun Nav SW breakout + +int main() +{ int16_t x = 0; int16_t y = 0; - int32_t radius = 10; - int32_t angle = 0; - + uint8_t left_click = 0; while (1) { - x = cos((double)angle*3.14/180.0)*radius; - y = sin((double)angle*3.14/180.0)*radius; - - mouse.move(x, y); - angle += 3; + //check relative mouse movement + x=0; + y=0; + if (myNav.up()) x=-1; + if (myNav.down()) x=1; + if (myNav.left()) y=1; + if (myNav.right()) y=-1; + //check mouse left button click + if (myNav.fire()) left_click = 1; + if (!myNav.fire())left_click = 0; + //send a mouse data packet to PC + mouse.update(x, y, left_click, 0); wait(0.001); } } \ No newline at end of file