@@ -14,9 +14,9 @@ MySensor gw;
14
14
float lastPressure = -1 ;
15
15
float lastTemp = -1 ;
16
16
int lastForecast = -1 ;
17
- char *weather[] = {" stable" ," sunny" ," cloudy" ," unstable" ," thunderstorm" ," unknown" };
17
+ static char *weather[] = {" stable" ," sunny" ," cloudy" ," unstable" ," thunderstorm" ," unknown" };
18
18
int minutes;
19
- float pressureSamples[180 ];
19
+ float pressureSamples[6 ][ 5 ];
20
20
int minuteCount = 0 ;
21
21
bool firstRound = true ;
22
22
float pressureAvg[7 ];
@@ -97,70 +97,99 @@ int sample(float pressure) {
97
97
// http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
98
98
if (minuteCount == 180 )
99
99
minuteCount = 5 ;
100
+
101
+ // From 0 to 5s
102
+ if (minuteCount <= 5 ){
103
+ pressureSamples[0 ][minuteCount] = pressure;
104
+ }
105
+ // From 30 to 35
106
+ if ((minuteCount <= 30 ) && (minuteCount >= 35 )){
107
+ pressureSamples[1 ][minuteCount - 30 ] = pressure;
108
+ }
109
+ // From 55 to 60
110
+ if ((minuteCount <= 55 ) && (minuteCount >= 60 )){
111
+ pressureSamples[2 ][minuteCount - 55 ] = pressure;
112
+ }
113
+ // From 90 to 95
114
+ if ((minuteCount <= 90 ) && (minuteCount >= 95 )){
115
+ pressureSamples[3 ][minuteCount - 90 ] = pressure;
116
+ }
117
+ // From 115 to 119
118
+ if ((minuteCount <= 115 ) && (minuteCount >= 120 )){
119
+ pressureSamples[4 ][minuteCount - 115 ] = pressure;
120
+ }
121
+ // From 150 to 155
122
+ if ((minuteCount <= 150 ) && (minuteCount >= 155 )){
123
+ pressureSamples[5 ][minuteCount - 150 ] = pressure;
124
+ }
125
+ // From 175 to 180
126
+ if ((minuteCount <= 175 ) && (minuteCount >= 180 )){
127
+ pressureSamples[6 ][minuteCount - 175 ] = pressure;
128
+ }
129
+
100
130
101
- pressureSamples[minuteCount] = pressure;
102
131
minuteCount++;
103
132
104
133
if (minuteCount == 5 ) {
105
134
// Avg pressure in first 5 min, value averaged from 0 to 5 min.
106
- pressureAvg[0 ] = ((pressureSamples[0 ] + pressureSamples[1 ]
107
- + pressureSamples[2 ] + pressureSamples[3 ] + pressureSamples[ 4 ])
108
- / 5 );
135
+ pressureAvg[0 ] = ((pressureSamples[0 ][ 0 ] + pressureSamples[0 ][ 1 ]
136
+ + pressureSamples[0 ][ 2 ] + pressureSamples[0 ][ 3 ]
137
+ + pressureSamples[ 0 ][ 4 ] + pressureSamples[ 0 ][ 5 ]) / 6 );
109
138
} else if (minuteCount == 35 ) {
110
139
// Avg pressure in 30 min, value averaged from 0 to 5 min.
111
- pressureAvg[1 ] = ((pressureSamples[30 ] + pressureSamples[31 ]
112
- + pressureSamples[32 ] + pressureSamples[33 ]
113
- + pressureSamples[34 ] ) / 5 );
140
+ pressureAvg[1 ] = ((pressureSamples[1 ][ 0 ] + pressureSamples[1 ][ 1 ]
141
+ + pressureSamples[1 ][ 2 ] + pressureSamples[1 ][ 3 ]
142
+ + pressureSamples[1 ][ 4 ] + pressureSamples[ 1 ][ 5 ] ) / 6 );
114
143
float change = (pressureAvg[1 ] - pressureAvg[0 ]);
115
144
if (firstRound) // first time initial 3 hour
116
145
dP_dt = ((65.0 / 1023.0 ) * 2 * change); // note this is for t = 0.5hour
117
146
else
118
147
dP_dt = (((65.0 / 1023.0 ) * change) / 1.5 ); // divide by 1.5 as this is the difference in time from 0 value.
119
148
} else if (minuteCount == 60 ) {
120
149
// Avg pressure at end of the hour, value averaged from 0 to 5 min.
121
- pressureAvg[2 ] = ((pressureSamples[55 ] + pressureSamples[56 ]
122
- + pressureSamples[57 ] + pressureSamples[58 ]
123
- + pressureSamples[59 ] ) / 5 );
150
+ pressureAvg[2 ] = ((pressureSamples[2 ][ 0 ] + pressureSamples[2 ][ 1 ]
151
+ + pressureSamples[2 ][ 2 ] + pressureSamples[2 ][ 3 ]
152
+ + pressureSamples[2 ][ 4 ] + pressureSamples[ 2 ][ 5 ] ) / 6 );
124
153
float change = (pressureAvg[2 ] - pressureAvg[0 ]);
125
154
if (firstRound) // first time initial 3 hour
126
155
dP_dt = ((65.0 / 1023.0 ) * change); // note this is for t = 1 hour
127
156
else
128
157
dP_dt = (((65.0 / 1023.0 ) * change) / 2 ); // divide by 2 as this is the difference in time from 0 value
129
158
} else if (minuteCount == 95 ) {
130
159
// Avg pressure at end of the hour, value averaged from 0 to 5 min.
131
- pressureAvg[3 ] = ((pressureSamples[90 ] + pressureSamples[91 ]
132
- + pressureSamples[92 ] + pressureSamples[93 ]
133
- + pressureSamples[94 ] ) / 5 );
160
+ pressureAvg[3 ] = ((pressureSamples[3 ][ 0 ] + pressureSamples[3 ][ 1 ]
161
+ + pressureSamples[3 ][ 2 ] + pressureSamples[3 ][ 3 ]
162
+ + pressureSamples[3 ][ 4 ] + pressureSamples[ 3 ][ 5 ] ) / 6 );
134
163
float change = (pressureAvg[3 ] - pressureAvg[0 ]);
135
164
if (firstRound) // first time initial 3 hour
136
165
dP_dt = (((65.0 / 1023.0 ) * change) / 1.5 ); // note this is for t = 1.5 hour
137
166
else
138
167
dP_dt = (((65.0 / 1023.0 ) * change) / 2.5 ); // divide by 2.5 as this is the difference in time from 0 value
139
168
} else if (minuteCount == 120 ) {
140
169
// Avg pressure at end of the hour, value averaged from 0 to 5 min.
141
- pressureAvg[4 ] = ((pressureSamples[115 ] + pressureSamples[116 ]
142
- + pressureSamples[117 ] + pressureSamples[118 ]
143
- + pressureSamples[119 ] ) / 5 );
170
+ pressureAvg[4 ] = ((pressureSamples[4 ][ 0 ] + pressureSamples[4 ][ 1 ]
171
+ + pressureSamples[4 ][ 2 ] + pressureSamples[4 ][ 3 ]
172
+ + pressureSamples[4 ][ 4 ] + pressureSamples[ 4 ][ 5 ] ) / 6 );
144
173
float change = (pressureAvg[4 ] - pressureAvg[0 ]);
145
174
if (firstRound) // first time initial 3 hour
146
175
dP_dt = (((65.0 / 1023.0 ) * change) / 2 ); // note this is for t = 2 hour
147
176
else
148
177
dP_dt = (((65.0 / 1023.0 ) * change) / 3 ); // divide by 3 as this is the difference in time from 0 value
149
178
} else if (minuteCount == 155 ) {
150
179
// Avg pressure at end of the hour, value averaged from 0 to 5 min.
151
- pressureAvg[5 ] = ((pressureSamples[150 ] + pressureSamples[151 ]
152
- + pressureSamples[152 ] + pressureSamples[153 ]
153
- + pressureSamples[154 ] ) / 5 );
180
+ pressureAvg[5 ] = ((pressureSamples[5 ][ 0 ] + pressureSamples[5 ][ 1 ]
181
+ + pressureSamples[5 ][ 2 ] + pressureSamples[5 ][ 3 ]
182
+ + pressureSamples[5 ][ 4 ] + pressureSamples[ 5 ][ 5 ] ) / 6 );
154
183
float change = (pressureAvg[5 ] - pressureAvg[0 ]);
155
184
if (firstRound) // first time initial 3 hour
156
185
dP_dt = (((65.0 / 1023.0 ) * change) / 2.5 ); // note this is for t = 2.5 hour
157
186
else
158
187
dP_dt = (((65.0 / 1023.0 ) * change) / 3.5 ); // divide by 3.5 as this is the difference in time from 0 value
159
188
} else if (minuteCount == 180 ) {
160
189
// Avg pressure at end of the hour, value averaged from 0 to 5 min.
161
- pressureAvg[6 ] = ((pressureSamples[175 ] + pressureSamples[176 ]
162
- + pressureSamples[177 ] + pressureSamples[178 ]
163
- + pressureSamples[179 ] ) / 5 );
190
+ pressureAvg[6 ] = ((pressureSamples[6 ][ 0 ] + pressureSamples[6 ][ 1 ]
191
+ + pressureSamples[6 ][ 2 ] + pressureSamples[6 ][ 3 ]
192
+ + pressureSamples[6 ][ 4 ] + pressureSamples[ 6 ][ 5 ] ) / 6 );
164
193
float change = (pressureAvg[6 ] - pressureAvg[0 ]);
165
194
if (firstRound) // first time initial 3 hour
166
195
dP_dt = (((65.0 / 1023.0 ) * change) / 3 ); // note this is for t = 3 hour
0 commit comments