From c7dc5dea6e5f40b60704497ad0758e9c1b254ec6 Mon Sep 17 00:00:00 2001
From: joalhelk <joalhelk@jyu.fi>
Date: Sat, 12 Feb 2022 19:38:30 +0200
Subject: [PATCH] sensor average counting

---
 arduinoSensor/arduinoSensor.ino | 65 +++++++++++++++++++++++++--------
 1 file changed, 50 insertions(+), 15 deletions(-)

diff --git a/arduinoSensor/arduinoSensor.ino b/arduinoSensor/arduinoSensor.ino
index 1c26298..7238f6c 100644
--- a/arduinoSensor/arduinoSensor.ino
+++ b/arduinoSensor/arduinoSensor.ino
@@ -25,6 +25,8 @@
 #include <Adafruit_BME280.h>
 #include "Adafruit_TSL2591.h"
 
+#include <vector>
+
 // Initialize sensors
 Adafruit_BME280 bme; // BME sensor which has pressure, humidity and temperature
 Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591); // Luminosity sensor 
@@ -36,21 +38,51 @@ char pass[] = SECRET_PASS;    // your network password (use for WPA, or use as k
 int keyIndex = 0;            // your network key index number (needed only for WEP)
 
 int status = WL_IDLE_STATUS;
-
-int temp, humidity, luminosity;
 boolean api_success = false;
 
 // server address:
-char server[] = "192.168.0.8";
-IPAddress server_ip(192,168,0,8);
+char server[] = "192.168.0.2";
+IPAddress server_ip(192,168,0,2);
 int port = 8080;
 
 // Initialize the WiFi client library
 WiFiClient client;
 HttpClient http = HttpClient(client, server, port);
 
-unsigned long lastConnectionTime = 0, lastConnectionTime2 = 0, lastMovementTime = 0;        // last time you connected to the server, in milliseconds
-const unsigned long postingInterval = 60L * 30L * 1000L;                                    // delay (1 800 000 ms = 30 min) between updates, in milliseconds
+unsigned long lastConnectionTime = 0, lastMeasurement = 0;  // last time you connected to the server, in milliseconds
+const unsigned long postingInterval = 60L * 10L * 1000L;     // delay (60 * 10 * 1000 = 10 minutes) between updates, in milliseconds
+const unsigned long measurementInterval = 5L * 1000L;      // measure every 10 seconds
+
+struct Data {
+  int temp, humid, lumi;
+};
+
+struct Measurements {
+  std::vector<Data> datas;
+
+  void AddMeasurements(Data values) {
+    datas.push_back(values);
+  }
+
+  Data AverageAndClear() {
+    int temps = 0, humids = 0, lumis = 0;
+    
+    for(Data d : datas) {
+      temps += d.temp;
+      humids += d.humid;
+      lumis += d.lumi;
+    }
+    
+    int amount = datas.size();
+    int av_temp = temps/amount;
+    int av_humid = humids/amount;
+    int av_lumi = lumis/amount;
+    datas.clear();
+    return Data{av_temp, av_humid, av_lumi};
+  }
+};
+
+Measurements measurements;
 
 void setup() {
   //Initialize serial and wait for port to open:
@@ -96,28 +128,31 @@ void loop() {
     Serial.write(c);
   }
 
-  // Send the data
-  // If 30 minutes has been passed since last posting, then take measurements and post again
+  // Take measurements and add them to measurements
+  if(millis() - lastMeasurement > measurementInterval) {
+    int temp = bme.readTemperature();
+    int humidity = bme.readHumidity();
+    int luminosity = tsl.getLuminosity(TSL2591_VISIBLE);
+    measurements.AddMeasurements({temp, humidity, luminosity});
+    lastMeasurement = millis();
+  }
   if (millis() - lastConnectionTime > postingInterval) {
-    temp = bme.readTemperature();
-    humidity = bme.readHumidity();
-    luminosity = tsl.getLuminosity(TSL2591_VISIBLE);
     httpRequest();
   }
 }
 
-// Lähetetään pilveen sensori1:lle sensoreiden tiedot
 void httpRequest() {
   // close any connection before send a new request.
   // This will free the socket on the NINA module
   Serial.println("making POST request");
+  Data average = measurements.AverageAndClear();
   String contentType = "application/x-www-form-urlencoded";
   String postData ="temperature=";
-         postData += temp;
+         postData += average.temp;
          postData += "&humidity=";
-         postData +=  humidity;
+         postData +=  average.humid;
          postData += "&luminosity=";
-         postData += luminosity;
+         postData += average.lumi;
          postData += "&parent_id=";
          postData += 1;
   
-- 
GitLab