Code to detect hand movement for use in video game

Dependencies:   LSM9DS1_Library_cal XBee mbed

main.cpp

Committer:
jgensel3
Date:
2017-04-24
Revision:
0:fa587f2eec11

File content as of revision 0:fa587f2eec11:

#include "mbed.h"
#include "LSM9DS1.h"
#include "Wireless.h"
#define PI 3.14159
// Earth's magnetic field varies by location. Add or subtract
// a declination to get a more accurate heading. Calculate
// your's here:
// http://www.ngdc.noaa.gov/geomag-web/#declination
#define DECLINATION -4.94 // Declination (degrees) in Atlanta,GA.

DigitalOut myled(LED1);
Serial pc(USBTX, USBRX);
InterruptIn pb(p21);
InterruptIn pb2(p5);
WirelessModule wireless(p28, p27, HAND_GESTURE);

void pb_hit_interruptA() {
    pc.printf("pressed\n\r");
    wireless.sendDirection(A_BUTTON);
}
void pb_hit_interruptB(){
    wireless.sendDirection(B_BUTTON);
    pc.printf("pressedB\n\r");
}
int main()
{
    
    LSM9DS1 IMU(p9, p10, 0xD6, 0x3C);
    IMU.begin();
    if (!IMU.begin()) {
        pc.printf("Failed to communicate with LSM9DS1.\n");
    }
    IMU.calibrate(1);
    //IMU.calibrateMag(0);
    pb.mode(PullUp);
    pb2.mode(PullUp);
    wait(.01);
    pb.fall(&pb_hit_interruptA);
    pb2.fall(&pb_hit_interruptB);
    double inX,inY,inZ;
    int pos=0;
    while(1) {
        while(!IMU.accelAvailable()) {pos = 0;}
        IMU.readAccel();
                      
        inX = IMU.calcAccel(IMU.ax);
        inY = IMU.calcAccel(IMU.ay); 
        inZ = IMU.calcAccel(IMU.az);
        if (inY >= .5)
        {
            pc.printf("left\n\r");
            pos = 1;
            wireless.sendDirection(DIR_LEFT);
        }
        else if( inY <= -.5)
        {
            pc.printf("right\n\r");
            pos = 2;
            wireless.sendDirection(DIR_RIGHT);
        }
        else if (inX >= .5)
        {
            pc.printf("up\n\r");
            pos = 3;
            wireless.sendDirection(DIR_UP);
        }
        else if (inX <= -.5)
        {
            pc.printf("down\n\r");
            pos = 4;
            wireless.sendDirection(DIR_DOWN);
        }
        else
        {
            //pc.printf("error");
            pos = 0;
            wireless.sendDirection(DIR_NONE);
        }
        wait(0.5);
    }
}