Junaid Ahmed / Mbed 2 deprecated 202A_HW1

Dependencies:   MAG3110 mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers final_code.cpp Source File

final_code.cpp

00001 #include "mbed.h"
00002 #include "MMA8451Q.h"
00003 #include "MAG3110.h"
00004 #include "SLCD.h"
00005 #include "TSISensor.h"
00006 
00007 #define MAX_TIME 10
00008 #define BAUD_RATE 230400 //115200
00009 #define MMA8451_I2C_ADDRESS (0x1d << 1)
00010 #define MAG3110_I2C_ADDRESS (0x0e << 1)
00011     
00012 Serial pc(USBTX, USBRX);
00013 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
00014 MAG3110 mag(PTE25, PTE24, MAG3110_I2C_ADDRESS);
00015 AnalogIn lightSensor(PTE22);
00016 DigitalOut green(LED1);
00017 DigitalOut red(LED2);
00018 Timer tt;
00019 Timer epoch;
00020 SLCD slcd;
00021 TSISensor tsi;
00022 
00023 /*
00024     Sensortype:
00025     'a' - accelerometer
00026     'b' - maganetometer
00027     'c' - light
00028     'd' - touch
00029     
00030     rate: 0:1:100 (min sampling period =10ms)
00031     rate = 0 => sensor switched off
00032 */
00033 int i = 0;
00034 char input[10]; // sensorType, 3bytes - rate, 'z'
00035 int aval=0, mval=0, lval=0, tval=0;
00036 int a=aval, m=mval, l=lval, t = tval;
00037 bool facc = true, fmag = true, flight = true, ftouch = true;
00038 
00039 void transform()
00040 {
00041     int j, val = 0;
00042     
00043     for (j = 1; j < 4; j++) {
00044         val = val * 10 + (input[j] - '0');
00045     }
00046 
00047     switch (input[0]) {
00048         case 'a':
00049             a = 0;
00050             if (val == 0)
00051                 facc = false;
00052             else {
00053                 facc = true;
00054                 aval = val - 1;
00055             }
00056             break;
00057         case 'b':
00058             m = 0;
00059             if (val == 0)
00060                 fmag = false;
00061             else {
00062                 fmag = true;
00063                 mval = val - 1;
00064             }
00065             break;
00066         case 'c': 
00067             l = 0;
00068             if (val == 0)
00069                 flight = false;
00070             else {
00071                 flight = true;
00072                 lval = val - 1;
00073             }
00074             break;
00075         case 'd': 
00076             t = 0;
00077             if (val == 0)
00078                 ftouch = false;
00079             else {
00080                 ftouch = true;
00081                 tval = val - 1;
00082             }
00083             break;
00084     }
00085     for (j = 0; j < 5; j++)
00086         input[j] = 'k';
00087 }
00088 
00089 void read()
00090 {
00091     char c = (char) pc.getc();
00092 
00093     if (c >= 'a' && c <= 'd')
00094         slcd.printf("%c", c);
00095     else if (c == 'z')
00096         slcd.printf("%c",'n');
00097     else if (c >= '0' && c <= '9')
00098         slcd.printf("%c", c);
00099     else
00100         slcd.printf("%c", 'E');
00101     if (i == 0 && c >= 'a' && c <= 'd') {
00102             input[i++] = c;
00103     } else if (i >= 1 && i <= 3 && c >= '0' && c <= '9') {
00104             input[i++] = c;
00105     } else if (i == 4 && c == 'z') {
00106         transform();
00107         i = 0;
00108     } else {
00109         i = 0;
00110         red = !red;
00111         for (int j = 0; j < 5; j++) {
00112             input[j] = 'k';
00113         }
00114     }
00115 }
00116 
00117 int main()
00118 {
00119     float acce1, acce2, acce3, magma1, magma2, magma3, light, touch;
00120     pc.baud(BAUD_RATE);
00121     pc.attach(read);
00122 
00123     epoch.start();
00124     while(true) {    
00125         tt.reset();
00126         red = 1;
00127         green = 0;
00128         wait(0.2);
00129         red = 0;
00130         green = 1;
00131         wait(0.2);
00132 
00133         tt.start();
00134         float time_elapsed = epoch.read();
00135         int time = tt.read_ms();
00136         if (facc) {
00137             if (a == 0){
00138                  acce1 = acc.getAccX();
00139                  acce2 = acc.getAccY();
00140                  acce3 = acc.getAccZ();
00141                  pc.printf("a=%f,%f,%f,z%f\n", acce1, acce2, acce3, time_elapsed);
00142                  a = aval;
00143             } else
00144                 a--;
00145         }
00146         if (fmag) {
00147             if (m == 0){
00148                 magma1 = mag.readVal(MAG_OUT_X_MSB);
00149                 magma2 = mag.readVal(MAG_OUT_Y_MSB);
00150                 magma3 = mag.readVal(MAG_OUT_Z_MSB);
00151                 pc.printf("m=%f,%f,%f,z%f\n", magma1, magma2, magma3, time_elapsed);
00152                 m =mval;
00153             } else
00154                 m--;
00155         }
00156         if (flight) {
00157             if(l == 0){
00158                 light = lightSensor.read();
00159                 pc.printf("l=%f,z%f\n", light, time_elapsed);
00160                 l=lval;
00161             } else
00162                 l--;
00163         }
00164         if (ftouch) {
00165             if (t == 0){
00166                 touch = tsi.readPercentage();
00167                 pc.printf("t=%f,z%f\n", touch, time_elapsed);
00168                 t= tval;
00169             } else
00170                 t--;
00171         }
00172         int time1 = tt.read_ms();
00173         tt.stop();
00174 //        pc.printf("tt:%d\n", time1-time);
00175         if(MAX_TIME < time1-time)
00176             ;
00177         else
00178             wait((MAX_TIME-(time1-time))/1000.0);
00179     }
00180 }