Problem bei umstieg von monochrom zu color oled

Hallo Liebes Forum mein Name ist Daniel und bin neu hier.
Ich bin 30 Jahre alt und ausgebildeter Mechatroniker und ich hoffe hier einen Profi zu finden der mich endlich von meinem leiden erlöst.

Folgendes Problem habe ich:

Habe ein Programm gemacht für ein 0.96 monochrome i2c oled display bei dem ich mit einem Taster 4 verschiedene modi durchschalten kann.(Druckanzeige, Temperatur, Höhenmeter und Spannung)

Das funktioniert soweit auch ganz gut.

Nur würde ich das ganze jetzt auf einem spi color oled machen da es einfach besser aussieht.

Habe also den Originalcode angepasst um das color oled zu nutzen.

Jetzt sehe ich ja auch die 4 modi und kann diese auch durchschalten aber leider baut sich jedes bild immer und immer wieder neu von links nacch recht auf.
das Problem habe ich ja bei dem Schwarz-Weissen Display nicht. warum macht es das? wie kann ich das beheben?

Ich hoffe jemand könnte einem Verzweifelten Kerl helfen.
Bin echt am ende mit meinem Latein.
3 Tage Google durchgewälzt aber leider ohne Erfolg.

Da mir das Projekt sehr wichtig ist würde ich demjenigen der mir dabei helfen kann auch gerne eine kleine Spende geben wenn diese gewünscht ist.

Der Code ist wegen der Bitmaps zu groß für den Codetag deshalb entschuldigt das ich es anhängen muss.

Lg Daniel

Sketch_-forum.ino (39.6 KB)

Welche Displays Du verwendest wäre schön zu wissen. Dann brauchen wir die Kristallkugeln nicht zu strpazieren.
Grüße Uwe

Hallo,
das sind die

display.fillScreen(BLACK);

einfach mal auskommentieren

// display.fillScreen(BLACK);

dann findest Du den Verdächtigen.

Oder es ist Dein "case"

Jetzt:

case 3:
      display.fillScreen(BLACK);
      batterie();
      break;

sollte aber so sein

case 3:
      display.fillScreen(BLACK);
      batterie();
      break;
default:
   
    break;

Gruß und Spaß
Andreas

P.S.
das sehe ich jetzt gerade
" ich demjenigen der mir dabei helfen kann auch gerne eine kleine Spende geben wenn diese gewünscht ist."

Das mögen wir hier nicht.

Hallo leute.

Das eine ist ein china 0.96 i2c monochrom
Und das 2te ist ein China color oled 0.95 spi.

Wenn ich die fillscreens wegmache bleibt aber immer der text vom vorigen screen present.

Ich weiss nicht wie ich es ohne dem case schaffe eine art menü zu machen.

Das mit der Spende sag ich nur weil es mir wirklich wichtig ist das system zum laufen zu bringen.

Wenn das nicht erwünscht ist tut mir das leid.

seaha:
Das eine ist ein china 0.96 i2c monochrom
Und das 2te ist ein China color oled 0.95 spi.

Warum postest du nicht einfach mal einen Link deiner Oled-Displays.

