Как заставить текст мигать на экране ssd1306 i2c
Я пытаюсь чередовать строку вперед и назад на oled-экране SSD1306. Итак, я хочу, чтобы на дисплее отображалось «test1» в течение 0,5 секунд, затем «test2» в течение 0,5 секунд, повторяя. приведенный ниже код просто показывает «test1» в течение 0,5 секунд, а затем становится пустым... Я использую экран ssd1306 128_32 i2c и библиотеку adafruit.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Ширина OLED-дисплея в пикселях
#define SCREEN_HEIGHT 32 // Высота OLED-дисплея в пикселях
// Объявление для дисплея SSD1306, подключенного к I2C (контакты SDA, SCL)
#define OLED_RESET 4 // Номер вывода сброса (или -1, если используется общий вывод сброса Arduino)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = генерировать внутреннее напряжение дисплея от 3,3 В
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Адрес 0x3C для 128x32
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Не продолжать, цикл навсегда
}
// Показать содержимое буфера начального отображения на экране --
// библиотека инициализирует это с помощью экрана-заставки Adafruit.
display.display();
delay(2000); // Пауза на 2 секунды
// Очистить буфер
display.clearDisplay();
// Показать буфер отображения на экране. Вы ДОЛЖНЫ вызывать display() после
// команды рисования, чтобы сделать их видимыми на экране!
display.display();
delay(2000);
display.setTextSize(4); // Рисуем текст в масштабе 2X
display.setTextColor(SSD1306_WHITE);
}
void loop() {
testdrawstyles1();
testdrawstyles2();
}
void testdrawstyles1(void) {
display.clearDisplay();
display.print(F("test1"));
display.display();
delay(500);
}
void testdrawstyles2(void) {
display.clearDisplay();
display.print(F("test2"));
display.display();
delay(500);
}
@MattG, 👍1
Обсуждение1 ответ
Лучший ответ:
▲ 3
Как утверждает OP, ошибка была вызвана тем, что курсор не был сброшен в видимое положение на дисплее. Текст был написан за пределами OLED.
Похоже, что метод clearDisplay()
не сбрасывает курсор.
Решение состоит в том, чтобы изменить следующие методы
void testdrawstyles1(void)
{
display.clearDisplay();
display.setCursor(0,0);
display.print(F("test1"));
display.display();
delay(500);
}
void testdrawstyles2(void)
{
display.clearDisplay();
display.setCursor(0,0);
display.print(F("test2"));
display.display();
delay(500);
}
,
@Peter Paul Kiefer
Смотрите также:
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Чтение оперативной памяти с OLED-контроллера SH1106 через I2C
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- OVF в последовательном мониторе вместо данных
- ЖК-дисплей I2C отображает странные символы
- Соединение I2C зависает Ведущий если ведомый отключается
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
Возможно, вам придется сбросить курсор. Я не знаю, справится ли с этим ClearDisplay. Не могли бы вы попробовать:
display.setCursor(0,0);
над каждым оператором печати. Возможно, на самом деле вы печатаете текст в «нирвану»., @Peter Paul KieferЭто сделало это! Спасибо! Преобразуйте свой комментарий в ответ, пожалуйста :), @MattG