1 #include <QuickStats.h>
6 float t_mean_t2, t_sum_t1, temp0;
8 float y_cur[MITTELUNG];
10 uint8_t calc_mode = 0;
16 float current_mean = 0;
20 #define WITH_RAINSUM 0
26 #define NUMBER_OF_CHANNELS 9
28 #define NUMBER_OF_CHANNELS 5
31 float values[NUMBER_OF_CHANNELS];
34 void delayBoard(
unsigned long d) {
35 if (client.connected) {
36 unsigned long s = millis();
37 while ((millis() - s) < d) {
38 myLogger.handleCommand();
39 myLogger.sendBinaryDump();
46 void delayBoard(
unsigned long d){
52 #define WITH_CHECKSUM 0
55 void handleAction0(
void)
59 if (myLogger._logged_flag)
61 myLogger._logged_flag = 0;
63 for (uint8_t i = 0; i < NUMBER_OF_CHANNELS; i++)
70 digitalWrite(POWER_PIN, HIGH);
71 analogReference(DEFAULT);
73 bat_voltage = 3.3 * BAT_DIVIDER / 1023 * analogRead(A7);
74 digitalWrite(POWER_PIN, LOW);
77 temp0 = ntc.getTemp(0);
80 if (current_t1i == TMEAN1)
82 t2[current_t2i] = t_sum_t1 / TMEAN1;
83 t_mean_t2 = stats.average(t2, TMEAN2);
85 if (current_t2i == TMEAN2)
94 scale.read_average(adc, 2);
97 while (scale.read_average_with_filter(adc, 3000, counts) == 0xf0000000)
104 #ifdef BayEOSLOGGER_H
106 myLogger._bat = bat_voltage * 1000;
107 values[0] += bat_voltage;
110 values[3] += cal0.getWeight(adc[0], 20, 0);
116 client.addChecksum();
127 uint8_t newest_t2i = current_t2i - 1;
128 if (newest_t2i > TMEAN2)
129 newest_t2i = TMEAN2 - 1;
130 float t_mean = (t_mean_t2 * TMEAN2 * TMEAN1 - t2[current_t2i] * current_t1i + t_sum_t1) / TMEAN1 / TMEAN2;
131 float dt = t_mean - ((t_mean_t2 * TMEAN2 * TMEAN1 - t2[current_t2i] * current_t1i - t2[newest_t2i] * (TMEAN1 - current_t1i)) / TMEAN1 / (TMEAN2 - 1));
132 y_cur[current_i] = cal0.getWeight(adc[0], t_mean, dt);
133 #ifdef BayEOSLOGGER_H
134 values[4] += y_cur[current_i];
139 client.addChecksum();
147 current_mean = stats.average(y_cur, MITTELUNG);
149 if (calc_mode == 3 && abs(current_mean - y_cur[current_i]) < MAX_DEVIATION / 5)
152 current = current_mean;
155 if (calc_mode == 2 && abs(current_mean - y_cur[current_i]) > MAX_DEVIATION)
159 if (current_i == MITTELUNG)
163 current = stats.average(y_cur, MITTELUNG);
169 if (calc_mode == 1 && current_i == 1)
173 float diff = current_mean - current;
174 #ifdef BayEOSLOGGER_H
175 values[5] += current;
176 values[6] += diff * 3600 / SAMPLING_INT;
182 client.addChecksum();
188 float max_evap = -1 * MAX_EVAP * exp(17.62 * temp0 / (243.12 + temp0)) / exp(17.62 * 20 / (243.12 + 20)) * SAMPLING_INT / 3600;
192 if (diff > 0 && diff < (MIN_SLOPE * SAMPLING_INT / 3600))
198 #ifdef BayEOSLOGGER_H
199 values[7] += diff * 3600 / SAMPLING_INT;
200 values[8] += rainsum;
208 #ifdef BayEOSLOGGER_H
209 for (uint8_t i = 0; i < NUMBER_OF_CHANNELS; i++)
216 client.addChecksum();
uint8_t addChannelValue(float v, uint8_t channel_number=0)
Definition: BayEOS.cpp:61
void startDataFrame(uint8_t subtype=BayEOS_Float32le, uint8_t checksum=0)
Definition: BayEOS.cpp:12
uint8_t sendOrBuffer(void)
Definition: BayEOS.cpp:369