arimouse that sortof works
Dependencies: MMA8451Q USBDevice mbed tsi_sensor
Fork of FRDM_MMA8451Q by
main.cpp@10:333a613af098, 2017-04-11 (annotated)
- Committer:
- tran426
- Date:
- Tue Apr 11 21:16:11 2017 +0000
- Revision:
- 10:333a613af098
- Parent:
- 9:d4bffe27a7bf
njbkjh
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tran426 | 10:333a613af098 | 1 | /* |
tran426 | 10:333a613af098 | 2 | int main(void) |
tran426 | 10:333a613af098 | 3 | { |
tran426 | 10:333a613af098 | 4 | |
tran426 | 10:333a613af098 | 5 | PwmOut rled(LED1); |
tran426 | 10:333a613af098 | 6 | PwmOut gled(LED2); |
tran426 | 10:333a613af098 | 7 | PwmOut bled(LED3); |
tran426 | 10:333a613af098 | 8 | |
tran426 | 10:333a613af098 | 9 | printf("MMA8451 ID: %d\n", acc.getWhoAmI()); |
chris | 2:41db78380a6e | 10 | |
tran426 | 10:333a613af098 | 11 | while (true) { |
tran426 | 10:333a613af098 | 12 | float x, y, z; |
tran426 | 10:333a613af098 | 13 | x = abs(acc.getAccX()); |
tran426 | 10:333a613af098 | 14 | y = abs(acc.getAccY()); |
tran426 | 10:333a613af098 | 15 | z = abs(acc.getAccZ()); |
tran426 | 10:333a613af098 | 16 | rled = (1.0f - x)*2; |
tran426 | 10:333a613af098 | 17 | gled = (1.0f - y)*2; |
tran426 | 10:333a613af098 | 18 | bled = (1.0f - z)*2; |
tran426 | 10:333a613af098 | 19 | wait(0.1f); |
tran426 | 10:333a613af098 | 20 | |
tran426 | 10:333a613af098 | 21 | // printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z); |
tran426 | 10:333a613af098 | 22 | } |
tran426 | 10:333a613af098 | 23 | } |
tran426 | 10:333a613af098 | 24 | |
tran426 | 10:333a613af098 | 25 | */ |
tran426 | 10:333a613af098 | 26 | |
tran426 | 10:333a613af098 | 27 | |
tran426 | 10:333a613af098 | 28 | #include "mbed.h" |
tran426 | 10:333a613af098 | 29 | #include "USBMouse.h" |
tran426 | 10:333a613af098 | 30 | #include <math.h> |
tran426 | 10:333a613af098 | 31 | #include "MMA8451Q.h" |
tran426 | 10:333a613af098 | 32 | #include "tsi_sensor.h" |
tran426 | 10:333a613af098 | 33 | |
sam_grove | 8:d797bfa9f76e | 34 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
sam_grove | 8:d797bfa9f76e | 35 | PinName const SDA = PTE25; |
sam_grove | 8:d797bfa9f76e | 36 | PinName const SCL = PTE24; |
sam_grove | 8:d797bfa9f76e | 37 | #elif defined (TARGET_KL05Z) |
sam_grove | 8:d797bfa9f76e | 38 | PinName const SDA = PTB4; |
sam_grove | 8:d797bfa9f76e | 39 | PinName const SCL = PTB3; |
sam_grove | 9:d4bffe27a7bf | 40 | #elif defined (TARGET_K20D50M) |
sam_grove | 9:d4bffe27a7bf | 41 | PinName const SDA = PTB1; |
sam_grove | 9:d4bffe27a7bf | 42 | PinName const SCL = PTB0; |
sam_grove | 8:d797bfa9f76e | 43 | #else |
sam_grove | 8:d797bfa9f76e | 44 | #error TARGET NOT DEFINED |
sam_grove | 8:d797bfa9f76e | 45 | #endif |
sam_grove | 8:d797bfa9f76e | 46 | |
chris | 2:41db78380a6e | 47 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
tran426 | 10:333a613af098 | 48 | /* This defines will be replaced by PinNames soon */ |
tran426 | 10:333a613af098 | 49 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
tran426 | 10:333a613af098 | 50 | #define ELEC0 9 |
tran426 | 10:333a613af098 | 51 | #define ELEC1 10 |
tran426 | 10:333a613af098 | 52 | #elif defined (TARGET_KL05Z) |
tran426 | 10:333a613af098 | 53 | #define ELEC0 9 |
tran426 | 10:333a613af098 | 54 | #define ELEC1 8 |
tran426 | 10:333a613af098 | 55 | #else |
tran426 | 10:333a613af098 | 56 | #error TARGET NOT DEFINED |
tran426 | 10:333a613af098 | 57 | #endif |
tran426 | 10:333a613af098 | 58 | |
tran426 | 10:333a613af098 | 59 | USBMouse mouse(ABS_MOUSE); |
tran426 | 10:333a613af098 | 60 | |
tran426 | 10:333a613af098 | 61 | int main(void) |
tran426 | 10:333a613af098 | 62 | { |
tran426 | 10:333a613af098 | 63 | int16_t x_center = (X_MAX_ABS - X_MIN_ABS)/2; |
tran426 | 10:333a613af098 | 64 | int16_t y_center = (Y_MAX_ABS - Y_MIN_ABS)/2; |
chris | 4:367de1084ea9 | 65 | |
tran426 | 10:333a613af098 | 66 | // uint32_t x_origin = x_center; |
tran426 | 10:333a613af098 | 67 | // uint32_t y_origin = y_center; |
tran426 | 10:333a613af098 | 68 | // uint32_t radius = 5000; |
tran426 | 10:333a613af098 | 69 | // uint32_t angle = 0; |
tran426 | 10:333a613af098 | 70 | |
tran426 | 10:333a613af098 | 71 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
tran426 | 10:333a613af098 | 72 | int16_t x_screen = 0; |
tran426 | 10:333a613af098 | 73 | int16_t y_screen = 0; |
tran426 | 10:333a613af098 | 74 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40); |
tran426 | 10:333a613af098 | 75 | static int16_t x_current = x_center; |
tran426 | 10:333a613af098 | 76 | static int16_t y_current = y_center; |
tran426 | 10:333a613af098 | 77 | int16_t scaling = 5000; |
tran426 | 10:333a613af098 | 78 | float prevX=0U; |
tran426 | 10:333a613af098 | 79 | float prevY=0U; |
tran426 | 10:333a613af098 | 80 | while (1) |
tran426 | 10:333a613af098 | 81 | { |
tran426 | 10:333a613af098 | 82 | // x_screen = x_origin + static_cast<int16_t>(10*x_screen); |
tran426 | 10:333a613af098 | 83 | // y_screen = y_origin + sin((double)angle*3.14/180.0)*radius; |
tran426 | 10:333a613af098 | 84 | float currX=acc.getAccX(); |
tran426 | 10:333a613af098 | 85 | float currY=acc.getAccY(); |
tran426 | 10:333a613af098 | 86 | float diffY=prevY-currY; |
tran426 | 10:333a613af098 | 87 | float diffX=prevX-currX; |
tran426 | 10:333a613af098 | 88 | const float threshold = .08; |
tran426 | 10:333a613af098 | 89 | if(diffY<threshold && diffY>-threshold){x_screen=0;} |
tran426 | 10:333a613af098 | 90 | else{x_screen = -(scaling*(acc.getAccY()));} |
tran426 | 10:333a613af098 | 91 | if(diffX<threshold && diffX>-threshold){y_screen=0;} |
tran426 | 10:333a613af098 | 92 | else{y_screen = (scaling*(acc.getAccX()));} |
tran426 | 10:333a613af098 | 93 | prevX = currX; |
tran426 | 10:333a613af098 | 94 | prevY = currY; |
tran426 | 10:333a613af098 | 95 | //-.5f)); |
tran426 | 10:333a613af098 | 96 | //y_screen = (50*(acc.getAccX()));///-.5f)); |
tran426 | 10:333a613af098 | 97 | printf("DIFF_X: %f :: DIFF_Y: %f\t",diffX,diffY); |
tran426 | 10:333a613af098 | 98 | |
tran426 | 10:333a613af098 | 99 | //x_current =x_current+(x_screen%X_MAX_ABS); |
tran426 | 10:333a613af098 | 100 | x_current+=x_screen; |
tran426 | 10:333a613af098 | 101 | y_current+=y_screen; |
tran426 | 10:333a613af098 | 102 | //x_current = x_screen%X_MAX_ABS + x_center; |
tran426 | 10:333a613af098 | 103 | //y_current = y_screen%Y_MAX_ABS + y_center; |
tran426 | 10:333a613af098 | 104 | //y_current =y_current+(y_screen%Y_MAX_ABS); |
tran426 | 10:333a613af098 | 105 | //printf("X = %d Y = %d \n", x_current, y_current); |
tran426 | 10:333a613af098 | 106 | printf("X = %f Y = %f Z = %f \n\r", acc.getAccX(), acc.getAccY(), acc.getAccZ()); |
tran426 | 10:333a613af098 | 107 | //wait(0.1f); |
tran426 | 10:333a613af098 | 108 | mouse.move(x_current, y_current); |
tran426 | 10:333a613af098 | 109 | float slider= tsi.readPercentage(); |
tran426 | 10:333a613af098 | 110 | if(slider>.05f && slider < .5f){mouse.click(MOUSE_RIGHT);} |
tran426 | 10:333a613af098 | 111 | else if(slider>.5f){mouse.click(MOUSE_LEFT);} |
tran426 | 10:333a613af098 | 112 | // mouse.move(static_cast<int16_t>(10*x_screen), static_cast<int16_t>(10*y_screen)); |
tran426 | 10:333a613af098 | 113 | //angle += 3; |
tran426 | 10:333a613af098 | 114 | //wait(0.05); |
tran426 | 10:333a613af098 | 115 | } |
tran426 | 10:333a613af098 | 116 | } |
tran426 | 10:333a613af098 | 117 |