Как переносить/прокручивать текст с помощью U8G2?

Кто-нибудь знает, как переносить и/или переносить текст с помощью библиотеки U8G2? Я знаю, что есть и другие библиотеки, которые делают это за вас, но я бы хотел использовать U8G2.

Спасибо!

Мой код здесь для справки. Он не совсем чистый, но пока работает.

, 👍0

Обсуждение

Это нужно делать вручную. Прокрутка — это просто вывод подстрок и добавление пробелов. Перенос — это просто вывод подстрок на разных строках., @Majenko

Arduino Uno имеет очень ограниченный объём памяти для реализации прокрутки и переноса текста для драйвера ЖК-дисплея в целом. Скетч должен выполнять эти функции, например, вычислять переносы строк, отображаемые фрагменты текста, обновлять текст при изменении фокуса (например, при прокрутке), сохранять текст и т. д. Судя по всему, ваш скетч рассчитан на ограниченный объём текста, поэтому вы должны иметь возможность выполнять эти вычисления, сохранять состояние, проецировать текстовые поля и т. д., @Mikael Patel


1 ответ


1

Вы можете сделать что-то вроде этого:

    void loop(void) {
        u8g2_uint_t x;
        
        u8g2.firstPage();
        do {
        
            // рисуем прокручиваемый текст с текущего смещения
            x = offset;
            u8g2.setFont(u8g2_font_inb30_mr);       // устанавливаем целевой шрифт
            do {                                // повторная отрисовка прокручиваемого текста...
                u8g2.drawUTF8(x, 30, text);         // рисуем прокручиваемый текст
                x += width;                     // добавить ширину прокручиваемого текста в пикселях
            } while( x < u8g2.getDisplayWidth() );      // рисуем снова, пока не заполнится весь дисплей
            
            u8g2.setFont(u8g2_font_inb16_mr);       // рисуем текущую ширину в пикселях
            u8g2.setCursor(0, 58);
            u8g2.print(width);                  // это значение должно быть меньше 128, если не установлен U8G2_16BIT
            
        } while ( u8g2.nextPage() );
        
        offset-=1;                          // прокрутка на один пиксель
        if ( (u8g2_uint_t)offset < (u8g2_uint_t)-width )    
            offset = 0;                         // начать заново
            
        delay(10);                          // делаем небольшую задержку
    }

Код взят с сайта https://github.com.

Это отличная библиотека, но она может потребовать много памяти, очень хорошо подходит для ESP8266 (проверено на nodeMCU) / ESP32.

Конечно, на ESP32 он быстрее.

Используется для небольшого OLED-экрана размером 0,98 дюйма.

,