simple game using 2 mbed devices

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed LSM9DS0

player2/main.cpp

Committer:
bfoley13
Date:
2015-10-20
Revision:
0:8016d44e8294

File content as of revision 0:8016d44e8294:

#include "rtos.h"
#include "mbed.h"
#include <math.h>
#include "LSM9DS0.h"
#include "SongPlayer.h"

SongPlayer mySpeaker(p26);
AnalogIn aIn(p20);
AnalogOut aOut(p18);

DigitalOut left(p21);
DigitalOut right(p22);
DigitalOut up(p23);
DigitalOut down(p24);
DigitalOut center(p25);

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

// SDO_XM and SDO_G are pulled up, so our addresses are:
#define LSM9DS0_XM_ADDR  0x1D // Would be 0x1E if SDO_XM is LOW
#define LSM9DS0_G_ADDR   0x6B // Would be 0x6A if SDO_G is LOW

// refresh time. set to 500 for part 2 and 50 for part 4
#define REFRESH_TIME_MS 500

// Verify that the pin assignments below match your breadboard
LSM9DS0 imu(p9, p10, LSM9DS0_G_ADDR, LSM9DS0_XM_ADDR);


Serial pc(USBTX, USBRX);
float note[18]= {1568.0,1396.9,1244.5,1244.5,1396.9,1568.0,1568.0,1568.0,1396.9,
                 1244.5,1396.9,1568.0,1396.9,1244.5,1174.7,1244.5,1244.5, 0.0
                };
float duration[18]= {0.48,0.24,0.72,0.48,0.24,0.48,0.24,0.24,0.24,
                     0.24,0.24,0.24,0.24,0.48,0.24,0.48,0.48, 0.0
                    };

void setup()
{
    //pc.baud(115200);

    // Use the begin() function to initialize the LSM9DS0 library.
    // You can either call it with no parameters (the easy way):
    uint16_t status = imu.begin();

    //Make sure communication is working
    pc.printf("LSM9DS0 WHO_AM_I's returned: 0x%X\n", status);
    pc.printf("Should be 0x49D4\n\n");
}

void playInputSig(void const *args) {
    float testVal = aIn;
    float testNote = 1333.3;
    while(1) {
        //aOut.write(0.0);
        testVal = aIn.read();
        mySpeaker.PlaySong(&testNote, &testVal);
        wait(testVal * 10);
    }    
}

void readData() {
    // To read from the device, you must first call the
    // readMag(), readAccel(), and readGyro() functions.
    // When this exits, it'll update the appropriate
    // variables ([mx, my, mz], [ax, ay, az], [gx, gy, gz])
    // with the most current data.
 
    imu.readMag();
    imu.readAccel();
    imu.readGyro();
}

int main() {
    aOut = 0.0;
    Thread t1(playInputSig);

    imu.begin();
    float testVal = 0;
    
    while(1){
        readData();
        if(imu.gx < testVal) {
            left = 0;
            right = 1;
            led1 = 1;
            led2 = 0;
            center = 1; 
        } else if(imu.gx > testVal) {
            left = 1;
            right = 0;
            led1 = 0;
            led2 = 1;
            center = 1;   
        }
        if(imu.gy < testVal) {
            down = 0;
            up = 1;
            led3 = 1;
            led4 = 0;
        } else if(imu.gy > testVal) {
            down = 1;
            up = 0;
            led3 = 0;
            led4 = 1;     
        }
        if((led1 | led2 | led3 | led4) == 0){
            led1 = 1;
            led2 = 1;
            led3 = 1;
            led4 = 1;
            center = 0; 
        }
        
    }

}