OLED Adafruit display.clearDisplay(); funktioniert nicht

Hallo ich habe folgendes Problem,
Ich möchte ein RFID Bezahlsystem machen diese funktioniert so weit nun will ich z.b der Name des eingescannten Chips anzeigen lassen was bis dato auch funktioniert. Doch sobald ich in mein switch Case Scenario für die verschieden Abbuchung der preise komme cleart mein Display danach nicht mehr richtig (auch nicht, wenn ich dasselbe nochmals in schwarz drüberschreiben lasse).
Ich benutze den Display OLED Adafruit 128x64 monochrom und die libary Adafruit_GFX.h, Adafruit_SSD1306.h die Kommunikation findet in I2C statt.

Hier der abschnitt wo das Pogramm probleme macht:

if (Gescannter_User_ID != -1)
   {

     Serial.println("------------------------------");
     Serial.println(Users[Gescannter_User_ID].Name);
     Serial.println("Kontostand:");
     Serial.println(Users[Gescannter_User_ID].Konto);
     Serial.println("------------------------------");

    
    
   display.clearDisplay();

   display.setTextSize(2);             
   display.setTextColor(SSD1306_WHITE);        
   display.setCursor(0,0);            
   display.println(Users[Gescannter_User_ID].Name);
   display.setCursor(20,30); 
   display.println(Users[Gescannter_User_ID].Konto);
   display.display();
  
   
    switch ((int)Eingabe_Funktion())                               
   {

     case 1: 
                                                    
       Kaffee();                                                    
       Users[Gescannter_User_ID].Konto +=- 0.5;
       display.clearDisplay();
       display.setTextSize(2);             
       display.setTextColor(SSD1306_WHITE);        
       display.setCursor(0,0);             
       display.println("Kaffee Gebucht");
       display.display();
       
       Serial.println("Neuer Kontostand");
       Serial.println(Users[Gescannter_User_ID].Konto);
       break;  
                                                   
     case 2: 
                                                      
       Eis(); 
       display.clearDisplay();
       display.setTextSize(2);             
       display.setTextColor(SSD1306_WHITE);        
       display.setCursor(0,0);             
       display.println("EIS Gebucht");
       display.display();
       break;   
                                                  
     case 3: 
                                                     
       Milch();                                                    

       display.clearDisplay();
       display.setTextSize(2);             
       display.setTextColor(SSD1306_WHITE);        
       display.setCursor(0,0);             
       display.println("Milch Gebucht");
       display.display();
       
       break;

     case 987
:                                                                    
       Konto_Aufladung();                                          
       Users[Gescannter_User_ID].Konto =+ Eingabe_Funktion();
       break;                                                       
 
     case -1:
                 
    display.clearDisplay();
        
     break;                                                                                                 
     default:                                                                                                         
     break;                                                      
   }
   }

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Ob jemand mit dem Fragment etwas anfangen kann/will, weiß ich nicht. Besser ist eine kompilierfähige (Minimal-)Version des Sketches, die das Problem nachvollziehbar zeigt.

Gruß Tommy

Hallo,

Mit deinen Angaben kann man jetzt nur raten. Tue ich jetzt mal . Du verwendest einen UNO und hast ein Speicher-Problem.

Wenn der Speicher kanpp wird kommen seltsame Dinge vor.

Verwende bei den Ausgaben auf das Display mal F Macro in der Form

display.println(F("Milch Gebucht"));

dann liegt der Text nicht im Arbeitsspeicher.

Heinz

das ruft ganz laut nach einer separaten Funktion da es in deinem Codeschnippsel 3 x vorkomt:

display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Milch Gebucht");
display.display();

wie oft hast du das noch drinnen?

übergebe einer Funktion nur den Text Milch, Eis, Kaffee... und schreibe einmal die 6 Zeilen.

Danke für die antworten, ich habe das Problem selber herausgefunden was allerding zu einem weiteren Problem führt, mein LEGIC RFID Bord kommuniziert mit SPI das Display sollte deshalb mit I2C kommunizieren, jetzt vermute ich das die libary der Displays da sie beides kann im Hintergrund trotzdem noch SPI laufen hat. Jetzt zur eigentlichen frage kann ich in dem cod der Libery die SPI Funktionen löschen, wenn ja hat das schon mal jmd. gemacht und weis welchen teil ich weglöschen muss damit die libary nur in I2C funktioniert.
Danke schonmal im Voraus

Hallo und prima dass es jetzt funktioniert.

