Playing around with accelerometer and magnetometer on mbed KL46Z

Dependencies:   MAG3110 MMA8451Q PinDetect mbed TSI

Committer:
mohammmo
Date:
Mon Feb 03 23:09:01 2014 +0000
Revision:
6:52474f03f1ff
Parent:
5:4ccda4b4f345
FAILED attemp at serial interrupts

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oliverfang 0:648dde0c4ef8 1 #include "mbed.h"
oliverfang 0:648dde0c4ef8 2 #include "PinDetect.h"
oliverfang 0:648dde0c4ef8 3 #include "MMA8451Q.h"
oliverfang 0:648dde0c4ef8 4 #include "MAG3110.h"
mohammmo 2:bb31f097af0f 5 #include "TSISensor.h"
mohammmo 6:52474f03f1ff 6 #include "serialCom.h"
oliverfang 0:648dde0c4ef8 7
oliverfang 0:648dde0c4ef8 8 #define MMA8451_I2C_ADDRESS (0x1d<<1)
oliverfang 0:648dde0c4ef8 9
oliverfang 0:648dde0c4ef8 10 // Declare output LEDs
oliverfang 0:648dde0c4ef8 11 DigitalOut ledgreen(PTD5);
oliverfang 0:648dde0c4ef8 12 DigitalOut ledred(PTE29);
oliverfang 0:648dde0c4ef8 13
oliverfang 0:648dde0c4ef8 14 // Declare USB serial connection
oliverfang 0:648dde0c4ef8 15 Serial pc(USBTX,USBRX);
oliverfang 0:648dde0c4ef8 16
oliverfang 0:648dde0c4ef8 17 // Declare timer interrupt
oliverfang 0:648dde0c4ef8 18 Ticker timerAcc;
oliverfang 0:648dde0c4ef8 19 Ticker timerMag;
mohammmo 2:bb31f097af0f 20 Ticker timerLight;
mohammmo 2:bb31f097af0f 21 Ticker timerTouch;
oliverfang 0:648dde0c4ef8 22
oliverfang 0:648dde0c4ef8 23 // Declare pointer variables
oliverfang 0:648dde0c4ef8 24 float xAcc;
oliverfang 0:648dde0c4ef8 25 float yAcc;
oliverfang 0:648dde0c4ef8 26 float zAcc;
oliverfang 0:648dde0c4ef8 27 int xMag;
oliverfang 0:648dde0c4ef8 28 int yMag;
oliverfang 0:648dde0c4ef8 29 int zMag;
mohammmo 2:bb31f097af0f 30 float xLight;
mohammmo 2:bb31f097af0f 31 float xTouch;
oliverfang 0:648dde0c4ef8 32
oliverfang 0:648dde0c4ef8 33 // Declare Accelerometer pins and I2C address
oliverfang 0:648dde0c4ef8 34 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS, 0, 0);
oliverfang 0:648dde0c4ef8 35 // Declare Magnetometer pins
oliverfang 0:648dde0c4ef8 36 MAG3110 mag(PTE25, PTE24);
mohammmo 2:bb31f097af0f 37 // Declare touch sensor pin
mohammmo 2:bb31f097af0f 38 TSISensor touch;
mohammmo 2:bb31f097af0f 39 // Declare light sensor pin
mohammmo 2:bb31f097af0f 40 AnalogIn light(PTE22);
oliverfang 0:648dde0c4ef8 41
oliverfang 0:648dde0c4ef8 42 // Functions
oliverfang 0:648dde0c4ef8 43 void init();
oliverfang 0:648dde0c4ef8 44 void accTime();
oliverfang 0:648dde0c4ef8 45 void magTime();
mohammmo 2:bb31f097af0f 46 void lightTime();
mohammmo 2:bb31f097af0f 47 void touchTime();
oliverfang 0:648dde0c4ef8 48
mohammmo 6:52474f03f1ff 49 // Interupt Routine to write out data to serial port
mohammmo 6:52474f03f1ff 50 void Tx_interrupt() {
mohammmo 6:52474f03f1ff 51 // Loop to fill more than one character in UART's transmit FIFO buffer
mohammmo 6:52474f03f1ff 52 // Stop if buffer empty
mohammmo 6:52474f03f1ff 53 while ((pc.writeable()) && (tx_in != tx_out)) {
mohammmo 6:52474f03f1ff 54 pc.putc(tx_buffer[tx_out]);
mohammmo 6:52474f03f1ff 55 tx_out = (tx_out + 1) % buffer_size;
mohammmo 6:52474f03f1ff 56 }
mohammmo 6:52474f03f1ff 57 return;
mohammmo 6:52474f03f1ff 58 }
mohammmo 6:52474f03f1ff 59
oliverfang 0:648dde0c4ef8 60 void init()
oliverfang 0:648dde0c4ef8 61 {
oliverfang 0:648dde0c4ef8 62 // Attach timerAcc
mohammmo 5:4ccda4b4f345 63 timerAcc.attach(&accTime, 0.05);
mohammmo 5:4ccda4b4f345 64 timerMag.attach(&magTime, 0.05);
mohammmo 5:4ccda4b4f345 65 timerLight.attach(&lightTime, 0.05);
mohammmo 5:4ccda4b4f345 66 timerTouch.attach(&touchTime, 0.05);
oliverfang 0:648dde0c4ef8 67 ledred = 0;
oliverfang 0:648dde0c4ef8 68 ledgreen = 0;
mohammmo 6:52474f03f1ff 69 pc.attach(&Tx_interrupt, Serial::TxIrq);
oliverfang 0:648dde0c4ef8 70 }
oliverfang 0:648dde0c4ef8 71
oliverfang 0:648dde0c4ef8 72 int main()
oliverfang 0:648dde0c4ef8 73 {
oliverfang 0:648dde0c4ef8 74 // Initialize
oliverfang 0:648dde0c4ef8 75 init();
oliverfang 0:648dde0c4ef8 76
oliverfang 0:648dde0c4ef8 77 while(1)
oliverfang 0:648dde0c4ef8 78 {
mohammmo 5:4ccda4b4f345 79 // read all sensor data
mohammmo 6:52474f03f1ff 80 sprintf(tx_line,"Hello world\r\n", xMag, yMag);
mohammmo 6:52474f03f1ff 81 send_line(pc);
mohammmo 5:4ccda4b4f345 82 wait(0.05);
oliverfang 0:648dde0c4ef8 83 }
oliverfang 0:648dde0c4ef8 84 }
oliverfang 0:648dde0c4ef8 85
oliverfang 0:648dde0c4ef8 86 void accTime()
oliverfang 0:648dde0c4ef8 87 {
oliverfang 0:648dde0c4ef8 88 xAcc = abs(acc.getAccX());
oliverfang 0:648dde0c4ef8 89 yAcc = abs(acc.getAccY());
oliverfang 0:648dde0c4ef8 90 zAcc = abs(acc.getAccZ());
oliverfang 0:648dde0c4ef8 91 ledgreen = !ledgreen;
oliverfang 0:648dde0c4ef8 92 }
oliverfang 0:648dde0c4ef8 93
oliverfang 0:648dde0c4ef8 94 void magTime()
oliverfang 0:648dde0c4ef8 95 {
oliverfang 0:648dde0c4ef8 96 xMag = mag.getXVal();
oliverfang 0:648dde0c4ef8 97 yMag = mag.getYVal();
oliverfang 0:648dde0c4ef8 98 zMag = mag.getZVal();
oliverfang 0:648dde0c4ef8 99 ledred = !ledred;
mohammmo 2:bb31f097af0f 100 }
mohammmo 2:bb31f097af0f 101
mohammmo 2:bb31f097af0f 102 void lightTime()
mohammmo 2:bb31f097af0f 103 {
mohammmo 2:bb31f097af0f 104 xLight = 1 - light.read();
mohammmo 2:bb31f097af0f 105 }
mohammmo 2:bb31f097af0f 106
mohammmo 2:bb31f097af0f 107 void touchTime()
mohammmo 2:bb31f097af0f 108 {
mohammmo 2:bb31f097af0f 109 xTouch = 1 - touch.readPercentage();
oliverfang 0:648dde0c4ef8 110 }