A game for Lab 4 of ECE 4180

Dependencies:   4DGL-uLCD-SE LSM9DS1_Library SDFileSystem mbed-rtos mbed wave_player

Committer:
Dogstopper
Date:
Thu Mar 10 20:10:35 2016 +0000
Revision:
0:6a49493943be
Child:
1:61b8141da36e
Child:
2:623f29bad35c
Initial;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dogstopper 0:6a49493943be 1 #include "InputHandler.h"
Dogstopper 0:6a49493943be 2
Dogstopper 0:6a49493943be 3 #define START_THREAD 1
Dogstopper 0:6a49493943be 4
Dogstopper 0:6a49493943be 5 InputHandler::InputHandler(PinName sda, PinName scl, uint8_t xgAddr, uint8_t mAddr, PinName digitalIn)
Dogstopper 0:6a49493943be 6 :thread(&InputHandler::threadStarter, this, osPriorityNormal,1024),
Dogstopper 0:6a49493943be 7 imu(sda, scl, xgAddr, mAddr),
Dogstopper 0:6a49493943be 8 pushButton(digitalIn, PullUp)
Dogstopper 0:6a49493943be 9 {
Dogstopper 0:6a49493943be 10 imu.begin();
Dogstopper 0:6a49493943be 11 // imu.calibrate(1);
Dogstopper 0:6a49493943be 12 }
Dogstopper 0:6a49493943be 13
Dogstopper 0:6a49493943be 14 void InputHandler::start() {
Dogstopper 0:6a49493943be 15 thread.signal_set(START_THREAD);
Dogstopper 0:6a49493943be 16 }
Dogstopper 0:6a49493943be 17
Dogstopper 0:6a49493943be 18 float InputHandler::getXAccel() {
Dogstopper 0:6a49493943be 19 stdio_mutex.lock();
Dogstopper 0:6a49493943be 20 float temp = xAccel;
Dogstopper 0:6a49493943be 21 stdio_mutex.unlock();
Dogstopper 0:6a49493943be 22 return temp;
Dogstopper 0:6a49493943be 23 }
Dogstopper 0:6a49493943be 24
Dogstopper 0:6a49493943be 25 float InputHandler::getYAccel() {
Dogstopper 0:6a49493943be 26 stdio_mutex.lock();
Dogstopper 0:6a49493943be 27 float temp = (yAccel);// + 1.0) / 2.0;
Dogstopper 0:6a49493943be 28 stdio_mutex.unlock();
Dogstopper 0:6a49493943be 29 return temp;
Dogstopper 0:6a49493943be 30 }
Dogstopper 0:6a49493943be 31
Dogstopper 0:6a49493943be 32 float InputHandler::getZAccel() {
Dogstopper 0:6a49493943be 33 stdio_mutex.lock();
Dogstopper 0:6a49493943be 34 float temp = (zAccel);// + 1.0) / 2.0;
Dogstopper 0:6a49493943be 35 stdio_mutex.unlock();
Dogstopper 0:6a49493943be 36 return temp;
Dogstopper 0:6a49493943be 37 }
Dogstopper 0:6a49493943be 38
Dogstopper 0:6a49493943be 39 bool InputHandler::getPushed() {
Dogstopper 0:6a49493943be 40 stdio_mutex.lock();
Dogstopper 0:6a49493943be 41 float temp = isPushed;
Dogstopper 0:6a49493943be 42 stdio_mutex.unlock();
Dogstopper 0:6a49493943be 43 return temp;
Dogstopper 0:6a49493943be 44 }
Dogstopper 0:6a49493943be 45
Dogstopper 0:6a49493943be 46 void InputHandler::threadStarter(void const *p) {
Dogstopper 0:6a49493943be 47 InputHandler *instance = (InputHandler*)p;
Dogstopper 0:6a49493943be 48 instance->retrieveInputs();
Dogstopper 0:6a49493943be 49 }
Dogstopper 0:6a49493943be 50
Dogstopper 0:6a49493943be 51 void InputHandler::retrieveInputs() {
Dogstopper 0:6a49493943be 52 thread.signal_wait(START_THREAD);
Dogstopper 0:6a49493943be 53
Dogstopper 0:6a49493943be 54 while(true) {
Dogstopper 0:6a49493943be 55 imu.readAccel();
Dogstopper 0:6a49493943be 56
Dogstopper 0:6a49493943be 57 stdio_mutex.lock();
Dogstopper 0:6a49493943be 58 xAccel = -imu.calcAccel(imu.ax);
Dogstopper 0:6a49493943be 59 yAccel = -imu.calcAccel(imu.ay);
Dogstopper 0:6a49493943be 60 zAccel = -imu.calcAccel(imu.az);
Dogstopper 0:6a49493943be 61 isPushed = pushButton.read() == 0;
Dogstopper 0:6a49493943be 62 //printf("xAccel: %.6f\n\ryAccel: %.6f\n\risPushed: %s", xAccel, yAccel, isPushed ? "true" : "false");
Dogstopper 0:6a49493943be 63 stdio_mutex.unlock();
Dogstopper 0:6a49493943be 64
Dogstopper 0:6a49493943be 65 Thread::wait(20); // ~60Hz
Dogstopper 0:6a49493943be 66 }
Dogstopper 0:6a49493943be 67 }