Submitted by Angela Hsueh, Maya Mardini, Yi Tong Slingshot controller using a force sensor and accelerometer for an Angry Birds clone game.

Dependencies:   LSM303DLHC MMA8451Q PinDetect USBDevice mbed

Fork of hw3_controller by HW3 Controller Team!

mouseCtrl.cpp

Committer:
ahsueh
Date:
2015-09-21
Revision:
6:753418e86c95
Child:
7:689f891d62cd

File content as of revision 6:753418e86c95:

/*
#include "mbed.h"
//#include "MMA8451Q.h"
//#include "USBMouse.h"
//#include "USBKeyboard.h"
#include "USBMouseKeyboard.h"
#include "LSM303DLHC.h"
#include "PinDetect.h"
#include "math.h"

// define I2C Pins and address for KL25Z. Taken from default sample code.
PinName const SDA = D14;
PinName const SCL = D15;
PinDetect button(D2);
AnalogIn fsr(A5);
#define MMA8451_I2C_ADDRESS (0x1d<<1)

//serial connection to PC via USB
Serial pc(USBTX, USBRX);
LSM303DLHC lsm(SDA, SCL);
USBMouseKeyboard mouseKey;


float FsrVal;
float FsrValPrev;
int count;
// acc and mag values
float ax, ay, az,mx, my, mz;
float theta;

int main(void){
    while(1){
        FsrVal = fsr.read();
        FsrValPrev=0.1;
        lsm.read(&ax, &ay, &az, &mx, &my, &mz); //get acceleration
        theta = atan (abs(ay)/abs(az));
        if((FsrVal > FsrValPrev && FsrVal > 0 && FsrValPrev > 0 && count <100) || (FsrVal > 0.8 && count <70)){
            // lower left
            if(ay>0 && az>0){
                mouseKey.printf("forward + downward \n");
                mouseKey.printf("y %1.2f z %1.2f ",ay, az);
                mouseKey.printf("theta1 %1.2f\n",theta);
                mouseKey.printf("vertical %1.2f\n\n",-(floor)(sin(theta)*5));
                mouseKey.move(1,-(floor)(sin(theta)*5));  
            }
            // upper left
            if(ay<0 && az>0){
                mouseKey.printf("forward + upward \n");

                mouseKey.printf("y %1.2f z %1.2f ",ay, az);
                mouseKey.printf("theta2 %1.2f\n",theta);
                mouseKey.printf("vertica2 %1.2f\n\n",(floor)(sin(theta)*5));
                mouseKey.move(1,(floor)(sin(theta)*5));
            }
          mouseKey.move(1,0);
          FsrValPrev = fsr.read();
          count++;  
            }
        else if((FsrVal < FsrValPrev && count >0) || (FsrVal < 0.2 && count >0)){
            // lower left
            if(ay>0 && az>0){
                mouseKey.printf("backward + downward \n");

                mouseKey.printf("y %1.2f z %1.2f ",ay, az);
                mouseKey.printf("theta1 %1.2f\n",theta);
                mouseKey.printf("vertical1 %1.2f\n\n",-(floor)(sin(theta)*5));
                mouseKey.move(-2,-(floor)(sin(theta)*5));
            }
            // upper left
            if(ay<0 && az>0){
                mouseKey.printf("backward + upward \n");
                mouseKey.printf("y %1.2f z %1.2f ",ay, az);
                mouseKey.printf("theta2 %1.2f\n",theta);
                mouseKey.printf("vertical2 %1.2f\n\n",(floor)(sin(theta)*5));
                mouseKey.move(-2,(floor)(sin(theta)*5));
            }
            mouseKey.move(-2,0);
            FsrValPrev = fsr.read();
            count=count-3;      
        }
        wait(0.02);
        }
    }
    */