USB mouse example for KL25 Freedom board.

Dependencies:   MMA8451Q TSI USBDevice mbed

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?

UserRevisionLine numberNew 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