Junaid Ahmed
/
202A_HW1
Configuring sensors dynamically using serial bus from the host computer.
final_code.cpp@2:a422a41dbea1, 2014-02-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |