Hi. I’m having trouble with my arduino code. Basically I’m using an Arduino MKR WiFI 1010 board connected to a WiFi network, that gets information from a temperature and humidity sensor in the same way that a meteorogical station would do it. Also, I want to measure the variables every 10 seconds and after 5 minutes of recording and accumulating that data, it calculates the mean, saves it on a SD card and sends it through Blynk connection. So, I use a SimpleTimer to do that but the problem is that if it gets disconnected for some reason (WiFi disabled, electricity out, etc) the program gives priority to the connection and tries to reconnect at the same time that it’s getting data from the sensor interrupting the desired process (regarding that only need connection to tha server every 5 minutes and not between that period) and then, the timer gets affected because it is supposed to record the data every 5 minutes in specific times (10:00, 10:05, 10:10, etc) IF ONLY the board achieves to reconnect which normally doesn’t happen.
I only desire that if the board gets disconnected it only checks it at the time that the program sends the data and if this is so, making a try to reconnect, save the data into the SD card and continue measuring for the next period of 5 minutes… I know this is so demanding but at least i don’t want my timer gets interrupted in that way… Thanks.
Blynk version: v0.6.1 on MKR WiFi 1010
The code below is a summary version of the code to show how it was basically written
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
#include <DHT.h>
#include <SD.h>
DHT sensorTH(4, DHT21)
File file;
SimpleTimer timer;
char auth[] = "****************************";
char ssid[] = "****************************";
char pass[] = "****************************";
byte count = 0;
const unsigned long MSEGS_CALC_MEAN = 300000; 5 min
const unsigned long MSEGS_DATA= 10000; // 10 sec
const int num_data = MSEGS_CALC_MEAN / MSEGS_DATA;
float temp_prom;
float hum_prom;
float t, h;
void setup(){
delay(1000); // delay 1 sec to begin the program.
Serial.begin(9600);
sensorTH.begin();
SD_Begin(); // Check if SD is connected
Blynk.begin(auth, ssid, pass);
creating_File(); // Creates the file in the SD card
timer.setInterval(MSEGS_DATA, acumParameter);
timer.setInterval(MSEGS_CALC_MEAN, getMean);
timer.setInterval(MSEGS_CALC_MEAN, uploadData);
}
void loop()
{
Blynk.run();
timer.run();
}
void acumParameter(){
count++;
t += sensorTH.readTemperature();
h += sensorTH.readHumidity();
}
void getMean(){
if (count == num_data){
temp_prom = t / num_data;
hum_prom = h / num_data;
}
}
void uploadData(){
uploadBlynk();
uploadSD();
t = 0; h = 0; count= 0;
}
void uploadBlynk(){
Blynk.virtualWrite(V0, temp_prom);
Blynk.virtualWrite(V1, hum_prom) ;
}
void uploadSD(){
file= SD.open("est1", FILE_WRITE);
if (file) {
file.print(temp_prom); file.print(",");
file.print(hum_prom); file.print(",");
file.close();
}
else{
file.close();
}
}