ec

Dependencies:   USBDevice mbed

Fork of USBMouse_NavSwitch by jim hamblen

main.cpp

Committer:
Josahty
Date:
2018-01-22
Revision:
6:5032c1e1b3ce
Parent:
5:679a07e00e4c

File content as of revision 6:5032c1e1b3ce:

#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;
PwmOut myled(LED1);
AnalogIn mypotentiometer(p18);
Serial pc(USBTX, USBRX);

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()
{
    float pot_data = 0;
    float scroll_amount = 0;
    int16_t x = 0;
    int16_t y = 0;
    uint8_t left_click = 0;
    while (1) {
        //check relative mouse movement
        x=0;
        y=0;
        scroll_amount = 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
        myled = mypotentiometer;
        pot_data = mypotentiometer;
        
        if (pot_data < 0.25) {
            scroll_amount = -1; }
        else if (pot_data > 0.75) {
            scroll_amount = 1; }      
        
        pc.printf("%f \n\r",scroll_amount);
        mouse.update(x, y, left_click, scroll_amount);
        wait(0.001);
    }
}