Wechsel von I2C Display zu Oled Anfängerfragen...

Guten Morgen liebes Arduino Forum, :slight_smile:

ich habe eine Frage als Neuling oder Anfänger.

Ich habe mi für mein Fahrzeug eine Ladedruckanzeige gebaut. Das hat zwar lange gedauert, aber ich habe es schlussendlich doch hinbekommen.

Das ganze habe ich ich mit einem blauen I2C Display 16x2 Display gemacht. Sehr primitiv gehalten mit aktuellem Ladedruck und Speicherung des höchsten Wert.

Mein Anliegen ist jetzt eine zweite Anzeige zu bauen. Wieder aus Nano und dem gleichen Sensor nur mit einem OLed Display 0,96". Ich finde nur irgendwie keinen Anfang und komme mit der Programmierung nicht klar, dass OLed hat ja wesentlich mehr Zeichen. Könntet Ihr mir da helfen? Meinen Code abzuändern für ein OLed?

Vielen Dank und sorry falls ich was vergessen habe.

Den Code von meiner Anzeige:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);


int mapsen = 0; // Set MAP sensor input on Analog port 0
float boost = 0; // Set boost value to 0
float mapval = 0;  // Set raw map value to 0
//float boostbar ;
float peakboost = 0; // Set peak memory to 0




void setup() {
 
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.setCursor(1,0);
  lcd.print("Ladedruck");
  delay(4000);
  lcd.clear();
  lcd.setCursor(2,0);
  lcd.print("BOOST GAUGE");
  lcd.setCursor(4, 1);
  lcd.print("Ver. 1.0");
  delay(2000);
  lcd.clear();
 // (mapval*(.00282)-1.0175);
}

void loop()
{
  // -- draw bar graph from the analog value readed
 
  // -- do some delay: frequent draw may cause broken visualization
  //delay(100);
   
 mapval= analogRead(mapsen); //Reads the MAP sensor raw value on analog port 0
 boost = (mapval*(.00282)-1.0175);
 
  if (boost <0) //If bar is negative, convert to inHG and display VAC instead of bar
  {
    
    lcd.setCursor(0,0);
    lcd.print("VAC  ");
    lcd.setCursor(5,0);
    lcd.print(boost,2);
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print("Boost ");
    lcd.setCursor(12,0);
    lcd.print("Bar");
  }
  
  if (boost > peakboost) //Works the MAX
  {
    peakboost = boost;

    if (peakboost >=  0)
    {
      lcd.setCursor(0,1);
      lcd.print("Peak");
      lcd.setCursor(6,1);
      lcd.print(peakboost,2);

       lcd.setCursor(12,1);
      lcd.print("Bar");
    }
    
  }

  if (boost >0)
  {
    
    lcd.setCursor(6,0);
    lcd.print(boost,2);
  }

  delay(1000);
  
}

Dann sieh dir doch einfach mal die Beispiele einer passenden Library an, z.B. U8glib.h.

Hey danke für den Tip.

Leider zeigt mein Display partout nichts an.

Habe jetzt meine Nano Clones mit jeweils zwei Oleds 096" getestet.

Ich spiele auf alle keine Fehler nichts. Doch weder Beispiel noch mein Sketch funktionieren.
Display hab ich an A4 / A6 und normal an GND und 5V angeschlossen.
Mit meinem I2C 16x2 hab ich keine Probleme.

Mein echter Nano ist leider fest verbaut so dass ich es nicht testen kann mit ihm.

Habt Ihr eine Idee?

Schon mal vielen Dank =)bin noch komplett neu auf dem Gebiet.

Du musst A4 und A5 verwenden, das ist I2C.

Leider Tipfehler sorry A4/A5 verwende ich.

Diese Meldung kommt nach dem hochladen:

In file included from C:\Users\dsch\Desktop\v3\v3.ino:4:0:

C:\Users\dsch\Documents\Arduino\libraries\Adafruit_SSD1306-master/Adafruit_SSD1306.h:104:0: warning: "SSD1306_LCDHEIGHT" redefined

#define SSD1306_LCDHEIGHT 32 ///< DEPRECATED: height w/SSD1306_128_32 defined

^

C:\Users\dsch\Documents\Arduino\libraries\Adafruit_SSD1306-master/Adafruit_SSD1306.h:100:0: note: this is the location of the previous definition

#define SSD1306_LCDHEIGHT 64 ///< DEPRECATED: height w/SSD1306_128_64 defined

^

C:\Users\dsch\Desktop\v3\v3.ino:11:0: warning: "SSD1306_LCDHEIGHT" redefined

#define SSD1306_LCDHEIGHT 64

^

In file included from C:\Users\dsch\Desktop\v3\v3.ino:4:0:

C:\Users\dsch\Documents\Arduino\libraries\Adafruit_SSD1306-master/Adafruit_SSD1306.h:104:0: note: this is the location of the previous definition

#define SSD1306_LCDHEIGHT 32 ///< DEPRECATED: height w/SSD1306_128_32 defined

^

Der Sketch verwendet 13910 Bytes (45%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 320 Bytes (15%) des dynamischen Speichers, 1728 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Also es ist wie verhext der Beispiel Sketch ging jetzt und jetzt geht er nicht mehr... Ist anscheinend sporadisch das Problem. Wollte meinen Code hochladen und da hat das Display nichts angezeigt... jetzt hab ich den Beispiel Code geladen dieser wiederum geht auch nicht mehr... Oh mann haha

Spannungsversorgung prüfen, Wackelkontakte ausschließen, Kabel austauschen und auf Durchgang prüfen ... den Blickwinkel erweitern.

Hi

warning: "SSD1306_LCDHEIGHT" redefined

Sollte nicht viel mit der Spannungsversorgung zu tun haben.
Es wird angemeckert, daß 'SSD1306_LCDHEIGHT' erneut definiert werden soll - Das wurde aber bereits ... (dort) definiert.
Entweder, Du benutzt nicht ganz jungfräuliche Libs (bindest also Eigenbauten/Umbauten ein), oder Du definierst halt irgend etwas, was Du nicht definieren darfst/solltest/später woanders definiert wird.

MfG

postmaster-ino:
Sollte nicht viel mit der Spannungsversorgung zu tun haben.

Vernehme ich da etwa Kritik an meinem Beitrag?

Ich bezog mich auf

Ist anscheinend sporadisch das Problem.

Das dürfte dann nichts mit der Warnung zu tun haben.

Andererseits haben wir hier schon die lustigsten Sachen erlebt, man ist nie vor Überraschungen gefeit ;D

Hi

Nein, nicht im Geringsten.
Nur alleine der Text der Warnung Google vorgeworfen (oder eben Google-Translate) lässt darauf schließen, daß - zumindest hierfür - keine Hardware zuständig ist.

Zu 'sporadische Probleme' gebe ich Dir natürlich Recht (sofern das Problem kein Reset ist).

MfG

Hallo Leute,

ich habe das Problem gelöst. Eine Lötstelle vom Display war nicht korrekt verlötet.

Vielen Dank für euren Support! Cooles Forum.

Ich werde mal ein Bild posten wenn ich fertig bin.