Nano-Nachbau, OLED 0,96"Display und U8g2-Bibliothek

Nachdem ich nun endlich herausgefunden hatte, das das erste Nano-Nachbau-Board defekt ist, hab ich aus dem Dreier-Paket nun ein anderes genutzt und das Display hab ich zum Laufen bekommen.

Jedoch: Es funktioniert nur das Beispiel aus Adafruit SSD1306 womit das OLED 0,96" 128x64 angesteuert wird. Die Sternchen laufen nun schon seit 3 Stunden, also Problemlos.
In der Beschreibung des Händlers (AZ-Delivery) wird auf die Bibliothek U8g2 hingewiesen, diese hat erfreulicherweise auch mehr Beispiele. Jedoch krieg ich schon beim kompilieren die Fehlermeldung

Die anderen Beispiele von U8g2 funktionieren auch nicht. Eigentlich will ich aus dem kleinen OLED eine Uhr bauen, ein RTC-Modul liegt hier auch schon. In einem anderen Beitrag hab ich auch ein schönes Design gesehen (wenn auch unter Verwendung von Farbe).

Ich verstehe irgendwie in dieser Programmiersprache den Aufbau nicht, daher hab ich die Schwierigkeiten mit der Fehlermeldung und es wird für mich noch eine grosse Anstrengung, die RTC einzubinden...

Hallo,

dann informiere uns doch mal, wie wir dir ohne eine Fehlermeldung und ohne deinen Sketch helfen dürfen.

Ich habe leider keine Möglichkeit auf deinen Arbeitsplatz zu schauen.

Sorry....

Wenn Du uns Code und Fehlermeldung zukommen läßt, könnte sich das jemand anschauen.
Setze Code und Fehlermeldung 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.

Gruß Tommy

Sketch:

/*

  Weather.ino
  
  Demonstrates:
    - Weather icons from open-iconic set.
    - Text scrolling.
    - Partial screen update
    
  This example requires display height >= 64.

  Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

  Copyright (c) 2016, olikraus@gmail.com
  All rights reserved.

.  

*/

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif


/*
  U8g2lib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
    
  This is a page buffer example.    
*/

#define SUN    0
#define SUN_CLOUD  1
#define CLOUD 2
#define RAIN 3
#define THUNDER 4

void drawWeatherSymbol(u8g2_uint_t x, u8g2_uint_t y, uint8_t symbol)
{
  // fonts used:
  // u8g2_font_open_iconic_embedded_6x_t
  // u8g2_font_open_iconic_weather_6x_t
  // encoding values, see: https://github.com/olikraus/u8g2/wiki/fntgrpiconic
  
  switch(symbol)
  {
    case SUN:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 69);    
      break;
    case SUN_CLOUD:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 65);    
      break;
    case CLOUD:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 64);    
      break;
    case RAIN:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 67);    
      break;
    case THUNDER:
      u8g2.setFont(u8g2_font_open_iconic_embedded_6x_t);
      u8g2.drawGlyph(x, y, 67);
      break;      
  }
}

void drawWeather(uint8_t symbol, int degree)
{
  drawWeatherSymbol(0, 48, symbol);
  u8g2.setFont(u8g2_font_logisoso32_tf);
  u8g2.setCursor(48+3, 42);
  u8g2.print(degree);
  u8g2.print("°C");        // requires enableUTF8Print()
}

