Как заставить текст мигать на экране 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);
}

, 👍1

Обсуждение

Возможно, вам придется сбросить курсор. Я не знаю, справится ли с этим ClearDisplay. Не могли бы вы попробовать: display.setCursor(0,0); над каждым оператором печати. Возможно, на самом деле вы печатаете текст в «нирвану»., @Peter Paul Kiefer

Это сделало это! Спасибо! Преобразуйте свой комментарий в ответ, пожалуйста :), @MattG


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);
}
,