USB mouse example for KL25 Freedom board.
Dependencies: MMA8451Q TSI USBDevice mbed
main.cpp@0:fa851c29384b, 2013-07-30 (annotated)
- Committer:
- PavelM
- Date:
- Tue Jul 30 12:26:10 2013 +0000
- Revision:
- 0:fa851c29384b
Beta version of USB mouse for FRDMkl25.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
PavelM | 0:fa851c29384b | 1 | #include "mbed.h" |
PavelM | 0:fa851c29384b | 2 | #include "MMA8451Q.h" |
PavelM | 0:fa851c29384b | 3 | #include "USBMouse.h" |
PavelM | 0:fa851c29384b | 4 | #include "TSISensor.h" |
PavelM | 0:fa851c29384b | 5 | |
PavelM | 0:fa851c29384b | 6 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
PavelM | 0:fa851c29384b | 7 | |
PavelM | 0:fa851c29384b | 8 | #define DEBUGCONSOLE 1 /* 9600bd serial to OpenSWD COM port */ |
PavelM | 0:fa851c29384b | 9 | |
PavelM | 0:fa851c29384b | 10 | USBMouse mouse; |
PavelM | 0:fa851c29384b | 11 | Serial pc(USBTX,USBRX); |
PavelM | 0:fa851c29384b | 12 | |
PavelM | 0:fa851c29384b | 13 | void mbutton_detect( float percent) |
PavelM | 0:fa851c29384b | 14 | { |
PavelM | 0:fa851c29384b | 15 | #define LBTN_MIN 75 |
PavelM | 0:fa851c29384b | 16 | #define LBTN_MAX 100 |
PavelM | 0:fa851c29384b | 17 | #define RBTN_MIN 1 |
PavelM | 0:fa851c29384b | 18 | #define RBTN_MAX 30 |
PavelM | 0:fa851c29384b | 19 | #define DBL_MIN 35 |
PavelM | 0:fa851c29384b | 20 | #define DBL_MAX 70 |
PavelM | 0:fa851c29384b | 21 | |
PavelM | 0:fa851c29384b | 22 | int pos = percent * 100; |
PavelM | 0:fa851c29384b | 23 | static bool ltouchflg = false; |
PavelM | 0:fa851c29384b | 24 | static bool rtouchflg = false; |
PavelM | 0:fa851c29384b | 25 | |
PavelM | 0:fa851c29384b | 26 | /* left button */ |
PavelM | 0:fa851c29384b | 27 | if((pos >= DBL_MIN)) |
PavelM | 0:fa851c29384b | 28 | { |
PavelM | 0:fa851c29384b | 29 | if( ltouchflg == false ) |
PavelM | 0:fa851c29384b | 30 | { |
PavelM | 0:fa851c29384b | 31 | mouse.press(MOUSE_LEFT); |
PavelM | 0:fa851c29384b | 32 | ltouchflg = true; |
PavelM | 0:fa851c29384b | 33 | #if DEBUGCONSOLE |
PavelM | 0:fa851c29384b | 34 | pc.printf("ltouch \n"); |
PavelM | 0:fa851c29384b | 35 | #endif |
PavelM | 0:fa851c29384b | 36 | } |
PavelM | 0:fa851c29384b | 37 | } |
PavelM | 0:fa851c29384b | 38 | |
PavelM | 0:fa851c29384b | 39 | /* right button */ |
PavelM | 0:fa851c29384b | 40 | if((pos <= DBL_MAX) && (pos > RBTN_MIN)) |
PavelM | 0:fa851c29384b | 41 | { |
PavelM | 0:fa851c29384b | 42 | if( rtouchflg == false ) |
PavelM | 0:fa851c29384b | 43 | { |
PavelM | 0:fa851c29384b | 44 | mouse.press(MOUSE_RIGHT); |
PavelM | 0:fa851c29384b | 45 | rtouchflg = true; |
PavelM | 0:fa851c29384b | 46 | #if DEBUGCONSOLE |
PavelM | 0:fa851c29384b | 47 | pc.printf("rtouch \n"); |
PavelM | 0:fa851c29384b | 48 | #endif |
PavelM | 0:fa851c29384b | 49 | } |
PavelM | 0:fa851c29384b | 50 | } |
PavelM | 0:fa851c29384b | 51 | |
PavelM | 0:fa851c29384b | 52 | /* release left */ |
PavelM | 0:fa851c29384b | 53 | if( (pos < DBL_MIN)) |
PavelM | 0:fa851c29384b | 54 | { |
PavelM | 0:fa851c29384b | 55 | if( ltouchflg == true ) |
PavelM | 0:fa851c29384b | 56 | { |
PavelM | 0:fa851c29384b | 57 | mouse.release(MOUSE_LEFT); |
PavelM | 0:fa851c29384b | 58 | ltouchflg = false; |
PavelM | 0:fa851c29384b | 59 | #if DEBUGCONSOLE |
PavelM | 0:fa851c29384b | 60 | pc.printf("lrelease \n"); |
PavelM | 0:fa851c29384b | 61 | #endif |
PavelM | 0:fa851c29384b | 62 | } |
PavelM | 0:fa851c29384b | 63 | } |
PavelM | 0:fa851c29384b | 64 | |
PavelM | 0:fa851c29384b | 65 | /* release right */ |
PavelM | 0:fa851c29384b | 66 | if( (pos < RBTN_MIN) || (pos >= DBL_MAX) ) |
PavelM | 0:fa851c29384b | 67 | { |
PavelM | 0:fa851c29384b | 68 | if( rtouchflg == true ) |
PavelM | 0:fa851c29384b | 69 | { |
PavelM | 0:fa851c29384b | 70 | mouse.release(MOUSE_RIGHT); |
PavelM | 0:fa851c29384b | 71 | rtouchflg = false; |
PavelM | 0:fa851c29384b | 72 | #if DEBUGCONSOLE |
PavelM | 0:fa851c29384b | 73 | pc.printf("rrelease \n"); |
PavelM | 0:fa851c29384b | 74 | #endif |
PavelM | 0:fa851c29384b | 75 | } |
PavelM | 0:fa851c29384b | 76 | } |
PavelM | 0:fa851c29384b | 77 | } |
PavelM | 0:fa851c29384b | 78 | |
PavelM | 0:fa851c29384b | 79 | |
PavelM | 0:fa851c29384b | 80 | int main(void) { |
PavelM | 0:fa851c29384b | 81 | |
PavelM | 0:fa851c29384b | 82 | /* acc sensor init */ |
PavelM | 0:fa851c29384b | 83 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
PavelM | 0:fa851c29384b | 84 | |
PavelM | 0:fa851c29384b | 85 | /* TSI init */ |
PavelM | 0:fa851c29384b | 86 | TSISensor tsi; |
PavelM | 0:fa851c29384b | 87 | |
PavelM | 0:fa851c29384b | 88 | /* LED init */ |
PavelM | 0:fa851c29384b | 89 | PwmOut rled(LED_RED); |
PavelM | 0:fa851c29384b | 90 | PwmOut gled(LED_GREEN); |
PavelM | 0:fa851c29384b | 91 | PwmOut bled(LED_BLUE); |
PavelM | 0:fa851c29384b | 92 | |
PavelM | 0:fa851c29384b | 93 | while (true) { |
PavelM | 0:fa851c29384b | 94 | |
PavelM | 0:fa851c29384b | 95 | /* -1*accY correspond to mouse axe X; acc X correspond to mouse Y */ |
PavelM | 0:fa851c29384b | 96 | mouse.move( -1*int(acc.getAccY()*20), int(acc.getAccX()*20) ); |
PavelM | 0:fa851c29384b | 97 | |
PavelM | 0:fa851c29384b | 98 | mbutton_detect( tsi.readPercentage()); |
PavelM | 0:fa851c29384b | 99 | |
PavelM | 0:fa851c29384b | 100 | rled = 1.0 - abs(acc.getAccX()); |
PavelM | 0:fa851c29384b | 101 | gled = 1.0 - abs(acc.getAccY()); |
PavelM | 0:fa851c29384b | 102 | bled = 1.0 - abs(acc.getAccZ()); |
PavelM | 0:fa851c29384b | 103 | |
PavelM | 0:fa851c29384b | 104 | wait(0.001); |
PavelM | 0:fa851c29384b | 105 | } |
PavelM | 0:fa851c29384b | 106 | } |
PavelM | 0:fa851c29384b | 107 |