Arduino Mega 2560 mit OLED Adafruit SSD1306

Hallo

Ich hab mir ein Oled Display gekauft und bekomme es nicht zum laufen.

Fehlercode:

arduino-builder/arduino-builder -compile -core-api-version 10611 -build-path /tmp/748615742 -hardware arduino-builder/hardware -hardware arduino-builder/packages/cores -tools arduino-builder/tools -tools arduino-builder/packages/tools -built-in-libraries arduino-builder/latest -libraries /tmp/449704859/pinned -libraries /tmp/449704859/custom -fqbn arduino:avr:mega:cpu=atmega2560 -build-cache /tmp -verbose=false /tmp/449704859/ssd1306_128x64_i2c

/tmp/449704859/ssd1306_128x64_i2c/ssd1306_128x64_i2c.ino:54:2: error: #error (“Height incorrect, please fix Adafruit_SSD1306.h!”);

#error(“Height incorrect, please fix Adafruit_SSD1306.h!”);

^

exit status 1

Ich hab mir die .h Datei schon mal angeschaut nur weiß ich erlich nicht was ich da ändern soll, weil die Masse vom Display stimmen 128x64.

Wenn mir ihr mir vielleicht sagen könntet was man da änder muss wäre ich sehr dankbar.

LG Dirk

Adafruit_SSD1306.zip (10.1 KB)

Hi Dirk,
Habe mir die 1306.h angeschaut, da war in den Definitionen für das 12x64er ein fehler in LCDHight drin. die war da nur mit 63 angegeben.

Habe die Datei korrigiert, und das paket hier wieder in den Anhang gesetzt.

LG Stefan

Adafruit_SSD1306 (2).zip (10.4 KB)

Danke dir Deltaflyer

Nur den fehler hab ich immer noch.

Was passiert wenn du die 3 Zeilen

#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

auskommentierst?

So wurde es hier klick empfohlen.

Dann bekomme ich diese Fehlermeldung:

In file included from /tmp/962278581/sketch/Adafruit_SSD1306.cpp:36:0:

/tmp/962278581/sketch/Adafruit_SSD1306.h:57:2: error: invalid preprocessing directive #Address

#Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)

^

/tmp/962278581/sketch/Adafruit_SSD1306.h:150:74: error: ‘SSD1306_I2C_ADDRESS’ was not declared in this scope

void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC, uint8_t i2caddr = SSD1306_I2C_ADDRESS, bool reset=true);

^

exit status 1

Falsch kopiert....

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

meinte ich

Moko: Falsch kopiert....

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

meinte ich

Die habe ich auch genommen.

Kann es leider auf grund fehlenden Display nicht testen, aber ich würde mal den I2C Scanner laufen lassen.

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

und in der Adafruit_SSD1306.h diese zeilen anpassen:

#define SSD1306_I2C_ADDRESS   0x3C  // 011110+SA0+RW - 0x3C or 0x3D
// Address for 128x32 is 0x3C
//#Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)

in der 1. Zeile die 0x3C mit Deiner Adresse tauschen.
Bitte nicht schlagen wenn ich was falsches schreibe :confused:

Hi,

mein Tipp, nimm die Lib U8glib von Oli Kraus. Sehr einfach zu nutzen und bei Bedarf kann man mit ihm auch auf deutsch kommunizieren.

Gruß

MiReu

Ja, da scheinen in Deiner 1306.h noch mehrere Fehler zu sein. sorry, hatte es vorhin nicht getestet…
Hab jetzt die 1306.h aus meiner installation genommen, denn die funktioniert. hab das 128x64 bereits definiert.
jetzt sollte es gehen.
Hab dir die dateien nochmals angehängt-

Adafruit_SSD1306.zip (10.4 KB)

MiReu: Hi,

mein Tipp, nimm die Lib U8glib von Oli Kraus. Sehr einfach zu nutzen und bei Bedarf kann man mit ihm auch auf deutsch kommunizieren.

Gruß

MiReu

Bei im bekomme ich die Meldung

'u8g' was not declared in this scope

Im Wiki werde ich auch nicht schlau

Deltaflyer: Ja, da scheinen in Deiner 1306.h noch mehrere Fehler zu sein. sorry, hatte es vorhin nicht getestet.. Hab jetzt die 1306.h aus meiner installation genommen, denn die funktioniert. hab das 128x64 bereits definiert. jetzt sollte es gehen. Hab dir die dateien nochmals angehängt-

Den I2C Scanner hab ich auch laufen lassen und die Adresse auf 0x3C geändert

Und bekomme jetzt dir Meldung:

invalid preprocessing directive #Address

#define SSD1306_I2C_ADDRESS   0x3C  // 011110+SA0+RW - 0x3C or 0x3D
// Address for 128x32 is 0x3C
#Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)

Wo hast hast Du die Datei hinkopiert? Pfad? es deutet alles darauf hin, dass deine IDE noch die nicht korrigierte version benutzt.

Sie muss im Pfad wie das Sketchbook, im Ordner Arduino\Sketchbook\libraries\adafruit_ssd1306 liegen. Liegt bei mir unter 'User\eigene Dokumente"

LG Stefan

ps. Hast Du die bibliothek überhaupt korrekt über 'Sketch, Bibliothekeinbinden' installiert?

Dank dir Deltaflyer

Das kompelieren hat geklappt. Nur bleibt mein Display Schwarz.

Bei mir (UNO) geht es so

#define OLED_RESET -1
...
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Für später: Möchtest Du Grafik und Text oder nur Text anzeigen? Welche IDE verwendest Du?

Vlt doch noch mal die Adresse 0x3D ausprobieren?

LG Stefan

agmue: Bei mir (UNO) geht es so

#define OLED_RESET -1
...
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Für später: Möchtest Du Grafik und Text oder nur Text anzeigen? Welche IDE verwendest Du?

Dank dir ....... Ich hab die Stelle vergessen .......

Nun Klappt alles.

Ich benutze die 1.8.4

Für später möchte ich 2 Displays laufen lassen wo mein DHT22 die Temperatur Und Luftfeuchtigkeit getrennt auf die Displays in Text und Grafik angezeigt bekomme.

Wenn Du 2 solche OLED einsetzen willst, brauchst Du sowas hier I2C Adress-Multiplexer Da die Adressen der Displays fix sind.

LG Stefan

Deltaflyer:
Wenn Du 2 solche OLED einsetzen willst, brauchst Du sowas hier I2C Adress-Multiplexer
Da die Adressen der Displays fix sind.

LG Stefan

Ok danke für den Tipp.

Das heist ich kann bei den I2C-Multiplexer bis zu 7 I2C Geräte dran hängen.

Noch ein Tipp: Wenn Du mal Müll auf das Display geschrieben hast, braucht es manchmal einen Reset (Spannung weg), damit es wieder was anzeigt.

SCDIRK: Das heist ich kann bei den I2C-Multiplexer bis zu 7 I2C Geräte dran hängen.

0 bis 7 sind 8 Geräte.

SCDIRK: Bei im bekomme ich die Meldung

'u8g' was not declared in this scope

Im Wiki werde ich auch nicht schlau

Ich bekomme was auf das Display, aber so richtig "schlau" bin ich auch noch nicht. Es gibt aber schöne Fonts und einen speichersparenden Textmodus.