abc

Dependencies:   mbed-rtos mbed pixy pixy_test

Fork of aUtO_volume_v4 by ese519

Committer:
jfields
Date:
Thu Dec 10 04:53:50 2015 +0000
Revision:
6:75156f40a227
Parent:
5:06fa76d9d7bd
Child:
7:309840290ee8
aa

Who changed what in which revision?

UserRevisionLine numberNew 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 }