I have an outdoor temp sensor:
...
const int tmpPin4 = 3;
OneWire oneWire4(tmpPin4);
DallasTemperature sensors4(&oneWire4);
...
sensors4.requestTemperatures();
Blynk.virtualWrite(10, sensors4.getTempCByIndex(0));
...
it works great, but now I want to log the min and max
So tried this:
int outdoormin, outdoormax;
sensors4.requestTemperatures();
Blynk.virtualWrite(10, sensors4.getTempCByIndex(0));
if (outdoormin > sensors4.getTempCByIndex(0))
{
outdoormin = sensors4.getTempCByIndex(0);
}
if (outdoormax < sensors4.getTempCByIndex(0))
{
outdoormax = sensors4.getTempCByIndex(0);
}
Blynk.virtualWrite(13, outdoormin);
Blynk.virtualWrite(14, outdoormax);
but nothing useful is writen to V13 or V14
You need to use minimum interval as 1 minute for max/min values. In other words you need a timer with 1 minute interval and once a minute push min/max value there. This is because Blynk accepts only 1 value per minute. In case you send more - we calculate average.
SimpleTimer timer;
int outdoormin = 100, outdoormax = -100;
void sendMinMax() {
Blynk.virtualWrite(13, outdoormin);
Blynk.virtualWrite(14, outdoormax);
}
void setup() {
// Setup a function to be called every minute
timer.setInterval(60000L, sendMinMax);
}
void loop() {
Blynk.run();
timer.run(); // Initiates SimpleTimer
}
done and outdoormin and outdoormax starts with 100/-100.
but this still not updates the variables with temperature data.
and variables are not sent to Blynk V13 / V14.
void sendMinMax() {
sensors4.requestTemperatures();
if (outdoormin > sensors4.getTempCByIndex(0))
{
outdoormin = sensors4.getTempCByIndex(0);
}
if (outdoormax < sensors4.getTempCByIndex(0))
{
outdoormax = sensors4.getTempCByIndex(0);
}
Blynk.virtualWrite(13, outdoormin);
Blynk.virtualWrite(14, outdoormax);
}
You also have few mistakes in code. Should be :
int temp = sensors4.getTempCByIndex(0);
outdoormin = min(outdoormin, temp);
outdoormax = max(outdoormax, temp);
its so weird
it seems that min() max() are not working
float outdoormin = 100;
float outdoormax = -100;
void sendMinMax()
{
sensors4.requestTemperatures();
float temp = sensors4.getTempCByIndex(0);
float outdoormin = min(outdoormin, temp);
float outdoormax = max(outdoormax, temp);
//Blynk.virtualWrite(13, outdoormin);
//Blynk.virtualWrite(14, outdoormax);
Serial.print("\ntemp: ");
Serial.print(temp);
Serial.print("\noutdoormin: ");
Serial.print(outdoormin);
Serial.print("\noutdoormax: ");
Serial.print(outdoormax);
}
gives the output
temp: 25.19
outdoormin: 0.00
outdoormax: 25.19
temp: 25.19
outdoormin: 0.00
outdoormax: 25.19
temp: 25.19
outdoormin: 0.00
outdoormax: 25.19
temp: 25.19
outdoormin: 0.00
outdoormax: 25.19
temp: 25.25
outdoormin: 0.00
outdoormax: 25.25
temp: 25.25
outdoormin: 0.00
outdoormax: 25.25
temp: 25.25
outdoormin: 0.00
outdoormax: 25.25
temp: 25.25
outdoormin: 0.00
outdoormax: 25.25
temp: 25.19
outdoormin: 0.00
outdoormax: 25.19
Its as if it totally ignores the min/max
though it works if I inserts numbers
like
float outdoormin = min(21, 20);
or
float outdoormin = min(5, 20);
now it worksโฆ
float outdoormin = 100;
float outdoormax = -100;
void sendMinMax()
{
sensors4.requestTemperatures();
int temp = sensors4.getTempCByIndex(0);
outdoormin = min(outdoormin, temp);
outdoormax = max(outdoormax, temp);
Blynk.virtualWrite(13, outdoormin);
Blynk.virtualWrite(14, outdoormax);
}