Bugfix: new reference value is the average after 120min instead of average after 150min.
Reduced footprint. I agree to the CLA. Signed-off-by: windkh <karl-heinz.wind@web.de>
This commit is contained in:
@@ -38,7 +38,10 @@ float lastPressureSamples[LAST_SAMPLES_COUNT];
|
|||||||
|
|
||||||
int minuteCount = 0;
|
int minuteCount = 0;
|
||||||
bool firstRound = true;
|
bool firstRound = true;
|
||||||
float pressureAvg[7];
|
// average value is used in forecast algorithm.
|
||||||
|
float pressureAvg;
|
||||||
|
// average after 2 hours is used as reference value for the next iteration.
|
||||||
|
float pressureAvg2;
|
||||||
|
|
||||||
float dP_dt;
|
float dP_dt;
|
||||||
boolean metric;
|
boolean metric;
|
||||||
@@ -122,6 +125,8 @@ float getLastPressureSamplesAverage()
|
|||||||
return lastPressureSamplesAverage;
|
return lastPressureSamplesAverage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Algorithm found here
|
// Algorithm found here
|
||||||
// http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
|
// http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
|
||||||
// Pressure in hPa --> forecast done by calculating kPa/h
|
// Pressure in hPa --> forecast done by calculating kPa/h
|
||||||
@@ -139,12 +144,12 @@ int sample(float pressure)
|
|||||||
|
|
||||||
if (minuteCount == 5)
|
if (minuteCount == 5)
|
||||||
{
|
{
|
||||||
pressureAvg[0] = getLastPressureSamplesAverage();
|
pressureAvg = getLastPressureSamplesAverage();
|
||||||
}
|
}
|
||||||
else if (minuteCount == 35)
|
else if (minuteCount == 35)
|
||||||
{
|
{
|
||||||
pressureAvg[1] = getLastPressureSamplesAverage();
|
float lastPressureAvg = getLastPressureSamplesAverage();
|
||||||
float change = (pressureAvg[1] - pressureAvg[0]) * CONVERSION_FACTOR;
|
float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
|
||||||
if (firstRound) // first time initial 3 hour
|
if (firstRound) // first time initial 3 hour
|
||||||
{
|
{
|
||||||
dP_dt = change * 2; // note this is for t = 0.5hour
|
dP_dt = change * 2; // note this is for t = 0.5hour
|
||||||
@@ -156,8 +161,8 @@ int sample(float pressure)
|
|||||||
}
|
}
|
||||||
else if (minuteCount == 65)
|
else if (minuteCount == 65)
|
||||||
{
|
{
|
||||||
pressureAvg[2] = getLastPressureSamplesAverage();
|
float lastPressureAvg = getLastPressureSamplesAverage();
|
||||||
float change = (pressureAvg[2] - pressureAvg[0]) * CONVERSION_FACTOR;
|
float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
|
||||||
if (firstRound) //first time initial 3 hour
|
if (firstRound) //first time initial 3 hour
|
||||||
{
|
{
|
||||||
dP_dt = change; //note this is for t = 1 hour
|
dP_dt = change; //note this is for t = 1 hour
|
||||||
@@ -169,8 +174,8 @@ int sample(float pressure)
|
|||||||
}
|
}
|
||||||
else if (minuteCount == 95)
|
else if (minuteCount == 95)
|
||||||
{
|
{
|
||||||
pressureAvg[3] = getLastPressureSamplesAverage();
|
float lastPressureAvg = getLastPressureSamplesAverage();
|
||||||
float change = (pressureAvg[3] - pressureAvg[0]) * CONVERSION_FACTOR;
|
float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
|
||||||
if (firstRound) // first time initial 3 hour
|
if (firstRound) // first time initial 3 hour
|
||||||
{
|
{
|
||||||
dP_dt = change / 1.5; // note this is for t = 1.5 hour
|
dP_dt = change / 1.5; // note this is for t = 1.5 hour
|
||||||
@@ -182,8 +187,9 @@ int sample(float pressure)
|
|||||||
}
|
}
|
||||||
else if (minuteCount == 125)
|
else if (minuteCount == 125)
|
||||||
{
|
{
|
||||||
pressureAvg[4] = getLastPressureSamplesAverage();
|
float lastPressureAvg = getLastPressureSamplesAverage();
|
||||||
float change = (pressureAvg[4] - pressureAvg[0]) * CONVERSION_FACTOR;
|
pressureAvg2 = lastPressureAvg; // store for later use.
|
||||||
|
float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
|
||||||
if (firstRound) // first time initial 3 hour
|
if (firstRound) // first time initial 3 hour
|
||||||
{
|
{
|
||||||
dP_dt = change / 2; // note this is for t = 2 hour
|
dP_dt = change / 2; // note this is for t = 2 hour
|
||||||
@@ -195,8 +201,8 @@ int sample(float pressure)
|
|||||||
}
|
}
|
||||||
else if (minuteCount == 155)
|
else if (minuteCount == 155)
|
||||||
{
|
{
|
||||||
pressureAvg[5] = getLastPressureSamplesAverage();
|
float lastPressureAvg = getLastPressureSamplesAverage();
|
||||||
float change = (pressureAvg[5] - pressureAvg[0]) * CONVERSION_FACTOR;
|
float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
|
||||||
if (firstRound) // first time initial 3 hour
|
if (firstRound) // first time initial 3 hour
|
||||||
{
|
{
|
||||||
dP_dt = change / 2.5; // note this is for t = 2.5 hour
|
dP_dt = change / 2.5; // note this is for t = 2.5 hour
|
||||||
@@ -208,8 +214,8 @@ int sample(float pressure)
|
|||||||
}
|
}
|
||||||
else if (minuteCount == 185)
|
else if (minuteCount == 185)
|
||||||
{
|
{
|
||||||
pressureAvg[6] = getLastPressureSamplesAverage();
|
float lastPressureAvg = getLastPressureSamplesAverage();
|
||||||
float change = (pressureAvg[6] - pressureAvg[0]) * CONVERSION_FACTOR;
|
float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
|
||||||
if (firstRound) // first time initial 3 hour
|
if (firstRound) // first time initial 3 hour
|
||||||
{
|
{
|
||||||
dP_dt = change / 3; // note this is for t = 3 hour
|
dP_dt = change / 3; // note this is for t = 3 hour
|
||||||
@@ -218,7 +224,7 @@ int sample(float pressure)
|
|||||||
{
|
{
|
||||||
dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value
|
dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value
|
||||||
}
|
}
|
||||||
pressureAvg[0] = pressureAvg[5]; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past.
|
pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past.
|
||||||
firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop.
|
firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,5 +258,13 @@ int sample(float pressure)
|
|||||||
forecast = UNKNOWN;
|
forecast = UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// uncomment when debugging
|
||||||
|
//Serial.print(F("Forecast at minute "));
|
||||||
|
//Serial.print(minuteCount);
|
||||||
|
//Serial.print(F(" dP/dt = "));
|
||||||
|
//Serial.print(dP_dt);
|
||||||
|
//Serial.print(F("kPa/h --> "));
|
||||||
|
//Serial.println(weather[forecast]);
|
||||||
|
|
||||||
return forecast;
|
return forecast;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user