This my big project for PYRN Board
Dependencies: CAN HTTPClient MODSERIAL MyThings Pyrn3GModem Socket TinyGPS MyUSBHost lwip-sys lwip mbed-rtos mbed-src
IMUSensor.cpp
- Committer:
- clemounet
- Date:
- 2015-04-14
- Revision:
- 0:efe6085327fd
File content as of revision 0:efe6085327fd:
#define __DEBUG__ 0 #ifndef __MODULE__ #define __MODULE__ "IMUSensor.cpp" #endif #include "MyDebug.h" #include "IMUSensor.h" #define IMU_THREAD_STACK_SIZE 512 IMUSensor::IMUSensor(PinName sda, PinName scl, uint32_t idle): MySensor(SENSOR_NAME_IMU, SENSOR_TYPE_IMU, idle, IMU_THREAD_STACK_SIZE), Accelerometer(sda,scl){ InitResults(SENSOR_RESSZ_DEFAULT); } void IMUSensor::InitResultsStatic(void) { DBG("InitResultStatic have been defined"); results.start = (uint8_t*)store; results.current = (uint8_t*)store; results.max = sizeof(store); //IMU_STORE_SIZE*sizeof(uint16_t); } void IMUSensor::Loop(void) { // Do the reading float lax,lay,laz,lmx,lmy,lmz; // Locals Accelerometer.readAcc(&lax,&lay,&laz); Accelerometer.readMag(&lmx,&lmy,&lmz); //DBG("[%+.4f,%+.4f,%+.4f] - [%+.4f,%+.4f,%+.4f]", lax,lay,laz,lmx,lmy,lmz); // Do the conversion to the impact struct impact.ax = (int16_t) (lax * 1000); impact.ay = (int16_t) (lay * 1000); impact.az = (int16_t) (laz * 1000); impact.mx = (int16_t) (lmx * 1000); impact.my = (int16_t) (lmy * 1000); impact.mz = (int16_t) (lmz * 1000); // Print result if debug is activated INFO("[%+05d,%+05d,%+05d] - [%+05d,%+05d,%+05d]", impact.ax, impact.ay, impact.az, impact.mx, impact.my, impact.mz); } void IMUSensor::StoreLastImpact(void) { if((results.max - results.num)>=sizeof(imuImpact)){ if(resultsMutex.trylock()) { memcpy((char*)results.current,(const char*)&impact,sizeof(imuImpact)); results.current += sizeof(imuImpact); results.num += sizeof(imuImpact); //DBG("%p %d %d",results.current,results.num,sizeof(imuImpact)); resultsMutex.unlock(); } } else WARN("No Space to Store results... Data will be overwrited at next Loop"); }