Compiler errors with Adafruit_GFX and SSD1306 128x64 OLED display...

Status
Not open for further replies.
Ok I'm lost with this one. It delves into library issues that I need words of wisdom for. There are many related posts in the forum that seem similar but not quite the same.

I'm trying to use a common SSD1306 128x64 OLED display with a Teensy 4.1. When I attempt to compile & upload, I get a series of compiler errors. I've pasted the code & errors below.

The errors seem to suggest there's a conflict between two different versions of the Adafruit_GFX libraries. Perhaps Teensyduino installed a new one..?

But here's the thing, it works fine with a generic Arduino Nano. If I leave the code window open and swap the Teensy with a Nano, the code compiles & uploads without error, and I see the Adafruit "starflakes" animation.

So the issue seems specific to whatever happens when the Arduino IDE > Tools > Board is switched to Teensy 4.1...

The wiring isn't an issue at this point, since it won't even compile, but for reference:
OLED -- Teensy
VCC --> 3.3v
GND --> Logic GND
SCL --> 19/A5/SCL
SDA --> 18/A4/SDA

Here's the full compiler log; the errors are towards the end. The source code follows after:

Code:
C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\Arduino\hardware -hardware C:\Users\adminalb\AppData\Local\Arduino15\packages -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -tools C:\Users\adminalb\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\adminalb\Documents\Arduino\libraries -fqbn=teensy:avr:teensy41:usb=serial,speed=600,opt=o2std,keys=en-us -ide-version=10813 -build-path C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834 -warnings=default -build-cache C:\Users\adminalb\AppData\Local\Temp\arduino_cache_763406 -verbose C:\Users\adminalb\Downloads\Arduino\DIY Mall 0.96 OLED Display\IIC_OLED\0.96Inch\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino
C:\Program Files\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files\Arduino\hardware -hardware C:\Users\adminalb\AppData\Local\Arduino15\packages -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -tools C:\Users\adminalb\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\adminalb\Documents\Arduino\libraries -fqbn=teensy:avr:teensy41:usb=serial,speed=600,opt=o2std,keys=en-us -ide-version=10813 -build-path C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834 -warnings=default -build-cache C:\Users\adminalb\AppData\Local\Temp\arduino_cache_763406 -verbose C:\Users\adminalb\Downloads\Arduino\DIY Mall 0.96 OLED Display\IIC_OLED\0.96Inch\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino
Using board 'teensy41' from platform in folder: C:\Program Files\Arduino\hardware\teensy\avr
Using core 'teensy4' from platform in folder: C:\Program Files\Arduino\hardware\teensy\avr
Detecting libraries used...
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
  -> candidates: [Wire@1.0]
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Adafruit_GFX.h: [Adafruit_GFX Adafruit_GFX_Library@1.9.0]
ResolveLibrary(Adafruit_GFX.h)
  -> candidates: [Adafruit_GFX Adafruit_GFX_Library@1.9.0]
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_GFX" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Adafruit_SSD1306.h: [Adafruit_SSD1306]
ResolveLibrary(Adafruit_SSD1306.h)
  -> candidates: [Adafruit_SSD1306]
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_GFX" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Using cached library dependencies for file: C:\Program Files\Arduino\hardware\teensy\avr\libraries\Wire\Wire.cpp
Using cached library dependencies for file: C:\Program Files\Arduino\hardware\teensy\avr\libraries\Wire\WireIMXRT.cpp
Using cached library dependencies for file: C:\Program Files\Arduino\hardware\teensy\avr\libraries\Wire\WireKinetis.cpp
Using cached library dependencies for file: C:\Program Files\Arduino\hardware\teensy\avr\libraries\Wire\utility\twi.c
Using cached library dependencies for file: C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_GFX\Adafruit_GFX.cpp
Using cached library dependencies for file: C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_GFX\glcdfont.c
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_GFX" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306" "C:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306\\Adafruit_SSD1306.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Generating function prototypes...
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_GFX" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp" -o "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\preproc\\ctags_target_for_gcc_minus_e.cpp" -DARDUINO_LIB_DISCOVERY_PHASE
"C:\\Program Files\\Arduino\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Compiling sketch...
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/precompile_helper" "C:\\Program Files\\Arduino\\hardware\\teensy\\avr/cores/teensy4" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834" "C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -x c++-header -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr/cores/teensy4" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834/pch/Arduino.h" -o "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834/pch/Arduino.h.gch"
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\pch\Arduino.h.gch
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -c -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834/pch" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_GFX" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306" "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp" -o "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\sketch\\ssd1306_128x64_i2c.ino.cpp.o"
Compiling libraries...
Compiling library "Wire"
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\libraries\Wire\Wire.cpp.o
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\libraries\Wire\WireKinetis.cpp.o
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\libraries\Wire\WireIMXRT.cpp.o
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\libraries\Wire\utility\twi.c.o
Compiling library "Adafruit_GFX"
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\libraries\Adafruit_GFX\glcdfont.c.o
Using previously compiled file: C:\Users\adminalb\AppData\Local\Temp\arduino_build_152834\libraries\Adafruit_GFX\Adafruit_GFX.cpp.o
Compiling library "Adafruit_SSD1306"
"C:\\Program Files\\Arduino\\hardware\\teensy/../tools/arm/bin/arm-none-eabi-g++" -c -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -D__IMXRT1062__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY41 -DF_CPU=600000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH "-IC:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834/pch" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\cores\\teensy4" "-IC:\\Program Files\\Arduino\\hardware\\teensy\\avr\\libraries\\Wire" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_GFX" "-IC:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306" "C:\\Users\\adminalb\\Documents\\Arduino\\libraries\\Adafruit_SSD1306\\Adafruit_SSD1306.cpp" -o "C:\\Users\\adminalb\\AppData\\Local\\Temp\\arduino_build_152834\\libraries\\Adafruit_SSD1306\\Adafruit_SSD1306.cpp.o"
C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp: In member function 'void Adafruit_SSD1306::begin(uint8_t, uint8_t)':
C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:156:17: error: cannot convert 'volatile uint32_t* {aka volatile long unsigned int*}' to 'volatile uint8_t* {aka volatile unsigned char*}' in assignment
     clkport     = portOutputRegister(digitalPinToPort(sclk));
                 ^
