SysBee v1

Dependencies:   C027_Support mbed

Fork of App_Pese_Ruche_SYSBEE by Sysbee

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)
 {