// Original von mikemiller 2015-2016 // Reduziert auf nur 1 Wasserzähler mit Ausgabe // des Impulses auf die USB-Schnittstelle void setup() { Serial.begin(300); // Open serial communications and wait for port to open: // A baud rate of 115200 is used instead of 9600 for a faster data rate // on non-native USB ports //Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } //digitalWrite(A0, HIGH); pinMode(A0, INPUT); digitalWrite(A1, HIGH); } int wasser_max = 0; long wasser = 0; int wasser_z = 0; unsigned long lastlog = 0; unsigned long last_wasser = 0; unsigned long time; void loop() { // Gleitender Durchschnitt anwenden. wasser = ((wasser *3) + analogRead(0))/4; time = millis(); // time since startup in milliseconds. Overflow after approx. 50 days. if (time < lastlog ){ //time ist übergelaufen lastlog = 0; last_wasser = 0; } wasser_max = max(wasser_max, wasser); if ((wasser_max - 200) > wasser) { wasser_z++; } else { wasser_z = 0; } // Qn 2,5 m³/h = 2.500 Liter pro Stunde // Das Raedchen hat 6 Fluegel und dreht sich 1x je 0,1 Liter --> 60 Impulse je Liter // Bei Maximaldurchfluss 2.500 l/h * 60 Imp/l = 2.500*60 Imp/h = 2.500/60 Imp/s = 41,7 Imp/s // --> Mindestens 24 ms zwischen zwei Impulsen ("Prellen" vermeiden) if (wasser_z > 40 && time - last_wasser > 30) { wasser_max= 0; lastlog = time; last_wasser = time; Serial.print(0x00); // 1 Impuls ausgeben. } }