Es gibt sehr viele Hersteller, die auch noch unterschiedliche Treiber (IC's) verwenden.

Evtl. passt ja deine Library nicht mehr. Ein paar mehr Informationen musst du schon liefern, damit wir helfen können.

P.S.
Und wenn du spenden möchtest, dann an den Webseitenbetreiber. Evtl. kann Uwe (Moderator) mehr Infos geben.

Color oled
https://m.aliexpress.com/amp/item/32810773189.html

Monochrome oled

Beide funktionieren mit den dafür vorgesehene library test sketches einwandfrei.

Ich nutze also die richtige librarys dafür.

Hallo,
dann mache Dir doch einen Merker…

int Merker;


case 1:
if (Merker == 0}
{
     display.fillScreen(BLACK);
Merker = 1;
}
     batterie();
     break;

case 2:
if (merker == 1)
{
       display.fillScreen(BLACK);
Merker = 2;
}
     batterie();
     break;

case 3:
 if (merker == 2)
{
       display.fillScreen(BLACK);
Merker = 3;
}

     batterie();
     break;
default:
  
   break;

Wenn die auch durchlaufen sollten, dann kann es eigentlich nur noch ein Fehler bei der caseBestimmung sein.

Gruß und Spaß
Andreas

Hmmm okay.

Verstehs jetzt zwar nicht ganz aber werd das nal probieren.

Und was soll ich machen wenn es am case liegt.

Gäbs eine andere möglichkeit mich mit einem taster durch die screens zu bewegen?

Lg

Hallo,
"Und was soll ich machen wenn es am case liegt."
Den Fehler beseitigen- welchen? Gute Frage.
Mir gefällt z.B. nicht die Abfrage mit den millis(). Das ganze sieht aus, als wenn etwas immer
wieder aufgerufen wird.

so ein Menü ist ja nur eine "Anzeige"

Also, Du hast einen Taster der hochzählt, 1, 2, 3...1

Wenn Taster=1 dann zeige Punkt 1
mache etwas

Wenn Taster=2 lösche Punkt 1 dann zeige Punkt 2
mache etwas anderes

das kann man von Hand programmieren, machen viele aber nicht weil sie den Aufwand scheuen.
Hier geistert auch eine MenüLib im Forum rum, mußt mal nach suchen.

Ich würde mir erst einmal Taster programmieren die nur zählen- 1, 2, 3

Wenn Du das hast, dann bei Änderung eine Funktion aufrufen

Da sagst Du dann, was gemacht werden soll.
So ganz grob.
Gruß und Spaß
Andreas

Nimm doch die Anzeige der verschiedenen Bildschirme auseinander, z.B. für Temperatur:

void temperatur()
{

  display.drawBitmap(0, 0, Temperatur, 128, 64, MAGENTA);
  temp_value();
  display.setFont();
  display.setTextSize(1);
  display.setCursor(44, 45);
  display.println("C");
  display.fillCircle(52, 45, 1, WHITE);
}

void temp_value() {
  display.setFont(&FreeSansBold12pt7b);
  display.setCursor(18, 30);
  display.println(bmp.readTemperature());
}

und rufe nur den Teil auf, der sich wirklich ändert...
Also beim Umschalten der Bildschirme "temperatur();" und wenn nur der Wert sich ändert, dann "temp_value();"

So folgendes hab ich ohne erfolg getestet.

Das mit den Merkern ging nicht Screen 1 flackerte gleich wie zuvor die andern screens nicht dafür änderten diese ihren wert nicht mehr und schrieben immer über das vorherige drüber.

Die MILLIS sind zum debouncen des Tasters; hab ich testhalber auch rausgenommen aus dem sketch leider auch ohne erfolg.
selbes ergebnis wie zuvor.

Das auseinander nehmen der verschiedenen Bildschirme machte auch keinerlei Unterschied

Gibts doch nicht das soetwas einfaches nicht zu meistern ist.

Bin echt am verzweifeln

Hallo,
hast Du das Original noch?
Da stimmt etwas nicht mit dem Case. Ich glaube nicht, das es die DisplayLib ist.
Gruß und Spaß
Andreas

Welches Original du meinst das was ich hochgrladen habe?
Ja das hab ich noch.
Wieso?

Dann halte es bitte geheim :o :o :o

seaha:
Welches Original du meinst das was ich hochgrladen habe?
Ja das hab ich noch.
Wieso?

Dann halte es bitte geheim :o :o :o

?????
Hä was kapier ich jetzt denn nicht.
Mein sketch ist doch oben im ersten post angehängt oder welchen meint ihr.

Versteh das jetzt mit dem gehim halten nicht. Ist doch eh da.

Hallo,
damit hier jeder dumm weiterquatschen kann- aber nicht helfen.
Vergesse es einfach.
Gruß und Spaß
Andreas

Hmmn hasst du villeicht noch einen lösungsansatz.

Lg

Hallo,
Du hast einen alten Sketch mit alten Display.
Du hast einen neuen Sketch mit neuem Display.

Zu Deinem neuen Display gibt es doch Beispiele. Laufen diese alle fehlerfrei?
Wenn dem so ist, dann kann es doch nur am neuen Sketch liegen.

Also vergleich man die DisplayBefehle des alten Sketch, mit den DisplayBefehlen des neuen Display.
Dann macht man sich vom alten Sketch eine Kopie- und tauscht in dieser die alten DisplayBefehle gegen die
des neuen Display aus.
Gruß und Spaß
Andreas

Mein alter und mein neuer sketch unterscheiden sich nicht voneinander susser die definitionen fürs display da das alte i2c ist und das neue spi.

Ansonnsten ist es eine exakte kopie.

Hallo,
"Zu Deinem neuen Display gibt es doch Beispiele. Laufen diese alle fehlerfrei?"
Gruß und Spaß
Andreas