/*
  Draw a string with specified pixel offset. 
  The offset can be negative.
  Limitation: The monochrome font with 8 pixel per glyph
*/
void drawScrollString(int16_t offset, const char *s)
{
  static char buf[36];    // should for screen with up to 256 pixel width 
  size_t len;
  size_t char_offset = 0;
  u8g2_uint_t dx = 0;
  size_t visible = 0;
  

  u8g2.setDrawColor(0);        // clear the scrolling area
  u8g2.drawBox(0, 49, u8g2.getDisplayWidth()-1, u8g2.getDisplayHeight()-1);
  u8g2.setDrawColor(1);        // set the color for the text
    
  
  len = strlen(s);
  if ( offset < 0 )
  {
    char_offset = (-offset)/8;
    dx = offset + char_offset*8;
    if ( char_offset >= u8g2.getDisplayWidth()/8 )
      return;
    visible = u8g2.getDisplayWidth()/8-char_offset+1;
    strncpy(buf, s, visible);
    buf[visible] = '\0';
    u8g2.setFont(u8g2_font_8x13_mf);
    u8g2.drawStr(char_offset*8-dx, 62, buf);
  }
  else
  {
    char_offset = offset / 8;
    if ( char_offset >= len )
      return;    // nothing visible
    dx = offset - char_offset*8;
    visible = len - char_offset;
    if ( visible > u8g2.getDisplayWidth()/8+1 )
      visible = u8g2.getDisplayWidth()/8+1;
    strncpy(buf, s+char_offset, visible);
    buf[visible] = '\0';
    u8g2.setFont(u8g2_font_8x13_mf);
    u8g2.drawStr(-dx, 62, buf);
  }
  
}

void draw(const char *s, uint8_t symbol, int degree)
{
  int16_t offset = -(int16_t)u8g2.getDisplayWidth();
  int16_t len = strlen(s);
  
  u8g2.clearBuffer();                    // clear the internal memory
  drawWeather(symbol, degree);        // draw the icon and degree only once
  for(;;)                            // then do the scrolling
  {
  
    drawScrollString(offset, s);              // no clearBuffer required, screen will be partially cleared here
    u8g2.sendBuffer();                // transfer internal memory to the display

    delay(20);
    offset+=2;
    if ( offset > len*8+1 )
      break;
  }
}


void setup(void) {

  /* U8g2 Project: SSD1306 Test Board */
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  
  digitalWrite(10, 0);
  digitalWrite(9, 0);        

  /* U8g2 Project: T6963 Test Board */
  //pinMode(18, OUTPUT);
  //digitalWrite(18, 1);    

  /* U8g2 Project: KS0108 Test Board */
  //pinMode(16, OUTPUT);
  //digitalWrite(16, 0);    

  /* U8g2 Project: LC7981 Test Board, connect RW to GND */
  //pinMode(17, OUTPUT);
  //digitalWrite(17, 0);    

  /* U8g2 Project: Pax Instruments Shield: Enable Backlight */
  //pinMode(6, OUTPUT);
  //digitalWrite(6, 0);    

  u8g2.begin();  
  u8g2.enableUTF8Print();
}

void loop(void) {

  draw("What a beautiful day!", SUN, 27);
  draw("The sun's come out!", SUN_CLOUD, 19);
  draw("It's raining cats and dogs.", RAIN, 8);
  draw("That sounds like thunder.", THUNDER, 12);
  draw("It's stopped raining", CLOUD, 15);
  
  
  
}

Fehlermeldung ?

Die Bedingungen des Boardes lassen mich nun selten dämlich dastehen.
Hier darf ich als Anfänger nur alle 5 min. was posten und der Sketch sprengt die 9000 Zeichen-Marke.

Sorry, aber ich bin nicht so blöd, das ihr mit dem ersten Artikel nichts anfangen könnt, aber die Fehlermeldung und den Sketch nachreichen, vermutlich mit diesem Kommentar kommt dann auf 15 min., die ich zum Erstellen des Beitrages brauche.

Wo ist dein Problem ?
Statt zu schreiben, was du nicht kannst, poste doch einfach die Fehlermeldung.

'u8g2' was not declared in this scope

Hallo,

Kann es sein das der Compiler die lib nicht findet. Ich kenne die Lib nicht habe ich das übersehen oder hast Du tatsächlich kein Objekt U8g2 angelegt. Aber eines von den Beispielen sollte doch laufen. Ic2 adresse stimmt wo ist die zu finden ?

Heinz

hobbybastler72:
'u8g2' was not declared in this scope

Ist das die komplette Fehlermeldung ?

Vermutlich die Library nicht installiert.