arimouse that sortof works

Dependencies:   MMA8451Q USBDevice mbed tsi_sensor

Fork of FRDM_MMA8451Q by NXP

main.cpp

Committer:
tran426
Date:
2017-04-11
Revision:
10:333a613af098
Parent:
9:d4bffe27a7bf

File content as of revision 10:333a613af098:

/*
int main(void)
{
    
    PwmOut rled(LED1);
    PwmOut gled(LED2);
    PwmOut bled(LED3);

    printf("MMA8451 ID: %d\n", acc.getWhoAmI());

    while (true) {
        float x, y, z;
        x = abs(acc.getAccX());
        y = abs(acc.getAccY());
        z = abs(acc.getAccZ());
        rled = (1.0f - x)*2;
        gled = (1.0f - y)*2;
        bled = (1.0f - z)*2;
        wait(0.1f);
        
   //     printf("X: %1.2f, Y: %1.2f, Z: %1.2f\n", x, y, z);
    }
}

*/


 #include "mbed.h"
 #include "USBMouse.h"
 #include <math.h>
 #include "MMA8451Q.h"
 #include "tsi_sensor.h"
 
#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
  PinName const SDA = PTE25;
  PinName const SCL = PTE24;
#elif defined (TARGET_KL05Z)
  PinName const SDA = PTB4;
  PinName const SCL = PTB3;
#elif defined (TARGET_K20D50M)
  PinName const SDA = PTB1;
  PinName const SCL = PTB0;
#else
  #error TARGET NOT DEFINED
#endif

#define MMA8451_I2C_ADDRESS (0x1d<<1)
/* This defines will be replaced by PinNames soon */
#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
  #define ELEC0 9
  #define ELEC1 10
#elif defined (TARGET_KL05Z)
  #define ELEC0 9
  #define ELEC1 8
#else
  #error TARGET NOT DEFINED
#endif
 
 USBMouse mouse(ABS_MOUSE);
 
 int main(void)
 {
   int16_t x_center = (X_MAX_ABS - X_MIN_ABS)/2;
   int16_t y_center = (Y_MAX_ABS - Y_MIN_ABS)/2;

//   uint32_t x_origin = x_center;
//   uint32_t y_origin = y_center;
//   uint32_t radius = 5000;
//   uint32_t angle = 0;
 
    MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
    int16_t x_screen = 0;
    int16_t y_screen = 0;
 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
    static int16_t x_current = x_center;
    static int16_t y_current = y_center;
    int16_t scaling = 5000;
    float prevX=0U;
    float prevY=0U;
   while (1)
   {
    //     x_screen = x_origin + static_cast<int16_t>(10*x_screen);
   //    y_screen = y_origin + sin((double)angle*3.14/180.0)*radius;
        float currX=acc.getAccX();
        float currY=acc.getAccY();
        float diffY=prevY-currY;
        float diffX=prevX-currX;
        const float threshold = .08;
        if(diffY<threshold && diffY>-threshold){x_screen=0;}
        else{x_screen = -(scaling*(acc.getAccY()));}
        if(diffX<threshold && diffX>-threshold){y_screen=0;}
        else{y_screen =  (scaling*(acc.getAccX()));}
        prevX = currX;
        prevY = currY;
    //-.5f));
       //y_screen = (50*(acc.getAccX()));///-.5f));
        printf("DIFF_X: %f :: DIFF_Y: %f\t",diffX,diffY);
    
    //x_current =x_current+(x_screen%X_MAX_ABS);
    x_current+=x_screen;
    y_current+=y_screen;
    //x_current = x_screen%X_MAX_ABS + x_center;
    //y_current = y_screen%Y_MAX_ABS + y_center;
    //y_current =y_current+(y_screen%Y_MAX_ABS);
    //printf("X = %d   Y = %d   \n", x_current, y_current);
    printf("X = %f   Y = %f   Z = %f \n\r", acc.getAccX(), acc.getAccY(), acc.getAccZ());
    //wait(0.1f);
    mouse.move(x_current, y_current);
    float slider= tsi.readPercentage();
    if(slider>.05f && slider < .5f){mouse.click(MOUSE_RIGHT);}
    else if(slider>.5f){mouse.click(MOUSE_LEFT);} 
 //       mouse.move(static_cast<int16_t>(10*x_screen), static_cast<int16_t>(10*y_screen));
       //angle += 3;
       //wait(0.05);
   }
 }