OLED-экран гаснет при задержке () — библиотека U8G2 + Arduino Nano
Описание
В настоящее время я пытаюсь получить этот SSD1306 0,91" OLED-экран с Arduino Nano с библиотекой U8G2 (согласно руководству продавца) и в любом коде, который я запускаю, как только delay() выполняется, экран гаснет и больше не показывает текст или изображение.
Какова возможная причина?
Проводка
Код
Чтобы сначала убедиться, что модуль OLED работает, я использую один из примеров HelloWorld из библиотеки U8G2, из которого (с удаленными комментариями) я выполняю следующий код:
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer(); // очищаем внутреннюю память
u8g2.setFont(u8g2_font_ncenB08_tr); // выбираем подходящий шрифт
u8g2.drawStr(0,10,"Hello World!"); // пишем что-то во внутреннюю память
u8g2.sendBuffer(); // передаем внутреннюю память на дисплей
delay(1000);
}
Ожидаемый результат
На OLED-экране всегда должно отображаться сообщение "Hello World!" текст, как в этом видео на YouTube с той же настройкой.
Фактический результат
При запуске отображается сообщение "Hello World" текст на долю секунды и он исчезает.
Я обнаружил, что как только функция delay() выполняется, экран навсегда становится пустым и текст не перезагружается. Я не хочу использовать этот подход, если это возможно, поскольку:
- Я планирую использовать батарею для питания Arduino и экрана, а постоянное обновление экрана снизит автономность
- При этом экран немного мерцает.
Устранение неполадок выполнено
- Я использовал другой Arduino Nano, и результат был таким же.
- Я использую источник питания 5 В 2 А для всей схемы.
- Я попробовал разные примеры скетчей U8G2 с тем же результатом (работает, только если нет задержки()).
- Я попытался использовать другой OLED-модуль с такими же характеристиками, и результат тот же.
- Я пытался использовать библиотеку Adafruit SSD1306, но на экране ничего не отображается.
@Markussen, 👍2
Обсуждение0
- Сообщение об ошибке при попытке настроить библиотеку U8g2
- Arduino Nano работает очень медленно, хотя расчеты просты и задержек нет.
- SSD1306 показывает статику, когда я пытаюсь отобразить изображение XBM
- Насколько "быстро" могут обновляться данные GPS во время движения и зависит ли это от mcu?
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
Что я могу вам сказать, так это то, что если я заменю UNO на ваш Nano (что не должно иметь значения) и дисплей x64 на ваш дисплей x32 (что может иметь значение, но я в этом сомневаюсь), ваш код будет работать дословно. Он не гасит дисплей. Я могу изменить его, чтобы отобразить счетчик, и он считается предсказанным. Включите номера версий всего, что задействовано (ide, библиотеки, ядро) и ссылки на ваш фактический дисплей и плату arduino., @timemage
Хорошо. Я обнаружил, что мой дисплей идентичен тому, что у вас есть (при условии, что у вас действительно есть то, что вы связали), и он продолжает работать. Есть небольшая разница в том, как он отображается, но он по-прежнему работает так, как ожидалось. Итак, добавляем детали., @timemage
Я вижу здесь что-то немного странное — экран перерисовывается каждую секунду, так как у вас есть этот код в loop(). Но это все равно должно снова отображать текст, даже если он обновлен. Это все еще происходит, если в цикле остается *только* задержка, а остальное перемещается в setup()?, @RDragonrydr
Большое спасибо. На прошлой неделе у меня было мало времени, но сегодня я проведу тест, вернусь с дальнейшими выводами и обновлю этот комментарий/сообщение., @Markussen
Только что провел дополнительное тестирование, и вот еще информация: + IDE: пробовал с Arduino IDE 2.0.1 и VSCode 1.73.0 с расширением Arduino v0.4.12 - Только что проверил с оригинальным Uno и тот же результат. - Если я ставлю задержку (50), экран сохраняет HelloWorld! слово, хотя мигание более заметно. - Перемещение всего, кроме delay() или delay(50), в настройку приводит к тому же поведению (на долю секунды отображается HelloWorld, а экран гаснет)., @Markussen
Наконец-то я нашел первопричину. Я использовал макетную плату для этой установки, и как только я вынул компоненты и использовал другие кабели, все заработало, как и ожидалось. **Усвоенный урок: не всегда полагайтесь на то, что макетные платы на 100% функциональны; когда ничего не помогает, уберите макетную плату из уравнения.**, @Markussen