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.
Diff: main.cpp
- Revision:
- 3:7e158df628f1
- Parent:
- 2:66ab94f69a1a
- Child:
- 4:fd25ded02b89
--- a/main.cpp Wed Apr 24 04:35:34 2019 +0000 +++ b/main.cpp Thu Apr 25 22:06:22 2019 +0000 @@ -1,64 +1,252 @@ #include "mbed.h" -DigitalOut myled(LED1); -DigitalOut myled2(LED2); -AnalogIn senseMe1(p20); +#define NELEMS(x) (sizeof(x) / sizeof((x)[0])) + +DigitalOut led_w(p29); +DigitalOut led_e(p28); +DigitalOut led_s(p25); +DigitalOut led_n(p30); +DigitalOut led_c(p27); + +AnalogIn senseW(p18); +AnalogIn senseE(p16); +AnalogIn senseS(p19); +AnalogIn senseN(p17); +AnalogIn senseC(p20); + +/* + id1 + +id2 id4 id0 + + id3 +*/ + +int main() +{ + + int num_pads = 5; + int pad_buffer_size = 5; + + float s_w; + float s_e; + float s_s; + float s_n; + float s_c; -AnalogIn sense0(p16); -AnalogIn sense1(p17); -AnalogIn sense2(p18); -AnalogIn sense3(p19); -AnalogIn sense4(p20); + int avg_w; + int avg_e; + int avg_s; + int avg_n; + int avg_c; + + int pad_w_i; + int pad_e_i; + int pad_s_i; + int pad_n_i; + int pad_c_i; + + int* padw_data = new int[pad_buffer_size]; + int* pade_data = new int[pad_buffer_size]; + int* pads_data = new int[pad_buffer_size]; + int* padn_data = new int[pad_buffer_size]; + int* padc_data = new int[pad_buffer_size]; -DigitalOut pump(p21); + int newest_w; + int newest_e; + int newest_s; + int newest_n; + int newest_c; + + int total_w; + int total_e; + int total_s; + int total_n; + int total_c; + + int outlier_countW; + int outlier_countE; + int outlier_countS; + int outlier_countN; + int outlier_countC; -AnalogIn sense(p15); + /* + 0 : east + 1 : north + 2 : west + 3 : south + 4 : center + */ -int main() { - char pumpOn = 0; - pump.write(1); + float* readings = new float[num_pads]; + readings[0] = s_e; + readings[1] = s_n; + readings[2] = s_w; + readings[3] = s_s; + readings[4] = s_c; + + int* averages = new int[num_pads]; + averages[0] = avg_e; + averages[1] = avg_n; + averages[2] = avg_w; + averages[3] = avg_s; + averages[4] = avg_c; + + + int* indices = new int[num_pads]; + indices[0] = pad_e_i; + indices[1] = pad_n_i; + indices[2] = pad_w_i; + indices[3] = pad_s_i; + indices[4] = pad_c_i; + + int** data_arrs = new int*[num_pads]; + data_arrs[0] = pade_data; + data_arrs[1] = padn_data; + data_arrs[2] = padw_data; + data_arrs[3] = pads_data; + data_arrs[4] = padc_data; + + int* newest_vals = new int[num_pads]; + newest_vals[0] = newest_e; + newest_vals[1] = newest_n; + newest_vals[2] = newest_w; + newest_vals[3] = newest_s; + newest_vals[4] = newest_c; + + int* totals = new int[num_pads]; + totals[0] = total_e; + totals[1] = total_n; + totals[2] = total_w; + totals[3] = total_s; + totals[4] = total_c; + + int* outlier_cts = new int[num_pads]; + outlier_cts[0] = outlier_countE; + outlier_cts[1] = outlier_countN; + outlier_cts[2] = outlier_countW; + outlier_cts[3] = outlier_countS; + outlier_cts[4] = outlier_countC; + + int i; + + //char* out = new char[40]; + + //int avg; while(1) { - - float s = sense.read(); - printf("%1.2f\n", s); - wait(1); - + s_w = senseW.read(); + s_e = senseE.read(); + s_n = senseN.read(); + s_s = senseS.read(); + s_c = senseC.read(); /* - myled = 1; - wait(0.2); - myled = 0; - myled2 = 1; - wait(0.2); - myled2 = 0; - float se0 = sense0.read(); - float se1 = sense1.read(); - float se2 = sense2.read(); - float se3 = sense3.read(); - float se4 = sense4.read(); - printf("%1.2f", se0); - printf(" | %1.2f", se1); - printf(" | %1.2f", se2); - printf(" | %1.2f", se3); - printf(" | %1.2f", se4); - float sum = se0 + se1 + se2 + se3 + se4; - if (sum > 4.85) { - printf("|bacK\n"); - } else if (sum > 2.5) { - printf("|sIDE\n"); - } else { - printf("|no\n"); - } - wait(1); + newest_w = (int) s_w * 100; + newest_e = (int) s_e * 100; + newest_n = (int) s_n * 100; + newest_s = (int) s_s * 100; + newest_c = (int) s_c * 100; */ + printf(" %1.2f \n", s_n); + printf("%1.2f %1.2f %1.2f\n", s_w, s_c, s_e); + printf (" %1.2f \n\n", s_s); /* - if (pumpOn) { - pump = 0; - pumpOn = 0; + for (i=0; i<num_pads; i++) { + + if (i==0) { + readings[0] = senseE.read(); + } else if (i==1) { + readings[1] = senseN.read(); + } else if (i==2) { + readings[2] = senseW.read(); + } else if (i==3) { + readings[3] = senseS.read(); + } else if (i==4) { + readings[4] = senseC.read(); + } + + // maybe << 7 to make this faster? + newest_vals[i] = readings[i] * 100; + + + + if (indices[i] < pad_buffer_size - 1) { + data_arrs[i][indices[i]] = newest_vals[i]; + totals[i] += newest_vals[i]; + indices[i]++; + } else { + // get index of last updated value + indices[i] = (indices[i] + 1) % pad_buffer_size; + // remove oldest value from the total + totals[i] -= data_arrs[i][indices[i]]; + // update loc. of oldest value with new value + data_arrs[i][indices[i]] = newest_vals[i]; + // update total w/ newest value + totals[i] += newest_vals[i]; + } + averages[i] = totals[i] / pad_buffer_size; + } + printf(" %2i \n", (int) newest_vals[1]); + printf("%2i %2i %2i\n", (int) newest_vals[2], (int) newest_vals[4], (int) newest_vals[0]); + printf (" %2i \n\n", (int) newest_vals[3]); + + // is newest E value more than 1.5x average? + if (newest_vals[0] > averages[0] + (averages[0] / 2)) { + if (outlier_cts[0] == 2) { + led_e = 1; + } else { + outlier_cts[0]++; + } } else { - pump = 1; - pumpOn = 1; + outlier_cts[0] = 0; + led_e = 0; + } + + if (newest_vals[1] > averages[1] + (averages[1] / 2)) { + if (outlier_cts[1] == 2) { + led_n = 1; + } else { + outlier_cts[1]++; + } + } else { + outlier_cts[1] = 0; + led_n = 0; + } + + if (newest_vals[2] > averages[2] + (averages[2] / 2)) { + if (outlier_cts[2] == 2) { + led_w = 1; + } else { + outlier_cts[2]++; + } + } else { + outlier_cts[2] = 0; + led_w = 0; + } + + if (newest_vals[3] > averages[3] + (averages[3] / 2)) { + if (outlier_cts[3] == 2) { + led_s = 1; + } else { + outlier_cts[3]++; + } + } else { + outlier_cts[3] = 0; + led_s = 0; + } + + if (newest_vals[4] > averages[4] + (averages[4] / 2)) { + if (outlier_cts[4] == 2) { + led_c = 1; + } else { + outlier_cts[4]++; + } + } else { + outlier_cts[4] = 0; + led_c = 0; } */ - } -} + wait(1); + + } + } \ No newline at end of file