![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
abc
Dependencies: mbed-rtos mbed pixy pixy_test
Fork of aUtO_volume_v4 by
main.cpp@7:309840290ee8, 2015-12-11 (annotated)
- Committer:
- jfields
- Date:
- Fri Dec 11 06:55:12 2015 +0000
- Revision:
- 7:309840290ee8
- Parent:
- 6:75156f40a227
abc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jfields | 0:6618ecb9567e | 1 | #include "mbed.h" |
jfields | 0:6618ecb9567e | 2 | #include "Pixy.h" |
jfields | 6:75156f40a227 | 3 | #include "rtos.h" |
jfields | 0:6618ecb9567e | 4 | |
jfields | 1:5302a23c97c4 | 5 | // init board |
jfields | 0:6618ecb9567e | 6 | Pixy pixy(Pixy::SPI, p11, p12, p13); |
jfields | 0:6618ecb9567e | 7 | Serial pc(USBTX, USBRX); |
jfields | 4:fe091424b406 | 8 | DigitalOut pin1(p24); |
jfields | 4:fe091424b406 | 9 | DigitalOut pin2(p25); |
jfields | 0:6618ecb9567e | 10 | |
jfields | 3:56a1264e43aa | 11 | #if defined(TARGET_LPC1768) |
jfields | 3:56a1264e43aa | 12 | Serial blue(p9, p10); // TX, RX |
jfields | 3:56a1264e43aa | 13 | //Serial blue(p13, p14); // TX, RX |
jfields | 3:56a1264e43aa | 14 | #elif defined(TARGET_LPC4330_M4) |
jfields | 3:56a1264e43aa | 15 | Serial blue(P6_4, P6_5); // UART0_TX, UART0_RX |
jfields | 3:56a1264e43aa | 16 | //Serial blue(P2_3, P2_4); // UART3_TX, UART3_RX |
jfields | 3:56a1264e43aa | 17 | #endif |
jfields | 3:56a1264e43aa | 18 | |
jfields | 1:5302a23c97c4 | 19 | // global vars |
jfields | 1:5302a23c97c4 | 20 | int num_readings = 0; |
jfields | 1:5302a23c97c4 | 21 | int total_y = 0; |
jfields | 7:309840290ee8 | 22 | int numOverflows = 0; |
jfields | 7:309840290ee8 | 23 | float total_UO = 0.0; |
jfields | 6:75156f40a227 | 24 | float result_level = 0.0; // mL |
jfields | 6:75156f40a227 | 25 | float result_hourly = 0.0; // mL/hr |
jfields | 6:75156f40a227 | 26 | float prev_level = 0.0; |
jfields | 6:75156f40a227 | 27 | |
jfields | 6:75156f40a227 | 28 | int gotFirstReading = 0; |
jfields | 6:75156f40a227 | 29 | int isDraining = 0; |
jfields | 7:309840290ee8 | 30 | int gotFirstHourly = 0; |
jfields | 1:5302a23c97c4 | 31 | |
jfields | 4:fe091424b406 | 32 | // funcs and threads |
jfields | 1:5302a23c97c4 | 33 | void get_volume(int i); |
jfields | 6:75156f40a227 | 34 | void adjustRate(); |
jfields | 4:fe091424b406 | 35 | void get_hourly(void const *args); |
jfields | 6:75156f40a227 | 36 | void check_overflow(); |
jfields | 6:75156f40a227 | 37 | RtosTimer * rate_thread; |
jfields | 1:5302a23c97c4 | 38 | |
jfields | 0:6618ecb9567e | 39 | int main() { |
jfields | 1:5302a23c97c4 | 40 | |
jfields | 3:56a1264e43aa | 41 | // init bluetooth |
jfields | 3:56a1264e43aa | 42 | blue.baud(9600); |
jfields | 3:56a1264e43aa | 43 | |
jfields | 3:56a1264e43aa | 44 | // init pc |
jfields | 3:56a1264e43aa | 45 | pc.baud(9600); |
jfields | 3:56a1264e43aa | 46 | pc.printf("Bluetooth Start\r\n"); |
jfields | 3:56a1264e43aa | 47 | pc.printf("ready\n\r"); |
jfields | 3:56a1264e43aa | 48 | |
jfields | 1:5302a23c97c4 | 49 | // init pixy |
jfields | 0:6618ecb9567e | 50 | pixy.setSerialOutput(&pc); |
jfields | 1:5302a23c97c4 | 51 | |
jfields | 6:75156f40a227 | 52 | // start with pumps off |
jfields | 6:75156f40a227 | 53 | pin1 = 0; |
jfields | 4:fe091424b406 | 54 | pin2 = 0; |
jfields | 4:fe091424b406 | 55 | |
jfields | 4:fe091424b406 | 56 | // start hourly thread |
jfields | 6:75156f40a227 | 57 | rate_thread = new RtosTimer(get_hourly, osTimerPeriodic, (void *)0); |
jfields | 7:309840290ee8 | 58 | rate_thread->start(15000); |
jfields | 4:fe091424b406 | 59 | |
jfields | 0:6618ecb9567e | 60 | while (1) { |
jfields | 1:5302a23c97c4 | 61 | |
jfields | 1:5302a23c97c4 | 62 | // get pixy data |
jfields | 0:6618ecb9567e | 63 | uint16_t blocks; |
jfields | 0:6618ecb9567e | 64 | blocks = pixy.getBlocks(); |
jfields | 1:5302a23c97c4 | 65 | |
jfields | 1:5302a23c97c4 | 66 | // store data |
jfields | 0:6618ecb9567e | 67 | if (blocks) { |
jfields | 1:5302a23c97c4 | 68 | for (int j = 0; j < blocks; j++) { |
jfields | 1:5302a23c97c4 | 69 | get_volume(pixy.blocks[j].y); |
jfields | 0:6618ecb9567e | 70 | } |
jfields | 0:6618ecb9567e | 71 | } |
jfields | 6:75156f40a227 | 72 | |
jfields | 6:75156f40a227 | 73 | // check for overflow |
jfields | 6:75156f40a227 | 74 | check_overflow(); |
jfields | 6:75156f40a227 | 75 | |
jfields | 6:75156f40a227 | 76 | // adjust rate |
jfields | 7:309840290ee8 | 77 | //if (!isDraining) adjustRate(); |
jfields | 1:5302a23c97c4 | 78 | } |
jfields | 0:6618ecb9567e | 79 | } |
jfields | 1:5302a23c97c4 | 80 | |
jfields | 6:75156f40a227 | 81 | void adjustRate() { |
jfields | 7:309840290ee8 | 82 | |
jfields | 7:309840290ee8 | 83 | if (gotFirstHourly) { |
jfields | 7:309840290ee8 | 84 | if (result_hourly < 60.0) { |
jfields | 7:309840290ee8 | 85 | |
jfields | 7:309840290ee8 | 86 | } |
jfields | 7:309840290ee8 | 87 | else if (result_hourly < 120.0) { |
jfields | 7:309840290ee8 | 88 | |
jfields | 7:309840290ee8 | 89 | } |
jfields | 7:309840290ee8 | 90 | else { |
jfields | 7:309840290ee8 | 91 | |
jfields | 7:309840290ee8 | 92 | } |
jfields | 7:309840290ee8 | 93 | } |
jfields | 6:75156f40a227 | 94 | } |
jfields | 6:75156f40a227 | 95 | |
jfields | 6:75156f40a227 | 96 | void check_overflow() { |
jfields | 7:309840290ee8 | 97 | if (result_level >= 30.0 && !isDraining) { //led1 = 1; |
jfields | 6:75156f40a227 | 98 | pin1 = 0; |
jfields | 6:75156f40a227 | 99 | pin2 = 1; |
jfields | 6:75156f40a227 | 100 | isDraining = 1; |
jfields | 7:309840290ee8 | 101 | numOverflows++; |
jfields | 6:75156f40a227 | 102 | } |
jfields | 7:309840290ee8 | 103 | if (result_level < 4.0) { |
jfields | 6:75156f40a227 | 104 | pin2 = 0; |
jfields | 6:75156f40a227 | 105 | pin1 = 1; |
jfields | 6:75156f40a227 | 106 | isDraining = 0; |
jfields | 6:75156f40a227 | 107 | } |
jfields | 6:75156f40a227 | 108 | } |
jfields | 6:75156f40a227 | 109 | |
jfields | 6:75156f40a227 | 110 | void get_hourly(void const *args) { |
jfields | 6:75156f40a227 | 111 | pc.printf("calc'ing hourly...%f %f\r\n", result_level, prev_level); |
jfields | 6:75156f40a227 | 112 | if (!isDraining && gotFirstReading) { |
jfields | 7:309840290ee8 | 113 | float temp = (result_level-prev_level)*4.0; |
jfields | 7:309840290ee8 | 114 | if (temp >= 0) { |
jfields | 7:309840290ee8 | 115 | result_hourly = temp; |
jfields | 7:309840290ee8 | 116 | prev_level = result_level; |
jfields | 7:309840290ee8 | 117 | gotFirstHourly = 1; |
jfields | 7:309840290ee8 | 118 | } |
jfields | 6:75156f40a227 | 119 | } |
jfields | 7:309840290ee8 | 120 | if (isDraining) gotFirstReading = 0; |
jfields | 4:fe091424b406 | 121 | } |
jfields | 4:fe091424b406 | 122 | |
jfields | 1:5302a23c97c4 | 123 | void get_volume(int y) { |
jfields | 1:5302a23c97c4 | 124 | |
jfields | 1:5302a23c97c4 | 125 | // update data |
jfields | 1:5302a23c97c4 | 126 | total_y += y; |
jfields | 1:5302a23c97c4 | 127 | num_readings++; |
jfields | 1:5302a23c97c4 | 128 | |
jfields | 1:5302a23c97c4 | 129 | // output results |
jfields | 4:fe091424b406 | 130 | if (num_readings >= 10) { |
jfields | 2:1354ce60c0b9 | 131 | float average_y = (float)total_y/num_readings; |
jfields | 6:75156f40a227 | 132 | result_level = -0.2642*average_y + 38.453; |
jfields | 6:75156f40a227 | 133 | |
jfields | 7:309840290ee8 | 134 | if (!gotFirstReading && !isDraining) { |
jfields | 6:75156f40a227 | 135 | gotFirstReading = 1; |
jfields | 6:75156f40a227 | 136 | prev_level = result_level; |
jfields | 6:75156f40a227 | 137 | } |
jfields | 1:5302a23c97c4 | 138 | |
jfields | 3:56a1264e43aa | 139 | // to pc |
jfields | 5:06fa76d9d7bd | 140 | pc.printf("y = %d, num_readings = %d, average = %.2f, mL = %.2f, rate = %.2f\r\n", y, num_readings, average_y, result_level, result_hourly); |
jfields | 4:fe091424b406 | 141 | pc.printf("%.2f %.2f\r\n", result_level, result_hourly); |
jfields | 3:56a1264e43aa | 142 | |
jfields | 3:56a1264e43aa | 143 | // to bluetooth |
jfields | 7:309840290ee8 | 144 | if (!isDraining) total_UO = result_level+(float)numOverflows*26.0; |
jfields | 7:309840290ee8 | 145 | blue.printf("%.2f %.2f\r\n", total_UO, result_hourly); |
jfields | 3:56a1264e43aa | 146 | |
jfields | 1:5302a23c97c4 | 147 | // reset vars |
jfields | 1:5302a23c97c4 | 148 | num_readings = 0; |
jfields | 1:5302a23c97c4 | 149 | total_y = 0; |
jfields | 1:5302a23c97c4 | 150 | } |
jfields | 1:5302a23c97c4 | 151 | } |