Sketch wird nach display.fillRect lahmgelegt

Hallo zusammen,
bin noch Anfänger und habe aktuell ein Problem mit einem ic2 128x64 OLED.

Ich bastele gerade an einer automatischen Bewässerung für Karnivoren,
die mittels Feuchtesensor und Schwimmerschaltern und Kippschalter gesteuert wird.

Eingebunden sind folgende libaries

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Der folgende Teil des Sketches wird aktiv wenn der “Tonne leer” Schwimmer anzeigt,
dass noch genügend Wasser vorhanden ist und ein Kippschalter umgelegt ist.

Auf dem OLED soll dann der aktuelle Gießmodus, der Feuchtewert und
ein “Ladebalken” mittels Kombination aus display.drawRect und display.fillRect
abgebildet werden, der den Füllstand der Tonne repräsentiert.

Die Länge des display.fillRect steht in der Variablen “Balken”.

Der Sketch bleibt leider hängen, wenn ich allerdings die display.drawRect und display.fillRect Zeilen auskommentiere und stattdessen display.println(Balken) verwende funktioniert alles.

Und nun ein Teilauszug aus dem Sketch

//Giessen mit Schlauch
else if (SchwimmerWert == 1 && Schalter == 1)
{
  digitalWrite(MvAutoPin, HIGH);           // MV für automatische Bewässerung zu     (IN1) 10
  digitalWrite(MvGiessenPin, LOW);         // MV Gartenschlauch offen                (IN2) 11
  digitalWrite(PumpenPin, LOW);            // Pumpe an                               (IN3) 12
  display.clearDisplay();
  display.setCursor(1, 0);
  display.println("Giessen mit Schlauch");
  display.setCursor(1, 25);
  display.println("FeuchteWert: ");
  display.setTextSize(2);
  display.setCursor(80, 22);
  display.println(FeuchteWert);
  display.setTextSize(1);
  display.setCursor(1, 50);
  display.println("F\201llstand Tonne:");
  display.drawRect(0, 60, 128, 4, WHITE);
  display.fillRect(0, 60, Balken, 4, WHITE);
  display.display();
  display.clearDisplay();
}

Kann mir bitte jemand sagen warum das nicht funzt?

Und nun ein Teilauszug aus dem Sketch

ohne Variablen - Definition unbrauchbar. print kann recht viele Datentypen intuitiv verständlich anzeigen. drawRect/fillRect wird da empfindlicher sein. Schau mal in der Richtung. ...

Das Problem tritt auch auf, wenn ich die Variable durch einen Wert ersetze.

frankenfarm: Das Problem tritt auch auf, wenn ich die Variable durch einen Wert ersetze.

Ich kenne deine verwendete Library (Adafruit) nicht. Evtl. ist die ja auch das Problem. Hast du mal eine andere getestet ?

Ich kenne deine verwendete Library (Adafruit) nicht. Evtl. ist die ja auch das Problem.

Gibt es ein Beispiel zur Lib, wo fillRect verwendet wird? Wenn nicht, kannst du einen simplen Beispielsketch schreiben, der funktioniert?

Ich kenne deine verwendete Library (Adafruit) auch nicht. Dass eine vorhandene Funktion immer und ganz allein solch einen Fehler verursacht, kann ich aber kaum glauben.

Hallo zusammen, Danke das Ihr Euch meinem Problem angenommen habt, ich konnte es jetzt lösen.

Zuerst habe ich mir einen Beispielsketch gebastelt, welcher keine Magnetventile ansteuert und auf dem Breadboard getestet, was funktionierte.

Im Anschluss habe ich den Sketch auf den Ziel-Nano aufgespielt wo er auch funktionierte.

Danach habe ich den ürsprünglichen Sketch nochmals auf den Ziel-Nano gespielt was auch funktionierte solange der Nano nur mittels USB Buchse mit Strom versorgt wurde.

Als ich ihn über den Solarladeregler berteiben wollte hat er sich nach dem ersten Schaltvorgang auf der Relaiskarte aufgehängt.

Die Lösung des Problems war delays zwischen die Schaltvorgänge zu schreiben.

Da an dem Laderregler einige Verbraucher hängen (Nano, Relais, Schwimmer, Spannungswandler (LM2596S), Magnetventile, OLED; Bluetooth HC-05, führten die relativ schnellen Test-Schaltvorgänge scheinbar zu nicht tolerierbaren Stromschwankungen). :o

Wieso es allerdings mit dem display.println anstelle des display.drawRect und display.fillRect mal funktionert hat kann ich leider nicht mehr nachvollziehen. Liegt vermutlich auch an der Uhrzeit. :)

Nochmals vielen Dank für Eure Unterstützung!