![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Driving
Dependencies: FSR LIS3DH USBDevice mbed
Fork of MMA8452_Demo by
main.cpp
- Committer:
- ashleymills
- Date:
- 2014-03-04
- Revision:
- 0:0c17274c3b7c
- Child:
- 1:e9981919b524
File content as of revision 0:0c17274c3b7c:
#include "mbed.h" #include "MMA8452.h" DigitalOut myled(LED1); Serial pc(USBTX,USBRX); #define LOG(...) pc.printf(__VA_ARGS__); pc.printf("\r\n"); #define LOGX(...) pc.printf(__VA_ARGS__); void printByte(char b) { LOG("%d%d%d%d%d%d%d%d", (b&0x80)>>7, (b&0x40)>>6, (b&0x20)>>5, (b&0x10)>>4, (b&0x08)>>3, (b&0x04)>>2, (b&0x02)>>1, (b&0x01) ); } void sampleMMA8452(MMA8452 *acc, int nsamples) { int samples = 0; int bufLen = 6; char buffer[6]; memset(&buffer,0x00,bufLen); while(samples<nsamples) { if(!acc->isXYZReady()) { wait(0.01); continue; } memset(&buffer,0x00,bufLen); acc->readRawXYZ(buffer); LOGX("Sample %d of %d: ",samples,nsamples); for(int i=0; i<bufLen; i++) { LOGX("%.2x ",buffer[i]); } LOG(" "); samples++; } } int test() { MMA8452 acc(p28, p27, 40000); acc.debugRegister(MMA8452_CTRL_REG_1); LOG("Entering standby"); if(acc.standby()) { LOG("Error putting MMA8452 in standby"); return false; } acc.debugRegister(MMA8452_CTRL_REG_1); LOG("Activating MMA8452"); if(acc.activate()) { LOG("Error activating MMA8452"); return false; } // test setting dynamic range MMA8452::DynamicRange setRange = MMA8452::DYNAMIC_RANGE_UNKNOWN; MMA8452::DynamicRange readRange = MMA8452::DYNAMIC_RANGE_UNKNOWN; for(int i=0; i<=(int)MMA8452::DYNAMIC_RANGE_8G; i++) { setRange = (MMA8452::DynamicRange)i; if(acc.setDynamicRange(setRange)) { LOG("Error setting dynamic range. Failing."); return false; } readRange = acc.getDynamicRange(); if(readRange!=setRange) { LOG("Read dynamic range: 0x%x does not match set: 0x%x",readRange,setRange); return false; } LOG("Success on dynamic range %d",i); } // test setting data rate for(int i=0; i<=(int)MMA8452::RATE_1_563; i++) { if(acc.setDataRate((MMA8452::DataRateHz)i)) { LOG("Error setting data rate. Failing."); return false; } if(acc.getDataRate()!=(MMA8452::DataRateHz)i) { LOG("Read data rate: 0x%x does not match set: 0x%x",acc.getDataRate(),(MMA8452::DataRateHz)i); return false; } LOG("Success on data rate %d",i); } // set bit depth to 8 and read some values LOG("Sampling at BIT_DEPTH_8"); acc.setBitDepth(MMA8452::BIT_DEPTH_8); sampleMMA8452(&acc,10); // set bit depth to 12 and read some values LOG("Sampling at BIT_DEPTH_12"); acc.setDataRate(MMA8452::RATE_100); acc.setBitDepth(MMA8452::BIT_DEPTH_12); sampleMMA8452(&acc,10); return true; } void loop() { while(1) { wait(1); } } int main() { pc.baud(115200); LOG("Begin"); for(int i=0; i<20; i++) { LOG(" "); } if(!test()) { LOG("FAIL."); loop(); } LOG("Tests passed"); loop(); }