Damit wir helfen können, brauchen wir den aktuellen, kompletten Sketch in Code-Tags und den Link zu deiner Library, die du ändern willst.

Hier der abschnitt wo das Pogramm probleme macht:

Wir haben mächtige probleme mit abschnitten.

Wie schon gesagt ist der Fehler in 90% der Fälle im Rest des Sketches.

SPI ist ein Bus und es können darum mehr als 2 Partner (Arduino und RFID) komunizieren. Jeder braucht seinen eigenen SS/ EN Pin aber sonst geht es.

Grüße Uwe

Komponenten:

Arduino Nano 33 ioT

Legic Reader

Adafruit Oled Display 128 x 64

Matrix-Tastatur 3 x 4

Ich vermute das die Display Libary sich mit dem Legic Reader stört,
trotz das sie zwei verschiedene Kommunikationen benutzen (I2C(Display) und SPI(Reader))

Libary’s:

<SPI.h>
<Wire.h>

<Adafruit_GFX.h>
<Adafruit_SSD1306.h>

Das Programm funktioniert soweit bis auf das oben beschriebene Problem (Display Clearen)
Ich muss das Programm als Datei hochladen da es Zuviel Zeichen sind

Arduino_Hochladen.ino (14.3 KB)

Konto_Funktion.ino (7.47 KB)

LEGIC_Reader.ino (2.32 KB)

Matrix_Tastatur_Abfrage.ino (2.7 KB)

sketch_apr03a.ino (2 Bytes)

legic1:
Ich muss das Programm als Datei hochladen da es Zuviel Zeichen sind

Kannst Du das als zip in ein Paket packen?
In der IDE unter Werkzeuge - sketch archivieren - und das Archiv hier anhängen, an Stelle der Dateien.

legic1:
Komponenten:

Arduino Nano 33 ioT

Legic Reader

Adafruit Oled Display 128 x 64

Matrix-Tastatur 3 x 4

Ich vermute das die Display Libary sich mit dem Legic Reader stört,
trotz das sie zwei verschiedene Kommunikationen benutzen (I2C(Display) und SPI(Reader))

Libary’s:

<SPI.h>
<Wire.h>

<Adafruit_GFX.h>
<Adafruit_SSD1306.h>

Das Programm funktioniert soweit bis auf das oben beschriebene Problem (Display Clearen)
Ich muss das Programm als Datei hochladen da es Zuviel Zeichen sind

Arduino_Hochladen.zip (6.86 KB)

Bist Du sicher daß die Bibliotheken mit dem Arduino Nano 33 ioT funktionieren?
Grüße Uwe

Warum ist da in den Kommentaren keine vernünftige Erklärung drin?
PIN-Angaben sind falsch, vertauscht und was "erklärendes" was wann, wo erwartet wird, ist nicht bei.
Ist User Timo == Marius oder Marius == Timo und ist Tomi == Timo?? :wink:
Bei solchen gravienden Abweichungen zwischen Kommentaren und Code werden sicher auch Fehler irgendwao im Code sein...

Kannst Du das bitte noch überarbeiten? Und Du brauchst keinen neuen Post machen - sondern dann nur die Datei ersetzen.

Danke für deine Antwort,

@uwefed ja sobald ich nur die Tastatur und den Display verwende (ansteuere) funktioniert alles perfekt, aber mit dem Reader gibt es immer das Problem wo zb nur ein teil gelöscht wird und dann entstehen Pixelfehler.

@my_xy_projekt

Danke das du das Programm so aufmerksam liest.

Die Pin Belegungen sind ok, alle Komponenten funktionieren alleine.
Die Kommentare sind älter(werde ich ändern und hochladen)

Das Programm wird noch schöner Formatiert, Kommentiert.

Und die Namen + ID wurde aus Datenschutz gründen sicherheitshalber geändert deswegen die Verschiebung mit den Kommentaren.

legic1:
Danke das du das Programm so aufmerksam liest.

Ja - sonst macht kommentare dazu abgeben keinen Sinn.
Deine Erklärung nehm ich so hin;
Nochmal: Schau erstmal über Deinen Code und sieh zu, das Du die Kommentare so anpasst, das die auch zu dem passen, was Du da willst.

Und dann formatiere Deinen Code einmal mit STRG-T - dann siehst Du evtl. auch schon den einen oder anderen Patzer.
z.B. deine aktuelle Zeile 87 und 205 im setup.

Setze den Wert für den SerMon gleich auf 115200;

Und dann erklär mal, wo Du den Wert herbekommst:
case -2:
Hab ich nirgend gefunden....

Na dann...