Hallo Zusammen,
ich hatte jetzt auch mal ein wenig Zeit mir den Cdoe anzusehen.
Meiner Hardware ist folgende:
Ardunio MKR 1000
LCD 2x16
Drucksonde, DC-DC-Step Up und Messbrücke kommen noch.
Nachdem ich mich erst einmal in das Thema einarbeiten musste, bin ich jetzt soweit, dass der Code angepasst auf meine WiFi Verbindung und das 16x2 Display läuft.
Die Messwerte habe ich mittels Poti simuliert.
Hierbei ist mir ein Fehler in deinem Skript aufgefallen @Eisbaeeer und zwar bei der Glättung des Analogen Messwertes.
Der Fehler fällt bei deinen 60 Messungen nicht wirklich stark ins Gewicht, aber er ist da Bei 2 Messungen liegst du um 100% daneben. Du hast vergessen den Wert "fuel" wieder zu resetten. Somit addierst du auf den alten Wert die neuen hinzu. Der Fehler liegt somit bei (messungen+ 1) / (messungen).
Die eine Zeile im Code behebt den Fehler.
// Werte aufaddieren
fuel = 0; // Initialisierung HINZUGEFÜGT, da Berechnung sonst falsch
for (int i = 0; i < messungen; i++)
{
fuel = fuel + myArray[i];
}
// Summe durch Anzahl
fuel = fuel / messungen;
Dann Frage ich mich, warum du die Prozentzahl so "seltsam" berechnest.
percent = fuel * 0.132;
Du gibts in dem Skript doch den maximalen Analog Wert an und hast den aktuellen vorliegen. Somit wäre folgender Code eigentlich richtig:
percent = fuel / analog_value * 100;
Was mir noch aufgefallen ist, ist dass die Pointerschleife zuweit läuft:
if ( pointer > messungen ) {
pointer = 0;
} else {
pointer++;
}
Bei dir mit zB messungen = 60 ginge der Pointer von 0 bis 60 was 61 Messpunkten entspricht. (die 0 nicht vergessen).
Was sehr schade an dem Code ist, ist der Umstand, dass er mittlerweile für ein 20x4 LCD geschrieben ist. In deiner Teile List und auch im Header vom Code stehen 16x2, was vielleicht den ein oder anderen zum "Fehlkauf" verleitet
Aber im Großen und Ganzen läuft der Code und die Kommunikation zu meinem IP-Symcon MQTT Server funktioniert auch 1A.
Sobald der Drucksensor kommt sollte sich somit das Zisternenüberwachungsproblem erledigt haben
Danke nochmal und Gruß
Maze
PS:
Beim Arduino MKR können die Analogen Inputs mit bis zu 12Bit ausgelesen werden (0-4095).