Playing around with accelerometer and magnetometer on mbed KL46Z
Dependencies: MAG3110 MMA8451Q PinDetect mbed TSI
main.cpp
- Committer:
- mohammmo
- Date:
- 2014-02-04
- Revision:
- 7:1cd1e239acf0
- Parent:
- 5:4ccda4b4f345
File content as of revision 7:1cd1e239acf0:
#include "mbed.h" #include "PinDetect.h" #include "MMA8451Q.h" #include "MAG3110.h" #include "TSISensor.h" #include <string> #define MMA8451_I2C_ADDRESS (0x1d<<1) // Declare output LEDs DigitalOut ledgreen(PTD5); DigitalOut ledred(PTE29); // Declare USB serial connection Serial pc(USBTX,USBRX); // Declare timer interrupt Ticker timerAcc; Ticker timerMag; Ticker timerLight; Ticker timerTouch; //Sampling rate float sample = 0.5; // Declare pointer variables float xAcc; float yAcc; float zAcc; int xMag; int yMag; int zMag; float xLight; float xTouch; // Declare Accelerometer pins and I2C address MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS, 0, 0); // Declare Magnetometer pins MAG3110 mag(PTE25, PTE24); // Declare touch sensor pin TSISensor touch; // Declare light sensor pin AnalogIn light(PTE22); // variables for receive interrupt const int buffer_size = 255; char rx_buffer[buffer_size]; int track_rx = 0; bool received = false; // Functions void init(); void accTime(); void magTime(); void lightTime(); void touchTime(); void receive_handler(); void change_interval(float sample); void init() { // Attach timerAcc timerAcc.attach(&accTime, sample); timerMag.attach(&magTime, sample); timerLight.attach(&lightTime, sample); timerTouch.attach(&touchTime, sample); pc.attach(&receive_handler,Serial::RxIrq); ledred = 0; ledgreen = 0; } int main() { // Initialize init(); while(1) { // read all sensor data //pc.printf("%f %f %f %d %d %d %f %f\n", xAcc, yAcc, zAcc, xMag, yMag, zMag, xLight, xTouch); //wait(0.05); if (received){ __disable_irq(); sscanf(rx_buffer,"%f",&sample); pc.printf("%f\r\n", sample); change_interval(sample); received = false; __enable_irq(); } } } void accTime() { xAcc = abs(acc.getAccX()); yAcc = abs(acc.getAccY()); zAcc = abs(acc.getAccZ()); ledgreen = !ledgreen; } void magTime() { xMag = mag.getXVal(); yMag = mag.getYVal(); zMag = mag.getZVal(); ledred = !ledred; } void lightTime() { xLight = 1 - light.read(); } void touchTime() { xTouch = 1 - touch.readPercentage(); } void receive_handler(){ while (pc.readable() && track_rx < buffer_size){ rx_buffer[track_rx] = pc.getc(); if (rx_buffer[track_rx] == '#'){ rx_buffer[track_rx] = '\0'; track_rx=0; received = true; break; } track_rx++; } return; } void change_interval(float sample) { timerAcc.detach(); timerMag.detach(); timerLight.detach(); timerTouch.detach(); timerAcc.attach(&accTime, sample); timerMag.attach(&magTime, sample); timerLight.attach(&lightTime, sample); timerTouch.attach(&touchTime, sample); }