C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:158:17: error: cannot convert 'volatile uint32_t* {aka volatile long unsigned int*}' to 'volatile uint8_t* {aka volatile unsigned char*}' in assignment
     mosiport    = portOutputRegister(digitalPinToPort(sid));
                 ^
C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:160:17: error: cannot convert 'volatile uint32_t* {aka volatile long unsigned int*}' to 'volatile uint8_t* {aka volatile unsigned char*}' in assignment
     csport      = portOutputRegister(digitalPinToPort(cs));
                 ^
C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:162:17: error: cannot convert 'volatile uint32_t* {aka volatile long unsigned int*}' to 'volatile uint8_t* {aka volatile unsigned char*}' in assignment
     dcport      = portOutputRegister(digitalPinToPort(dc));
                 ^
Multiple libraries were found for "Adafruit_GFX.h"
 Used: C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_GFX
 Not used: C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_GFX_Library
Using library Wire at version 1.0 in folder: C:\Program Files\Arduino\hardware\teensy\avr\libraries\Wire 
Using library Adafruit_GFX in folder: C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_GFX (legacy)
Using library Adafruit_SSD1306 in folder: C:\Users\adminalb\Documents\Arduino\libraries\Adafruit_SSD1306 (legacy)
Error compiling for board Teensy 4.1.

Here's the code. It's a chopped-down version of the original Adafruit example sketch:

Code:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16 
#define LOGO16_GLCD_WIDTH  16 

static unsigned char PROGMEM const logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000 };

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

void setup()   {                

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
  
  display.display(); // show splashscreen
  delay(2000);
  display.clearDisplay();   // clears the screen and buffer

  for (int pix_x = 0; pix_x < 32; pix_x = pix_x + 2) {
    display.drawPixel(pix_x, 0, WHITE);
    //display.display();
  }
  delay(2000);
  display.clearDisplay();

  // draw a bitmap icon and 'animate' movement
  testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
}

void loop() {
  
}

void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  uint8_t icons[NUMFLAKES][3];
  srandom(666);     // whatever seed
 
  // initialize
  for (uint8_t f=0; f< NUMFLAKES; f++) {
    icons[f][XPOS] = random() % display.width();
    icons[f][YPOS] = 0;
    icons[f][DELTAY] = random() % 5 + 1;
    
    Serial.print("x: ");
    Serial.print(icons[f][XPOS], DEC);
    Serial.print(" y: ");
    Serial.print(icons[f][YPOS], DEC);
    Serial.print(" dy: ");
    Serial.println(icons[f][DELTAY], DEC);
  }

  while (1) {
    // draw each icon
    for (uint8_t f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
    }
    display.display();
    delay(50);
    
    // then erase it + move it
    for (uint8_t f=0; f< NUMFLAKES; f++) {
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS],  logo16_glcd_bmp, w, h, BLACK);
      // move it
      icons[f][YPOS] += icons[f][DELTAY];
      // if its gone, reinit
      if (icons[f][YPOS] > display.height()) {
	icons[f][XPOS] = random() % display.width();
	icons[f][YPOS] = 0;
	icons[f][DELTAY] = random() % 5 + 1;
      }
    }
   }
}
 
Ok nevermind, I fixed it. I stared at the errors and re-read them repeatedly and poked around for like an hour until they finally sunk in, and I realized it was indeed a library conflict. Then I remembered how to fix it: I found them at the path indicated, and moved everything related to Adafruit GFX and SSD1306 somewhere else. Then I re-installed them in Library Manager instead of from ZIP files. All is good now, except due to a bug in the GFX library, I had to revert to the previous sub-version, and the SSD1306 needed that bit changed for the screen height.
 
Last edited:
Status
Not open for further replies.
Back
Top