Playing around with accelerometer and magnetometer on mbed KL46Z

Dependencies:   MAG3110 MMA8451Q PinDetect mbed TSI

Committer:
oliverfang
Date:
Mon Feb 03 18:28:32 2014 +0000
Revision:
4:0d2eefc2be8e
Parent:
3:552b7c450b2f
Child:
8:b87b93a62a6a
added delimiters for pyserial compatibility

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"
oliverfang 0:648dde0c4ef8 6
oliverfang 0:648dde0c4ef8 7 #define MMA8451_I2C_ADDRESS (0x1d<<1)
oliverfang 0:648dde0c4ef8 8
oliverfang 0:648dde0c4ef8 9 // Declare output LEDs
oliverfang 0:648dde0c4ef8 10 DigitalOut ledgreen(PTD5);
oliverfang 0:648dde0c4ef8 11 DigitalOut ledred(PTE29);
oliverfang 0:648dde0c4ef8 12
oliverfang 0:648dde0c4ef8 13 // Declare USB serial connection
oliverfang 0:648dde0c4ef8 14 Serial pc(USBTX,USBRX);
oliverfang 0:648dde0c4ef8 15
oliverfang 0:648dde0c4ef8 16 // Declare timer interrupt
oliverfang 0:648dde0c4ef8 17 Ticker timerAcc;
oliverfang 0:648dde0c4ef8 18 Ticker timerMag;
mohammmo 2:bb31f097af0f 19 Ticker timerLight;
mohammmo 2:bb31f097af0f 20 Ticker timerTouch;
oliverfang 0:648dde0c4ef8 21
oliverfang 0:648dde0c4ef8 22 // Declare pointer variables
oliverfang 0:648dde0c4ef8 23 float xAcc;
oliverfang 0:648dde0c4ef8 24 float yAcc;
oliverfang 0:648dde0c4ef8 25 float zAcc;
oliverfang 0:648dde0c4ef8 26 int xMag;
oliverfang 0:648dde0c4ef8 27 int yMag;
oliverfang 0:648dde0c4ef8 28 int zMag;
mohammmo 2:bb31f097af0f 29 float xLight;
mohammmo 2:bb31f097af0f 30 float xTouch;
oliverfang 0:648dde0c4ef8 31
oliverfang 3:552b7c450b2f 32 // Sampling rates
oliverfang 4:0d2eefc2be8e 33 float accRate = 0.1;
oliverfang 4:0d2eefc2be8e 34 float magRate = 0.1;
oliverfang 3:552b7c450b2f 35 float lightRate = 0.1;
oliverfang 3:552b7c450b2f 36 float touchRate = 0.1;
oliverfang 3:552b7c450b2f 37
oliverfang 3:552b7c450b2f 38
oliverfang 0:648dde0c4ef8 39 // Declare Accelerometer pins and I2C address
oliverfang 0:648dde0c4ef8 40 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS, 0, 0);
oliverfang 0:648dde0c4ef8 41 // Declare Magnetometer pins
oliverfang 0:648dde0c4ef8 42 MAG3110 mag(PTE25, PTE24);
mohammmo 2:bb31f097af0f 43 // Declare touch sensor pin
mohammmo 2:bb31f097af0f 44 TSISensor touch;
mohammmo 2:bb31f097af0f 45 // Declare light sensor pin
mohammmo 2:bb31f097af0f 46 AnalogIn light(PTE22);
oliverfang 0:648dde0c4ef8 47
oliverfang 0:648dde0c4ef8 48 // Functions
oliverfang 0:648dde0c4ef8 49 void init();
oliverfang 4:0d2eefc2be8e 50 void printData();
oliverfang 0:648dde0c4ef8 51 void accTime();
oliverfang 0:648dde0c4ef8 52 void magTime();
mohammmo 2:bb31f097af0f 53 void lightTime();
mohammmo 2:bb31f097af0f 54 void touchTime();
oliverfang 0:648dde0c4ef8 55
oliverfang 0:648dde0c4ef8 56 void init()
oliverfang 0:648dde0c4ef8 57 {
oliverfang 0:648dde0c4ef8 58 // Attach timerAcc
oliverfang 3:552b7c450b2f 59 timerAcc.attach(&accTime, accRate);
oliverfang 3:552b7c450b2f 60 timerMag.attach(&magTime, magRate);
oliverfang 3:552b7c450b2f 61 timerLight.attach(&lightTime, lightRate);
oliverfang 3:552b7c450b2f 62 timerTouch.attach(&touchTime, touchRate);
oliverfang 0:648dde0c4ef8 63 ledred = 0;
oliverfang 0:648dde0c4ef8 64 ledgreen = 0;
oliverfang 0:648dde0c4ef8 65 }
oliverfang 0:648dde0c4ef8 66
oliverfang 0:648dde0c4ef8 67 int main()
oliverfang 0:648dde0c4ef8 68 {
oliverfang 0:648dde0c4ef8 69 // Initialize
oliverfang 0:648dde0c4ef8 70 init();
oliverfang 0:648dde0c4ef8 71
oliverfang 0:648dde0c4ef8 72 while(1)
oliverfang 0:648dde0c4ef8 73 {
oliverfang 4:0d2eefc2be8e 74 printData();
oliverfang 4:0d2eefc2be8e 75 wait(0.1);
oliverfang 0:648dde0c4ef8 76 }
oliverfang 0:648dde0c4ef8 77 }
oliverfang 0:648dde0c4ef8 78
oliverfang 4:0d2eefc2be8e 79 void printData()
oliverfang 4:0d2eefc2be8e 80 {
oliverfang 4:0d2eefc2be8e 81 // Read and print data from accelerometer
oliverfang 4:0d2eefc2be8e 82 pc.printf("/%f/%f/%f/", xAcc, yAcc, zAcc);
oliverfang 4:0d2eefc2be8e 83 // Read data from magnetometer
oliverfang 4:0d2eefc2be8e 84 pc.printf("%d/%d/%d/", xMag, yMag, zMag);
oliverfang 4:0d2eefc2be8e 85 pc.printf("%f/", xLight);
oliverfang 4:0d2eefc2be8e 86 pc.printf("%f/\r\n", xTouch);
oliverfang 4:0d2eefc2be8e 87 }
oliverfang 0:648dde0c4ef8 88 void accTime()
oliverfang 0:648dde0c4ef8 89 {
oliverfang 0:648dde0c4ef8 90 xAcc = abs(acc.getAccX());
oliverfang 0:648dde0c4ef8 91 yAcc = abs(acc.getAccY());
oliverfang 0:648dde0c4ef8 92 zAcc = abs(acc.getAccZ());
oliverfang 0:648dde0c4ef8 93 ledgreen = !ledgreen;
oliverfang 0:648dde0c4ef8 94 }
oliverfang 0:648dde0c4ef8 95
oliverfang 0:648dde0c4ef8 96 void magTime()
oliverfang 0:648dde0c4ef8 97 {
oliverfang 0:648dde0c4ef8 98 xMag = mag.getXVal();
oliverfang 0:648dde0c4ef8 99 yMag = mag.getYVal();
oliverfang 0:648dde0c4ef8 100 zMag = mag.getZVal();
oliverfang 0:648dde0c4ef8 101 ledred = !ledred;
mohammmo 2:bb31f097af0f 102 }
mohammmo 2:bb31f097af0f 103
mohammmo 2:bb31f097af0f 104 void lightTime()
mohammmo 2:bb31f097af0f 105 {
mohammmo 2:bb31f097af0f 106 xLight = 1 - light.read();
mohammmo 2:bb31f097af0f 107 }
mohammmo 2:bb31f097af0f 108
mohammmo 2:bb31f097af0f 109 void touchTime()
mohammmo 2:bb31f097af0f 110 {
mohammmo 2:bb31f097af0f 111 xTouch = 1 - touch.readPercentage();
oliverfang 0:648dde0c4ef8 112 }