arimouse that sortof works

Dependencies:   MMA8451Q USBDevice mbed tsi_sensor

Fork of FRDM_MMA8451Q by NXP

Committer:
tran426
Date:
Tue Apr 11 21:16:11 2017 +0000
Revision:
10:333a613af098
Parent:
9:d4bffe27a7bf
njbkjh

Who changed what in which revision?

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