Serial output for sensors on FRDM-KL46Z

Dependencies:   MAG3110 MMA8451Q TSI mbed

Committer:
aaronice
Date:
Fri Feb 07 00:35:25 2014 +0000
Revision:
1:f3f39343f606
Parent:
0:6a47f35289ea
Serial output of sensor data on FRDM-KL46Z

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aaronice 0:6a47f35289ea 1 #include "mbed.h"
aaronice 0:6a47f35289ea 2 #include "MAG3110.h"
aaronice 0:6a47f35289ea 3 #include "MMA8451Q.h"
aaronice 0:6a47f35289ea 4 #include "TSISensor.h"
aaronice 0:6a47f35289ea 5 //#include "TEMT5200.h"
aaronice 0:6a47f35289ea 6
aaronice 0:6a47f35289ea 7 Serial pc(USBTX, USBRX); // tx, rx
aaronice 0:6a47f35289ea 8 // Magnetometer
aaronice 0:6a47f35289ea 9 #define MAG3110_I2C_ADDRESS (0x0e<<1)
aaronice 0:6a47f35289ea 10 // MAG3110 mag(PTE25, PTE24, MAG3110_I2C_ADDRESS);
aaronice 0:6a47f35289ea 11 MAG3110 mag(PTE25, PTE24, &pc);
aaronice 0:6a47f35289ea 12 // Accelerometer
aaronice 0:6a47f35289ea 13 #define MMA8451_I2C_ADDRESS (0x1d<<1)
aaronice 0:6a47f35289ea 14 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
aaronice 0:6a47f35289ea 15
aaronice 0:6a47f35289ea 16 // Slide sensor acts as a button
aaronice 0:6a47f35289ea 17 TSISensor tsi;
aaronice 0:6a47f35289ea 18
aaronice 0:6a47f35289ea 19 // Ambient light sensor
aaronice 0:6a47f35289ea 20 // TEMPT5200 alux(PTE22);
aaronice 0:6a47f35289ea 21
aaronice 0:6a47f35289ea 22
aaronice 0:6a47f35289ea 23 DigitalOut GreenLED(LED1);
aaronice 0:6a47f35289ea 24 DigitalOut RedLED(LED2);
aaronice 0:6a47f35289ea 25
aaronice 0:6a47f35289ea 26 void callback() {
aaronice 0:6a47f35289ea 27 // Note: you need to actually read from the serial to clear the RX interrupt
aaronice 0:6a47f35289ea 28 printf("%c\n", pc.getc());
aaronice 0:6a47f35289ea 29 GreenLED = (!GreenLED)|(GreenLED);
aaronice 0:6a47f35289ea 30 wait(10);
aaronice 0:6a47f35289ea 31 GreenLED = !GreenLED;
aaronice 0:6a47f35289ea 32 }
aaronice 0:6a47f35289ea 33
aaronice 0:6a47f35289ea 34
aaronice 0:6a47f35289ea 35 void calXY() //magnetometer calibration: finding max and min of X, Y axis
aaronice 0:6a47f35289ea 36 {
aaronice 0:6a47f35289ea 37 int tempXmax, tempXmin, tempYmax, tempYmin, newX, newY;
aaronice 0:6a47f35289ea 38
aaronice 0:6a47f35289ea 39 RedLED = 1;
aaronice 0:6a47f35289ea 40
aaronice 0:6a47f35289ea 41 printf("Waiting for initial press\n");
aaronice 0:6a47f35289ea 42 // Wait for slider to be pressed
aaronice 0:6a47f35289ea 43 while( tsi.readDistance() == 0 ) {
aaronice 0:6a47f35289ea 44 RedLED = 1;
aaronice 0:6a47f35289ea 45 wait(0.2);
aaronice 0:6a47f35289ea 46 RedLED =0;
aaronice 0:6a47f35289ea 47 wait(0.2);
aaronice 0:6a47f35289ea 48 }
aaronice 0:6a47f35289ea 49
aaronice 0:6a47f35289ea 50 printf("Waiting for release\n");
aaronice 0:6a47f35289ea 51
aaronice 0:6a47f35289ea 52 // Wait for release
aaronice 0:6a47f35289ea 53 while( tsi.readDistance() != 0 ) {
aaronice 0:6a47f35289ea 54 RedLED =0;
aaronice 0:6a47f35289ea 55 wait(0.2);
aaronice 0:6a47f35289ea 56 RedLED = 1;
aaronice 0:6a47f35289ea 57 wait(0.2);
aaronice 0:6a47f35289ea 58 }
aaronice 0:6a47f35289ea 59 RedLED =0;
aaronice 0:6a47f35289ea 60 wait(0.5);
aaronice 0:6a47f35289ea 61
aaronice 0:6a47f35289ea 62 printf("Rotate\n");
aaronice 0:6a47f35289ea 63
aaronice 0:6a47f35289ea 64 tempXmax = tempXmin = mag.readVal(MAG_OUT_X_MSB);
aaronice 0:6a47f35289ea 65 tempYmax = tempYmin = mag.readVal(MAG_OUT_Y_MSB);
aaronice 0:6a47f35289ea 66
aaronice 0:6a47f35289ea 67 while(tsi.readDistance() == 0) {
aaronice 0:6a47f35289ea 68 GreenLED = 1;
aaronice 0:6a47f35289ea 69 wait(0.1);
aaronice 0:6a47f35289ea 70 GreenLED =0;
aaronice 0:6a47f35289ea 71 wait(0.1);
aaronice 0:6a47f35289ea 72 newX = mag.readVal(MAG_OUT_X_MSB);
aaronice 0:6a47f35289ea 73 newY = mag.readVal(MAG_OUT_Y_MSB);
aaronice 0:6a47f35289ea 74 if (newX > tempXmax) tempXmax = newX;
aaronice 0:6a47f35289ea 75 if (newX < tempXmin) tempXmin = newX;
aaronice 0:6a47f35289ea 76 if (newY > tempYmax) tempYmax = newY;
aaronice 0:6a47f35289ea 77 if (newY < tempYmin) tempYmin = newY;
aaronice 0:6a47f35289ea 78 }
aaronice 0:6a47f35289ea 79
aaronice 0:6a47f35289ea 80 mag.setCalibration( tempXmin, tempXmax, tempYmin, tempYmax );
aaronice 0:6a47f35289ea 81
aaronice 0:6a47f35289ea 82 // Wait for release
aaronice 0:6a47f35289ea 83 while( tsi.readDistance() != 0 ) {
aaronice 0:6a47f35289ea 84 GreenLED =0;
aaronice 0:6a47f35289ea 85 wait(0.2);
aaronice 0:6a47f35289ea 86 GreenLED = 1;
aaronice 0:6a47f35289ea 87 wait(0.2);
aaronice 0:6a47f35289ea 88 }
aaronice 0:6a47f35289ea 89 GreenLED =0;
aaronice 0:6a47f35289ea 90 wait(1.0);
aaronice 0:6a47f35289ea 91
aaronice 0:6a47f35289ea 92 }
aaronice 0:6a47f35289ea 93
aaronice 0:6a47f35289ea 94
aaronice 0:6a47f35289ea 95 int main(void){
aaronice 0:6a47f35289ea 96
aaronice 0:6a47f35289ea 97 pc.attach(&callback);
aaronice 0:6a47f35289ea 98
aaronice 0:6a47f35289ea 99 // MAG3110 Calibration
aaronice 0:6a47f35289ea 100 printf("MAG3110 Test\n");
aaronice 0:6a47f35289ea 101
aaronice 0:6a47f35289ea 102 RedLED =0;
aaronice 0:6a47f35289ea 103 GreenLED = 1;
aaronice 0:6a47f35289ea 104
aaronice 0:6a47f35289ea 105 // Get some values
aaronice 0:6a47f35289ea 106 printf("DR_STATUS %X\n", mag.readReg( MAG_DR_STATUS ));
aaronice 0:6a47f35289ea 107 printf("WHO_AM_I %X\n", mag.readReg( MAG_WHO_AM_I ));
aaronice 0:6a47f35289ea 108 printf("SYSMOD %X\n", mag.readReg( MAG_SYSMOD ));
aaronice 0:6a47f35289ea 109 printf("DIE_TEMP %d\n", mag.readReg( MAG_DIE_TEMP ));
aaronice 0:6a47f35289ea 110
aaronice 0:6a47f35289ea 111 printf("OFF_X %d\n", mag.readVal( MAG_OFF_X_MSB ));
aaronice 0:6a47f35289ea 112 printf("OFF_Y %d\n", mag.readVal( MAG_OFF_Y_MSB ));
aaronice 0:6a47f35289ea 113 printf("OFF_Z %d\n", mag.readVal( MAG_OFF_Z_MSB ));
aaronice 0:6a47f35289ea 114
aaronice 0:6a47f35289ea 115 printf("CTRL_REG1 %X\n", mag.readReg( MAG_CTRL_REG1 ));
aaronice 0:6a47f35289ea 116 printf("CTRL_REG2 %X\n", mag.readReg( MAG_CTRL_REG2 ));
aaronice 0:6a47f35289ea 117
aaronice 0:6a47f35289ea 118 printf("calibrate\n");
aaronice 0:6a47f35289ea 119 calXY();
aaronice 0:6a47f35289ea 120 printf("....Finished\n");
aaronice 0:6a47f35289ea 121
aaronice 0:6a47f35289ea 122 RedLED = 0;
aaronice 0:6a47f35289ea 123 GreenLED = 0;
aaronice 0:6a47f35289ea 124
aaronice 0:6a47f35289ea 125
aaronice 0:6a47f35289ea 126
aaronice 0:6a47f35289ea 127
aaronice 0:6a47f35289ea 128
aaronice 0:6a47f35289ea 129 while(1){
aaronice 0:6a47f35289ea 130
aaronice 0:6a47f35289ea 131 wait(0.5);
aaronice 0:6a47f35289ea 132 int xVal = mag.readVal(MAG_OUT_X_MSB);
aaronice 0:6a47f35289ea 133 int yVal = mag.readVal(MAG_OUT_Y_MSB);
aaronice 0:6a47f35289ea 134 int zVal = mag.readVal(MAG_OUT_Z_MSB);
aaronice 0:6a47f35289ea 135 float heading = mag.getHeading();
aaronice 0:6a47f35289ea 136
aaronice 0:6a47f35289ea 137 // Do something with heading - display direction and turn on blue LED if heading approx north
aaronice 0:6a47f35289ea 138 if (abs(heading) <= 22.5) {
aaronice 0:6a47f35289ea 139 printf("N\n");
aaronice 0:6a47f35289ea 140 RedLED = 0;
aaronice 0:6a47f35289ea 141 } else RedLED = 1;
aaronice 0:6a47f35289ea 142
aaronice 0:6a47f35289ea 143 if (abs(heading) >= 157.5) pc.printf("S\n");
aaronice 0:6a47f35289ea 144 if (heading >= 67.5 && heading <= 112.5) pc.printf("E \n");
aaronice 0:6a47f35289ea 145 if (heading <= -67.5 && heading >= -112.5) pc.printf("W \n");
aaronice 0:6a47f35289ea 146 if (heading > 22.5 && heading < 67.5) pc.printf("NE\n");
aaronice 0:6a47f35289ea 147 if (heading < -22.5 && heading > -67.5) pc.printf("NW\n");
aaronice 0:6a47f35289ea 148 if (heading > 112.5 && heading < 157.5) pc.printf("SE\n");
aaronice 0:6a47f35289ea 149 if (heading < -112.5 && heading > -157.5) pc.printf("SW\n");
aaronice 0:6a47f35289ea 150 //if (heading < 0) heading += 360.0;
aaronice 0:6a47f35289ea 151
aaronice 0:6a47f35289ea 152 pc.printf("magX = %d, magY = %d, magZ = %d, Heading = %f ;\t", xVal, yVal, zVal, heading);
aaronice 0:6a47f35289ea 153
aaronice 0:6a47f35289ea 154 pc.printf("accX = %f, accY = %f, accZ = %f;\t", abs(acc.getAccX()),abs(acc.getAccY()),abs(acc.getAccZ()));
aaronice 0:6a47f35289ea 155
aaronice 0:6a47f35289ea 156 pc.printf("Touch Sensor Input: %f\n", tsi.readPercentage());
aaronice 0:6a47f35289ea 157
aaronice 0:6a47f35289ea 158 //pc.printf("Ambient Light: %f", alux);
aaronice 0:6a47f35289ea 159 wait(1);
aaronice 0:6a47f35289ea 160 }
aaronice 0:6a47f35289ea 161
aaronice 0:6a47f35289ea 162
aaronice 0:6a47f35289ea 163 }