Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Tue Jul 12 2022 21:36:10 by
1.7.2