Configuring sensors dynamically using serial bus from the host computer.

Dependencies:   MAG3110 mbed

Committer:
mja054
Date:
Sat Feb 15 00:46:41 2014 +0000
Revision:
2:a422a41dbea1
Parent:
0:1efeb3fc4ba6
Send the time delay

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mja054 0:1efeb3fc4ba6 1 #include "mbed.h"
mja054 0:1efeb3fc4ba6 2 #include "MMA8451Q.h"
mja054 0:1efeb3fc4ba6 3 #include "MAG3110.h"
mja054 0:1efeb3fc4ba6 4 #include "SLCD.h"
mja054 0:1efeb3fc4ba6 5 #include "TSISensor.h"
mja054 0:1efeb3fc4ba6 6
mja054 0:1efeb3fc4ba6 7 #define MAX_TIME 10
mja054 0:1efeb3fc4ba6 8 #define BAUD_RATE 230400 //115200
mja054 0:1efeb3fc4ba6 9 #define MMA8451_I2C_ADDRESS (0x1d << 1)
mja054 0:1efeb3fc4ba6 10 #define MAG3110_I2C_ADDRESS (0x0e << 1)
mja054 0:1efeb3fc4ba6 11
mja054 0:1efeb3fc4ba6 12 Serial pc(USBTX, USBRX);
mja054 0:1efeb3fc4ba6 13 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
mja054 0:1efeb3fc4ba6 14 MAG3110 mag(PTE25, PTE24, MAG3110_I2C_ADDRESS);
mja054 0:1efeb3fc4ba6 15 AnalogIn lightSensor(PTE22);
mja054 0:1efeb3fc4ba6 16 DigitalOut green(LED1);
mja054 0:1efeb3fc4ba6 17 DigitalOut red(LED2);
mja054 0:1efeb3fc4ba6 18 Timer tt;
mja054 2:a422a41dbea1 19 Timer epoch;
mja054 0:1efeb3fc4ba6 20 SLCD slcd;
mja054 0:1efeb3fc4ba6 21 TSISensor tsi;
mja054 0:1efeb3fc4ba6 22
mja054 0:1efeb3fc4ba6 23 /*
mja054 0:1efeb3fc4ba6 24 Sensortype:
mja054 0:1efeb3fc4ba6 25 'a' - accelerometer
mja054 0:1efeb3fc4ba6 26 'b' - maganetometer
mja054 0:1efeb3fc4ba6 27 'c' - light
mja054 0:1efeb3fc4ba6 28 'd' - touch
mja054 0:1efeb3fc4ba6 29
mja054 0:1efeb3fc4ba6 30 rate: 0:1:100 (min sampling period =10ms)
mja054 0:1efeb3fc4ba6 31 rate = 0 => sensor switched off
mja054 0:1efeb3fc4ba6 32 */
mja054 0:1efeb3fc4ba6 33 int i = 0;
mja054 0:1efeb3fc4ba6 34 char input[10]; // sensorType, 3bytes - rate, 'z'
mja054 0:1efeb3fc4ba6 35 int aval=0, mval=0, lval=0, tval=0;
mja054 0:1efeb3fc4ba6 36 int a=aval, m=mval, l=lval, t = tval;
mja054 0:1efeb3fc4ba6 37 bool facc = true, fmag = true, flight = true, ftouch = true;
mja054 0:1efeb3fc4ba6 38
mja054 0:1efeb3fc4ba6 39 void transform()
mja054 0:1efeb3fc4ba6 40 {
mja054 0:1efeb3fc4ba6 41 int j, val = 0;
mja054 0:1efeb3fc4ba6 42
mja054 0:1efeb3fc4ba6 43 for (j = 1; j < 4; j++) {
mja054 0:1efeb3fc4ba6 44 val = val * 10 + (input[j] - '0');
mja054 0:1efeb3fc4ba6 45 }
mja054 0:1efeb3fc4ba6 46
mja054 0:1efeb3fc4ba6 47 switch (input[0]) {
mja054 0:1efeb3fc4ba6 48 case 'a':
mja054 0:1efeb3fc4ba6 49 a = 0;
mja054 0:1efeb3fc4ba6 50 if (val == 0)
mja054 0:1efeb3fc4ba6 51 facc = false;
mja054 0:1efeb3fc4ba6 52 else {
mja054 0:1efeb3fc4ba6 53 facc = true;
mja054 0:1efeb3fc4ba6 54 aval = val - 1;
mja054 0:1efeb3fc4ba6 55 }
mja054 0:1efeb3fc4ba6 56 break;
mja054 0:1efeb3fc4ba6 57 case 'b':
mja054 0:1efeb3fc4ba6 58 m = 0;
mja054 0:1efeb3fc4ba6 59 if (val == 0)
mja054 0:1efeb3fc4ba6 60 fmag = false;
mja054 0:1efeb3fc4ba6 61 else {
mja054 0:1efeb3fc4ba6 62 fmag = true;
mja054 0:1efeb3fc4ba6 63 mval = val - 1;
mja054 0:1efeb3fc4ba6 64 }
mja054 0:1efeb3fc4ba6 65 break;
mja054 0:1efeb3fc4ba6 66 case 'c':
mja054 0:1efeb3fc4ba6 67 l = 0;
mja054 0:1efeb3fc4ba6 68 if (val == 0)
mja054 0:1efeb3fc4ba6 69 flight = false;
mja054 0:1efeb3fc4ba6 70 else {
mja054 0:1efeb3fc4ba6 71 flight = true;
mja054 0:1efeb3fc4ba6 72 lval = val - 1;
mja054 0:1efeb3fc4ba6 73 }
mja054 0:1efeb3fc4ba6 74 break;
mja054 0:1efeb3fc4ba6 75 case 'd':
mja054 0:1efeb3fc4ba6 76 t = 0;
mja054 0:1efeb3fc4ba6 77 if (val == 0)
mja054 0:1efeb3fc4ba6 78 ftouch = false;
mja054 0:1efeb3fc4ba6 79 else {
mja054 0:1efeb3fc4ba6 80 ftouch = true;
mja054 0:1efeb3fc4ba6 81 tval = val - 1;
mja054 0:1efeb3fc4ba6 82 }
mja054 0:1efeb3fc4ba6 83 break;
mja054 0:1efeb3fc4ba6 84 }
mja054 0:1efeb3fc4ba6 85 for (j = 0; j < 5; j++)
mja054 0:1efeb3fc4ba6 86 input[j] = 'k';
mja054 0:1efeb3fc4ba6 87 }
mja054 0:1efeb3fc4ba6 88
mja054 0:1efeb3fc4ba6 89 void read()
mja054 0:1efeb3fc4ba6 90 {
mja054 0:1efeb3fc4ba6 91 char c = (char) pc.getc();
mja054 0:1efeb3fc4ba6 92
mja054 0:1efeb3fc4ba6 93 if (c >= 'a' && c <= 'd')
mja054 0:1efeb3fc4ba6 94 slcd.printf("%c", c);
mja054 0:1efeb3fc4ba6 95 else if (c == 'z')
mja054 0:1efeb3fc4ba6 96 slcd.printf("%c",'n');
mja054 0:1efeb3fc4ba6 97 else if (c >= '0' && c <= '9')
mja054 0:1efeb3fc4ba6 98 slcd.printf("%c", c);
mja054 0:1efeb3fc4ba6 99 else
mja054 0:1efeb3fc4ba6 100 slcd.printf("%c", 'E');
mja054 0:1efeb3fc4ba6 101 if (i == 0 && c >= 'a' && c <= 'd') {
mja054 0:1efeb3fc4ba6 102 input[i++] = c;
mja054 0:1efeb3fc4ba6 103 } else if (i >= 1 && i <= 3 && c >= '0' && c <= '9') {
mja054 0:1efeb3fc4ba6 104 input[i++] = c;
mja054 0:1efeb3fc4ba6 105 } else if (i == 4 && c == 'z') {
mja054 0:1efeb3fc4ba6 106 transform();
mja054 0:1efeb3fc4ba6 107 i = 0;
mja054 0:1efeb3fc4ba6 108 } else {
mja054 0:1efeb3fc4ba6 109 i = 0;
mja054 0:1efeb3fc4ba6 110 red = !red;
mja054 0:1efeb3fc4ba6 111 for (int j = 0; j < 5; j++) {
mja054 0:1efeb3fc4ba6 112 input[j] = 'k';
mja054 0:1efeb3fc4ba6 113 }
mja054 0:1efeb3fc4ba6 114 }
mja054 0:1efeb3fc4ba6 115 }
mja054 0:1efeb3fc4ba6 116
mja054 0:1efeb3fc4ba6 117 int main()
mja054 0:1efeb3fc4ba6 118 {
mja054 0:1efeb3fc4ba6 119 float acce1, acce2, acce3, magma1, magma2, magma3, light, touch;
mja054 0:1efeb3fc4ba6 120 pc.baud(BAUD_RATE);
mja054 0:1efeb3fc4ba6 121 pc.attach(read);
mja054 0:1efeb3fc4ba6 122
mja054 2:a422a41dbea1 123 epoch.start();
mja054 2:a422a41dbea1 124 while(true) {
mja054 0:1efeb3fc4ba6 125 tt.reset();
mja054 0:1efeb3fc4ba6 126 red = 1;
mja054 0:1efeb3fc4ba6 127 green = 0;
mja054 0:1efeb3fc4ba6 128 wait(0.2);
mja054 0:1efeb3fc4ba6 129 red = 0;
mja054 0:1efeb3fc4ba6 130 green = 1;
mja054 0:1efeb3fc4ba6 131 wait(0.2);
mja054 0:1efeb3fc4ba6 132
mja054 0:1efeb3fc4ba6 133 tt.start();
mja054 2:a422a41dbea1 134 float time_elapsed = epoch.read();
mja054 0:1efeb3fc4ba6 135 int time = tt.read_ms();
mja054 0:1efeb3fc4ba6 136 if (facc) {
mja054 0:1efeb3fc4ba6 137 if (a == 0){
mja054 0:1efeb3fc4ba6 138 acce1 = acc.getAccX();
mja054 0:1efeb3fc4ba6 139 acce2 = acc.getAccY();
mja054 0:1efeb3fc4ba6 140 acce3 = acc.getAccZ();
mja054 2:a422a41dbea1 141 pc.printf("a=%f,%f,%f,z%f\n", acce1, acce2, acce3, time_elapsed);
mja054 0:1efeb3fc4ba6 142 a = aval;
mja054 0:1efeb3fc4ba6 143 } else
mja054 0:1efeb3fc4ba6 144 a--;
mja054 0:1efeb3fc4ba6 145 }
mja054 0:1efeb3fc4ba6 146 if (fmag) {
mja054 0:1efeb3fc4ba6 147 if (m == 0){
mja054 0:1efeb3fc4ba6 148 magma1 = mag.readVal(MAG_OUT_X_MSB);
mja054 0:1efeb3fc4ba6 149 magma2 = mag.readVal(MAG_OUT_Y_MSB);
mja054 0:1efeb3fc4ba6 150 magma3 = mag.readVal(MAG_OUT_Z_MSB);
mja054 2:a422a41dbea1 151 pc.printf("m=%f,%f,%f,z%f\n", magma1, magma2, magma3, time_elapsed);
mja054 0:1efeb3fc4ba6 152 m =mval;
mja054 0:1efeb3fc4ba6 153 } else
mja054 0:1efeb3fc4ba6 154 m--;
mja054 0:1efeb3fc4ba6 155 }
mja054 0:1efeb3fc4ba6 156 if (flight) {
mja054 0:1efeb3fc4ba6 157 if(l == 0){
mja054 0:1efeb3fc4ba6 158 light = lightSensor.read();
mja054 2:a422a41dbea1 159 pc.printf("l=%f,z%f\n", light, time_elapsed);
mja054 0:1efeb3fc4ba6 160 l=lval;
mja054 0:1efeb3fc4ba6 161 } else
mja054 0:1efeb3fc4ba6 162 l--;
mja054 0:1efeb3fc4ba6 163 }
mja054 0:1efeb3fc4ba6 164 if (ftouch) {
mja054 0:1efeb3fc4ba6 165 if (t == 0){
mja054 0:1efeb3fc4ba6 166 touch = tsi.readPercentage();
mja054 2:a422a41dbea1 167 pc.printf("t=%f,z%f\n", touch, time_elapsed);
mja054 0:1efeb3fc4ba6 168 t= tval;
mja054 0:1efeb3fc4ba6 169 } else
mja054 0:1efeb3fc4ba6 170 t--;
mja054 0:1efeb3fc4ba6 171 }
mja054 0:1efeb3fc4ba6 172 int time1 = tt.read_ms();
mja054 0:1efeb3fc4ba6 173 tt.stop();
mja054 0:1efeb3fc4ba6 174 // pc.printf("tt:%d\n", time1-time);
mja054 0:1efeb3fc4ba6 175 if(MAX_TIME < time1-time)
mja054 0:1efeb3fc4ba6 176 ;
mja054 0:1efeb3fc4ba6 177 else
mja054 0:1efeb3fc4ba6 178 wait((MAX_TIME-(time1-time))/1000.0);
mja054 0:1efeb3fc4ba6 179 }
mja054 2:a422a41dbea1 180 }