Junaid Ahmed
/
202A_HW1
Configuring sensors dynamically using serial bus from the host computer.
final_code.cpp
- Committer:
- mja054
- Date:
- 2014-02-15
- Revision:
- 2:a422a41dbea1
- Parent:
- 0:1efeb3fc4ba6
File content as of revision 2:a422a41dbea1:
#include "mbed.h" #include "MMA8451Q.h" #include "MAG3110.h" #include "SLCD.h" #include "TSISensor.h" #define MAX_TIME 10 #define BAUD_RATE 230400 //115200 #define MMA8451_I2C_ADDRESS (0x1d << 1) #define MAG3110_I2C_ADDRESS (0x0e << 1) Serial pc(USBTX, USBRX); MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); MAG3110 mag(PTE25, PTE24, MAG3110_I2C_ADDRESS); AnalogIn lightSensor(PTE22); DigitalOut green(LED1); DigitalOut red(LED2); Timer tt; Timer epoch; SLCD slcd; TSISensor tsi; /* Sensortype: 'a' - accelerometer 'b' - maganetometer 'c' - light 'd' - touch rate: 0:1:100 (min sampling period =10ms) rate = 0 => sensor switched off */ int i = 0; char input[10]; // sensorType, 3bytes - rate, 'z' int aval=0, mval=0, lval=0, tval=0; int a=aval, m=mval, l=lval, t = tval; bool facc = true, fmag = true, flight = true, ftouch = true; void transform() { int j, val = 0; for (j = 1; j < 4; j++) { val = val * 10 + (input[j] - '0'); } switch (input[0]) { case 'a': a = 0; if (val == 0) facc = false; else { facc = true; aval = val - 1; } break; case 'b': m = 0; if (val == 0) fmag = false; else { fmag = true; mval = val - 1; } break; case 'c': l = 0; if (val == 0) flight = false; else { flight = true; lval = val - 1; } break; case 'd': t = 0; if (val == 0) ftouch = false; else { ftouch = true; tval = val - 1; } break; } for (j = 0; j < 5; j++) input[j] = 'k'; } void read() { char c = (char) pc.getc(); if (c >= 'a' && c <= 'd') slcd.printf("%c", c); else if (c == 'z') slcd.printf("%c",'n'); else if (c >= '0' && c <= '9') slcd.printf("%c", c); else slcd.printf("%c", 'E'); if (i == 0 && c >= 'a' && c <= 'd') { input[i++] = c; } else if (i >= 1 && i <= 3 && c >= '0' && c <= '9') { input[i++] = c; } else if (i == 4 && c == 'z') { transform(); i = 0; } else { i = 0; red = !red; for (int j = 0; j < 5; j++) { input[j] = 'k'; } } } int main() { float acce1, acce2, acce3, magma1, magma2, magma3, light, touch; pc.baud(BAUD_RATE); pc.attach(read); epoch.start(); while(true) { tt.reset(); red = 1; green = 0; wait(0.2); red = 0; green = 1; wait(0.2); tt.start(); float time_elapsed = epoch.read(); int time = tt.read_ms(); if (facc) { if (a == 0){ acce1 = acc.getAccX(); acce2 = acc.getAccY(); acce3 = acc.getAccZ(); pc.printf("a=%f,%f,%f,z%f\n", acce1, acce2, acce3, time_elapsed); a = aval; } else a--; } if (fmag) { if (m == 0){ magma1 = mag.readVal(MAG_OUT_X_MSB); magma2 = mag.readVal(MAG_OUT_Y_MSB); magma3 = mag.readVal(MAG_OUT_Z_MSB); pc.printf("m=%f,%f,%f,z%f\n", magma1, magma2, magma3, time_elapsed); m =mval; } else m--; } if (flight) { if(l == 0){ light = lightSensor.read(); pc.printf("l=%f,z%f\n", light, time_elapsed); l=lval; } else l--; } if (ftouch) { if (t == 0){ touch = tsi.readPercentage(); pc.printf("t=%f,z%f\n", touch, time_elapsed); t= tval; } else t--; } int time1 = tt.read_ms(); tt.stop(); // pc.printf("tt:%d\n", time1-time); if(MAX_TIME < time1-time) ; else wait((MAX_TIME-(time1-time))/1000.0); } }