Configuring sensors dynamically using serial bus from the host computer.

Dependencies:   MAG3110 mbed

Committer:
mja054
Date:
Wed Feb 12 22:23:22 2014 +0000
Revision:
0:1efeb3fc4ba6
Child:
2:a422a41dbea1
Home work1

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 0:1efeb3fc4ba6 19 SLCD slcd;
mja054 0:1efeb3fc4ba6 20 TSISensor tsi;
mja054 0:1efeb3fc4ba6 21
mja054 0:1efeb3fc4ba6 22 /*
mja054 0:1efeb3fc4ba6 23 Sensortype:
mja054 0:1efeb3fc4ba6 24 'a' - accelerometer
mja054 0:1efeb3fc4ba6 25 'b' - maganetometer
mja054 0:1efeb3fc4ba6 26 'c' - light
mja054 0:1efeb3fc4ba6 27 'd' - touch
mja054 0:1efeb3fc4ba6 28
mja054 0:1efeb3fc4ba6 29 rate: 0:1:100 (min sampling period =10ms)
mja054 0:1efeb3fc4ba6 30 rate = 0 => sensor switched off
mja054 0:1efeb3fc4ba6 31 */
mja054 0:1efeb3fc4ba6 32 int i = 0;
mja054 0:1efeb3fc4ba6 33 char input[10]; // sensorType, 3bytes - rate, 'z'
mja054 0:1efeb3fc4ba6 34 int aval=0, mval=0, lval=0, tval=0;
mja054 0:1efeb3fc4ba6 35 int a=aval, m=mval, l=lval, t = tval;
mja054 0:1efeb3fc4ba6 36 bool facc = true, fmag = true, flight = true, ftouch = true;
mja054 0:1efeb3fc4ba6 37
mja054 0:1efeb3fc4ba6 38 void transform()
mja054 0:1efeb3fc4ba6 39 {
mja054 0:1efeb3fc4ba6 40 int j, val = 0;
mja054 0:1efeb3fc4ba6 41
mja054 0:1efeb3fc4ba6 42 for (j = 1; j < 4; j++) {
mja054 0:1efeb3fc4ba6 43 val = val * 10 + (input[j] - '0');
mja054 0:1efeb3fc4ba6 44 }
mja054 0:1efeb3fc4ba6 45
mja054 0:1efeb3fc4ba6 46 switch (input[0]) {
mja054 0:1efeb3fc4ba6 47 case 'a':
mja054 0:1efeb3fc4ba6 48 a = 0;
mja054 0:1efeb3fc4ba6 49 if (val == 0)
mja054 0:1efeb3fc4ba6 50 facc = false;
mja054 0:1efeb3fc4ba6 51 else {
mja054 0:1efeb3fc4ba6 52 facc = true;
mja054 0:1efeb3fc4ba6 53 aval = val - 1;
mja054 0:1efeb3fc4ba6 54 }
mja054 0:1efeb3fc4ba6 55 break;
mja054 0:1efeb3fc4ba6 56 case 'b':
mja054 0:1efeb3fc4ba6 57 m = 0;
mja054 0:1efeb3fc4ba6 58 if (val == 0)
mja054 0:1efeb3fc4ba6 59 fmag = false;
mja054 0:1efeb3fc4ba6 60 else {
mja054 0:1efeb3fc4ba6 61 fmag = true;
mja054 0:1efeb3fc4ba6 62 mval = val - 1;
mja054 0:1efeb3fc4ba6 63 }
mja054 0:1efeb3fc4ba6 64 break;
mja054 0:1efeb3fc4ba6 65 case 'c':
mja054 0:1efeb3fc4ba6 66 l = 0;
mja054 0:1efeb3fc4ba6 67 if (val == 0)
mja054 0:1efeb3fc4ba6 68 flight = false;
mja054 0:1efeb3fc4ba6 69 else {
mja054 0:1efeb3fc4ba6 70 flight = true;
mja054 0:1efeb3fc4ba6 71 lval = val - 1;
mja054 0:1efeb3fc4ba6 72 }
mja054 0:1efeb3fc4ba6 73 break;
mja054 0:1efeb3fc4ba6 74 case 'd':
mja054 0:1efeb3fc4ba6 75 t = 0;
mja054 0:1efeb3fc4ba6 76 if (val == 0)
mja054 0:1efeb3fc4ba6 77 ftouch = false;
mja054 0:1efeb3fc4ba6 78 else {
mja054 0:1efeb3fc4ba6 79 ftouch = true;
mja054 0:1efeb3fc4ba6 80 tval = val - 1;
mja054 0:1efeb3fc4ba6 81 }
mja054 0:1efeb3fc4ba6 82 break;
mja054 0:1efeb3fc4ba6 83 }
mja054 0:1efeb3fc4ba6 84 for (j = 0; j < 5; j++)
mja054 0:1efeb3fc4ba6 85 input[j] = 'k';
mja054 0:1efeb3fc4ba6 86 }
mja054 0:1efeb3fc4ba6 87
mja054 0:1efeb3fc4ba6 88 void read()
mja054 0:1efeb3fc4ba6 89 {
mja054 0:1efeb3fc4ba6 90 char c = (char) pc.getc();
mja054 0:1efeb3fc4ba6 91
mja054 0:1efeb3fc4ba6 92 if (c >= 'a' && c <= 'd')
mja054 0:1efeb3fc4ba6 93 slcd.printf("%c", c);
mja054 0:1efeb3fc4ba6 94 else if (c == 'z')
mja054 0:1efeb3fc4ba6 95 slcd.printf("%c",'n');
mja054 0:1efeb3fc4ba6 96 else if (c >= '0' && c <= '9')
mja054 0:1efeb3fc4ba6 97 slcd.printf("%c", c);
mja054 0:1efeb3fc4ba6 98 else
mja054 0:1efeb3fc4ba6 99 slcd.printf("%c", 'E');
mja054 0:1efeb3fc4ba6 100 if (i == 0 && c >= 'a' && c <= 'd') {
mja054 0:1efeb3fc4ba6 101 input[i++] = c;
mja054 0:1efeb3fc4ba6 102 } else if (i >= 1 && i <= 3 && c >= '0' && c <= '9') {
mja054 0:1efeb3fc4ba6 103 input[i++] = c;
mja054 0:1efeb3fc4ba6 104 } else if (i == 4 && c == 'z') {
mja054 0:1efeb3fc4ba6 105 transform();
mja054 0:1efeb3fc4ba6 106 i = 0;
mja054 0:1efeb3fc4ba6 107 } else {
mja054 0:1efeb3fc4ba6 108 i = 0;
mja054 0:1efeb3fc4ba6 109 red = !red;
mja054 0:1efeb3fc4ba6 110 for (int j = 0; j < 5; j++) {
mja054 0:1efeb3fc4ba6 111 input[j] = 'k';
mja054 0:1efeb3fc4ba6 112 }
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
mja054 0:1efeb3fc4ba6 121 pc.baud(BAUD_RATE);
mja054 0:1efeb3fc4ba6 122 pc.attach(read);
mja054 0:1efeb3fc4ba6 123
mja054 0:1efeb3fc4ba6 124 while(true) {
mja054 0:1efeb3fc4ba6 125
mja054 0:1efeb3fc4ba6 126 tt.reset();
mja054 0:1efeb3fc4ba6 127 red = 1;
mja054 0:1efeb3fc4ba6 128 green = 0;
mja054 0:1efeb3fc4ba6 129 wait(0.2);
mja054 0:1efeb3fc4ba6 130 red = 0;
mja054 0:1efeb3fc4ba6 131 green = 1;
mja054 0:1efeb3fc4ba6 132 wait(0.2);
mja054 0:1efeb3fc4ba6 133
mja054 0:1efeb3fc4ba6 134 tt.start();
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 0:1efeb3fc4ba6 141 pc.printf("a=%f,%f,%f\n", acce1, acce2, acce3);
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 0:1efeb3fc4ba6 151 pc.printf("m=%f,%f,%f\n", magma1, magma2, magma3);
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 0:1efeb3fc4ba6 159 pc.printf("l=%f\n", light);
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 0:1efeb3fc4ba6 167 pc.printf("t=%f\n", touch);
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 0:1efeb3fc4ba6 180 }