Arduino Nano I2C OLED-дисплей 0,96 дюйма 128x64 пикселей

У меня возникла странная проблема при попытке запустить код hello world на arduino nano, подключенном к OLED-дисплею.

Это код, который я использовал:

    #include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

void setup() {

  // SSD1306_SWITCHCAPVCC = генерировать напряжение дисплея от 3,3В внутри
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32

  display.display();
  delay(2000);

  display.clearDisplay();      //this line to clear previous logo
  display.setTextColor(WHITE); //without this no display
  display.print("Hello World!");//your TEXT here
  display.display();            //to shows or update your TEXT
}

void loop() {

 }

Но я вижу это на дисплее. OLED

Есть идеи, чего мне может не хватать?

Спасибо!

, 👍1

Обсуждение

У вас есть ссылка на продукт на вашем дисплее?, @Fahad

У меня был этот дисплей, который лежал некоторое время, к сожалению, я не могу найти ссылку на продукт., @zanga

Является ли драйвер IC SSD1306? Вы видите это на задней панели дисплея?, @Fahad

Не зная, где я могу это увидеть, я добавил картинку с обратной стороны., @zanga

Почему вы используете библиотеку Adafruit_SSD1306? Возможно, драйвер дисплея не является SSD1306. Кроме того, на вашей второй картинке видно, что адрес "0x78". В коде вы используете " 0x3C`. Кроме того, покажите нам, как вы подключили дисплей к Arduino Nano., @Fahad

Кроме того, проверьте, есть ли подтягивания на выводах I2C дисплея., @Fahad

@Fahad Это не похоже на проблему I2C, а скорее что-то с обработкой шрифтов (обратите внимание, что "H" и "W" правильные, но остальные буквы несколько не в порядке (L=E, S=L и т. Д.) Я бы попробовал переустановить библиотеку., @PMF

Хорошая мысль. Я видел, как другие люди говорили, что иногда дисплей китайского производства имеет адрес "0x7A", но работает с "0x3C". Но подтягивание может стать проблемой. Если подтягивания нет, плавающее состояние может генерировать данные "мусора"., @Fahad

0x7A равно 0x3C << 1 что верно. Адреса I2C имеют 7 бит, а 8-й бит (самый правый) используется в качестве флага R/W. Таким образом, вы сдвигаете адрес I2C на один влево, а затем добавляете 1 или 0 слева для операции чтения/записи (я забыл, как это обойти). Библиотека Arduino делает это за вас, поэтому вам нужно указать "нешифрованный" адрес 0x3C., @Majenko


1 ответ


Лучший ответ:

1

Тайна разгадана :)

После еще некоторого чтения выясняется, что драйвер дисплея на самом деле SH1106, поэтому после использования правильной библиотеки я заставил дисплей работать.

,