SysBee v1
Dependencies: C027_Support mbed
Fork of App_Pese_Ruche_SYSBEE by
Diff: main.cpp
- Revision:
- 7:95ddf8fa6260
- Parent:
- 6:b69c4870db2c
- Child:
- 8:3af661bcfcec
--- a/main.cpp Fri Sep 07 15:32:52 2018 +0000 +++ b/main.cpp Tue Sep 11 13:20:01 2018 +0000 @@ -16,12 +16,20 @@ // time between each capture in us #define AVERAGING_TIME 500 -// time between each mesures in s +/* +// time between each measure in s #define MEASURE_INTERVAL (10 * 60) // time between each averaging in s #define AVERAGE_INTERVAL (24 * 60 * 60) //WEEK measure time interval #define WEEK_INTERVALL (7 * 24 * 60 * 60) +*/ + +//Test intervals : +#define MEASURE_INTERVAL 5 +#define AVERAGE_INTERVAL 20 +#define WEEK_INTERVAL (2 * 60) + // number of measure before average #define AVERAGE_COUNT ((int)(AVERAGE_INTERVAL / MEASURE_INTERVAL)) @@ -40,7 +48,7 @@ HIVE_STATE_INIT = 0, HIVE_STATE_STANDBY, HIVE_STATE_WEEK, - HIVE_STATE_AVERAGE, + HIVE_STATE_DAILY, HIVE_STATE_MEASURE, HIVE_STATE_NOTHING_NEW, HIVE_STATE_HONEY, @@ -53,15 +61,20 @@ char buffer[1024]; float average_values[AVERAGE_COUNT] = {0.0f}; +//float diff_values[AVERAGE_COUNT] = {0.0f}; float last_average = 0; float week_last_average = 0; float current_average = 0; +float week_average = 0; float current_average_diff = 0; float week_average_diff = 0; float current_measure_diff = 0; unsigned int average_ticks_passed = 0; unsigned int week_ticks_passed = 0; -float +int size_tab = 0; +int time_diff = 0; + +//void init_modem(void); // analog read of sensor board output AnalogIn sensor(PC_5); @@ -152,6 +165,41 @@ return (average / AVERAGING_SIZE); } +// return average of differential +float get_differential_average (float tab[]) +{ + int i = 1; + float differential = 0; + + for ( i = 1; i < size_tab; i++) + differential += (tab[i] - tab[i-1])/time_diff; + + return differential/size_tab; +} + + +void init_modem(void) +{ + MDMParser::DevStatus devStatus = {}; + MDMParser::NetStatus netStatus = {}; + + // retry from begining if something fails + while (!modem.init(SIMPIN, &devStatus, D4)) { + pc.printf("\x1b[34m"); + pc.printf("MODEM init failed...\n\r"); + pc.printf("\x1b[0m"); + wait(1); + } + while (!modem.checkNetStatus(&netStatus)) { + pc.printf("\x1b[34m"); + pc.printf("MODEM net_status failed...\n\r"); + pc.printf("\x1b[0m"); + wait(1); + } + modem.dumpDevStatus(&devStatus); +} + + // automata calculations void automate() { @@ -166,11 +214,12 @@ case HIVE_STATE_STANDBY: if (average_ticks_passed == AVERAGE_COUNT) - current_state = HIVE_STATE_AVERAGE; + current_state = HIVE_STATE_DAILY; else current_state = HIVE_STATE_MEASURE; - power_sleep(MEASURE_INTERVAL); - break; + power_sleep(MEASURE_INTERVAL); + break; + case HIVE_STATE_MEASURE: average_values[average_ticks_passed] = get_averaged_weight(); pc.printf("Weight is %02.2fkg\n\r", average_values[average_ticks_passed]); @@ -183,9 +232,13 @@ } else current_state = HIVE_STATE_STANDBY; - average_ticks_passed++; - break; - case HIVE_STATE_AVERAGE: + average_ticks_passed++; + break; + + case HIVE_STATE_DAILY: + float dif_av = 0; + size_tab = AVERAGE_COUNT; + time_diff = MEASURE_INTERVAL; current_average = 0; for(int i = 0; i < average_ticks_passed; i++) { current_average += average_values[i]; @@ -193,6 +246,9 @@ current_average /= average_ticks_passed; current_average_diff = current_average - last_average; last_average = current_average; + + /*dif_av = get_differential_average(average_values) + ((dif_av*AVERAGE_COUNT)+average_values[AVERAGE_COUNT]) - (average_values[AVERAGE_COUNT]);*/ if (current_average_diff > DIFF_THRESHOLD) { sprintf(buffer, "1 There is more and more honey in the hive ! %0.1fkg of change in %d hours !", current_average_diff, AVERAGE_INTERVAL / 60); @@ -213,6 +269,8 @@ break; case HIVE_STATE_WEEK: + size_tab = 7; + time_diff = WEEK_INTERVAL; week_average = 0; for(int i = 0; i < week_ticks_passed; i++) { week_average += average_values[i]; @@ -228,7 +286,7 @@ } else if (week_average_diff < -DIFF_THRESHOLD) { - sprintf(buffer, "5 There is less honey over the week ! %0.1fkg of change in %d hours !", week_average_diff, WEEK_INTERVAL / 60); + sprintf(buffer, "5 There is less honey over the last week ! %0.1fkg of change in %d hours !", week_average_diff, WEEK_INTERVAL / 60); send_message(buffer); } else @@ -248,27 +306,6 @@ } } -void init_modem(void) -{ - MDMParser::DevStatus devStatus = {}; - MDMParser::NetStatus netStatus = {}; - - // retry from begining if something fails - while (!modem.init(SIMPIN, &devStatus, D4)) { - pc.printf("\x1b[34m"); - pc.printf("MODEM init failed...\n\r"); - pc.printf("\x1b[0m"); - wait(1); - } - while (!modem.checkNetStatus(&netStatus)) { - pc.printf("\x1b[34m"); - pc.printf("MODEM net_status failed...\n\r"); - pc.printf("\x1b[0m"); - wait(1); - } - modem.dumpDevStatus(&devStatus); -} - int main(void) {