![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
abc
Dependencies: mbed-rtos mbed pixy pixy_test
Fork of aUtO_volume_v3 by
main.cpp@6:75156f40a227, 2015-12-10 (annotated)
- Committer:
- jfields
- Date:
- Thu Dec 10 04:53:50 2015 +0000
- Revision:
- 6:75156f40a227
- Parent:
- 5:06fa76d9d7bd
aa
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 | 6:75156f40a227 | 22 | float result_level = 0.0; // mL |
jfields | 6:75156f40a227 | 23 | float result_hourly = 0.0; // mL/hr |
jfields | 6:75156f40a227 | 24 | float prev_level = 0.0; |
jfields | 6:75156f40a227 | 25 | |
jfields | 6:75156f40a227 | 26 | int gotFirstReading = 0; |
jfields | 6:75156f40a227 | 27 | int isDraining = 0; |
jfields | 1:5302a23c97c4 | 28 | |
jfields | 4:fe091424b406 | 29 | // funcs and threads |
jfields | 1:5302a23c97c4 | 30 | void get_volume(int i); |
jfields | 6:75156f40a227 | 31 | void adjustRate(); |
jfields | 4:fe091424b406 | 32 | void get_hourly(void const *args); |
jfields | 6:75156f40a227 | 33 | void check_overflow(); |
jfields | 6:75156f40a227 | 34 | RtosTimer * rate_thread; |
jfields | 1:5302a23c97c4 | 35 | |
jfields | 0:6618ecb9567e | 36 | int main() { |
jfields | 1:5302a23c97c4 | 37 | |
jfields | 3:56a1264e43aa | 38 | // init bluetooth |
jfields | 3:56a1264e43aa | 39 | blue.baud(9600); |
jfields | 3:56a1264e43aa | 40 | |
jfields | 3:56a1264e43aa | 41 | // init pc |
jfields | 3:56a1264e43aa | 42 | pc.baud(9600); |
jfields | 3:56a1264e43aa | 43 | pc.printf("Bluetooth Start\r\n"); |
jfields | 3:56a1264e43aa | 44 | pc.printf("ready\n\r"); |
jfields | 3:56a1264e43aa | 45 | |
jfields | 1:5302a23c97c4 | 46 | // init pixy |
jfields | 0:6618ecb9567e | 47 | pixy.setSerialOutput(&pc); |
jfields | 1:5302a23c97c4 | 48 | |
jfields | 6:75156f40a227 | 49 | // start with pumps off |
jfields | 6:75156f40a227 | 50 | pin1 = 0; |
jfields | 4:fe091424b406 | 51 | pin2 = 0; |
jfields | 4:fe091424b406 | 52 | |
jfields | 4:fe091424b406 | 53 | // start hourly thread |
jfields | 6:75156f40a227 | 54 | rate_thread = new RtosTimer(get_hourly, osTimerPeriodic, (void *)0); |
jfields | 6:75156f40a227 | 55 | rate_thread->start(10000); |
jfields | 4:fe091424b406 | 56 | |
jfields | 0:6618ecb9567e | 57 | while (1) { |
jfields | 1:5302a23c97c4 | 58 | |
jfields | 1:5302a23c97c4 | 59 | // get pixy data |
jfields | 0:6618ecb9567e | 60 | uint16_t blocks; |
jfields | 0:6618ecb9567e | 61 | blocks = pixy.getBlocks(); |
jfields | 1:5302a23c97c4 | 62 | |
jfields | 1:5302a23c97c4 | 63 | // store data |
jfields | 0:6618ecb9567e | 64 | if (blocks) { |
jfields | 1:5302a23c97c4 | 65 | for (int j = 0; j < blocks; j++) { |
jfields | 1:5302a23c97c4 | 66 | get_volume(pixy.blocks[j].y); |
jfields | 0:6618ecb9567e | 67 | } |
jfields | 0:6618ecb9567e | 68 | } |
jfields | 6:75156f40a227 | 69 | |
jfields | 6:75156f40a227 | 70 | // check for overflow |
jfields | 6:75156f40a227 | 71 | check_overflow(); |
jfields | 6:75156f40a227 | 72 | |
jfields | 6:75156f40a227 | 73 | // adjust rate |
jfields | 6:75156f40a227 | 74 | if (!isDraining) adjustRate(); |
jfields | 1:5302a23c97c4 | 75 | } |
jfields | 0:6618ecb9567e | 76 | } |
jfields | 1:5302a23c97c4 | 77 | |
jfields | 6:75156f40a227 | 78 | void adjustRate() { |
jfields | 6:75156f40a227 | 79 | |
jfields | 6:75156f40a227 | 80 | } |
jfields | 6:75156f40a227 | 81 | |
jfields | 6:75156f40a227 | 82 | void check_overflow() { |
jfields | 6:75156f40a227 | 83 | if (result_level >= 30.0) { //led1 = 1; |
jfields | 6:75156f40a227 | 84 | pin1 = 0; |
jfields | 6:75156f40a227 | 85 | pin2 = 1; |
jfields | 6:75156f40a227 | 86 | isDraining = 1; |
jfields | 6:75156f40a227 | 87 | } |
jfields | 6:75156f40a227 | 88 | if (result_level < 2.0) { |
jfields | 6:75156f40a227 | 89 | pin2 = 0; |
jfields | 6:75156f40a227 | 90 | pin1 = 1; |
jfields | 6:75156f40a227 | 91 | isDraining = 0; |
jfields | 6:75156f40a227 | 92 | } |
jfields | 6:75156f40a227 | 93 | } |
jfields | 6:75156f40a227 | 94 | |
jfields | 6:75156f40a227 | 95 | void get_hourly(void const *args) { |
jfields | 6:75156f40a227 | 96 | pc.printf("calc'ing hourly...%f %f\r\n", result_level, prev_level); |
jfields | 6:75156f40a227 | 97 | if (!isDraining && gotFirstReading) { |
jfields | 6:75156f40a227 | 98 | result_hourly = (result_level-prev_level)*6.0; |
jfields | 6:75156f40a227 | 99 | prev_level = result_level; |
jfields | 6:75156f40a227 | 100 | } |
jfields | 4:fe091424b406 | 101 | } |
jfields | 4:fe091424b406 | 102 | |
jfields | 1:5302a23c97c4 | 103 | void get_volume(int y) { |
jfields | 1:5302a23c97c4 | 104 | |
jfields | 1:5302a23c97c4 | 105 | // update data |
jfields | 1:5302a23c97c4 | 106 | total_y += y; |
jfields | 1:5302a23c97c4 | 107 | num_readings++; |
jfields | 1:5302a23c97c4 | 108 | |
jfields | 1:5302a23c97c4 | 109 | // output results |
jfields | 4:fe091424b406 | 110 | if (num_readings >= 10) { |
jfields | 2:1354ce60c0b9 | 111 | float average_y = (float)total_y/num_readings; |
jfields | 6:75156f40a227 | 112 | result_level = -0.2642*average_y + 38.453; |
jfields | 6:75156f40a227 | 113 | |
jfields | 6:75156f40a227 | 114 | if (!gotFirstReading) { |
jfields | 6:75156f40a227 | 115 | gotFirstReading = 1; |
jfields | 6:75156f40a227 | 116 | prev_level = result_level; |
jfields | 6:75156f40a227 | 117 | } |
jfields | 1:5302a23c97c4 | 118 | |
jfields | 3:56a1264e43aa | 119 | // to pc |
jfields | 5:06fa76d9d7bd | 120 | 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 | 121 | pc.printf("%.2f %.2f\r\n", result_level, result_hourly); |
jfields | 3:56a1264e43aa | 122 | |
jfields | 3:56a1264e43aa | 123 | // to bluetooth |
jfields | 3:56a1264e43aa | 124 | //blue.printf("y = %d, num_readings = %d, average = %.2f, mL = %.2f\r\n", y, num_readings, average_y, result); |
jfields | 6:75156f40a227 | 125 | blue.printf("%.2f %.2f\r\n", result_level, result_hourly); |
jfields | 3:56a1264e43aa | 126 | |
jfields | 1:5302a23c97c4 | 127 | // reset vars |
jfields | 1:5302a23c97c4 | 128 | num_readings = 0; |
jfields | 1:5302a23c97c4 | 129 | total_y = 0; |
jfields | 1:5302a23c97c4 | 130 | } |
jfields | 1:5302a23c97c4 | 131 | } |