U8g2lib - помогите раскурить

deloed
Offline
Зарегистрирован: 23.05.2019

Собственно вопрос: как обновлять информацию на дисплее частями?

Пример:

Строка 1 - параметр_1 (например время)

Строка 2 - параметр_2 (например текущая частота)

Как сделать так, чтобы обновлять только параметр_1, при сохранении отображения параметра_2?

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

а в документации к ей чо пишуть?

deloed
Offline
Зарегистрирован: 23.05.2019

Дык, если б была понятна документация не искал бы помощи на форуме

Jeka_M
Jeka_M аватар
Онлайн
Зарегистрирован: 06.07.2014

Что конкретно не понятно в документации? Вы примеры из самой библиотеки смотрели? Выводить что-нибудь пробовали? Информация на дисплее и так сохраняется. Меняется только то, что выводите.

deloed
Offline
Зарегистрирован: 23.05.2019

со статикой все ясно, но затык именно в обновлении динамического параметра с сохранением второго параметра :(

Jeka_M
Jeka_M аватар
Онлайн
Зарегистрирован: 06.07.2014

Ну так выводите на дисплей только тот параметр, который нужно изменить. Второй не трогайте. В чём проблема? Графическая библиотека вообще не знает, что такое параметр_1 или параметр_2. Вывод на дисплей осуществляется вручную по координатам. А библиотека перерисует текст в этом месте.

https://github.com/olikraus/u8g2/wiki/u8g2reference#drawstr
https://github.com/olikraus/u8g2/wiki/u8g2reference#print

deloed
Offline
Зарегистрирован: 23.05.2019

Jeka_M, а вы сами юзали эту библиотеку?

deloed
Offline
Зарегистрирован: 23.05.2019

Вот накидал пример, но в loop статика затирается

#include <U8g2lib.h> 
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 1000;           // interval at which to blink (milliseconds)
unsigned char dynamicParam;

void displayDynamic (void){
  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 35);
    u8g2.print(dynamicParam);  
  } while ( u8g2.nextPage() );  
}

void setup() {
  Serial.begin(9600);
  Serial.println("Hello world!");

  u8g2.begin();  
  u8g2.enableUTF8Print();
  u8g2.setFont(u8g2_font_8x13_tr);

  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 15);
    u8g2.print("Static");  
  } while ( u8g2.nextPage() );
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    dynamicParam++;  
    displayDynamic ();
  }
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

При использовании данной библиотеки отрисовывыть на экране придётся всё, т.к. обёртка firstPage()/nextPage() - чистит экранный буфер при вызове firstPage(). Так устроена библиотека.

deloed
Offline
Зарегистрирован: 23.05.2019

DIYMan пишет:

При использовании данной библиотеки отрисовывыть на экране придётся всё, т.к. обёртка firstPage()/nextPage() - чистит экранный буфер при вызове firstPage(). Так устроена библиотека.

насколько я вкурил библиотеку - именно так и есть. Собственно поэтому и возник затык с этим моментом.

b707
Онлайн
Зарегистрирован: 26.05.2017

deloed - для ОЛЕД 128х64(насколько понял, у вас такой дисплей)-  существует масса библиотек, в большинстве своем более удобных и менее ресурсоемких, чем U8glib

deloed
Offline
Зарегистрирован: 23.05.2019

хм, оказывается надо было смотреть в сторону функции setBufferCurrTileRow. Вывод через одно место, но хоть что-то

deloed
Offline
Зарегистрирован: 23.05.2019

Подскажете либу, которая поддерживает ssd1306 + sh1106 на дуине и esp?

forfrends
Offline
Зарегистрирован: 24.02.2015

Посмотрите это видео: https://www.youtube.com/watch?v=0DJwQew7EjY

deloed
Offline
Зарегистрирован: 23.05.2019

forfrends пишет:

Посмотрите это видео: https://www.youtube.com/watch?v=0DJwQew7EjY

Вы это серьезно? 

forfrends
Offline
Зарегистрирован: 24.02.2015

Да, серьезно. Вы создали тему: U8g2lib - помогите раскурить

В видео подробно разбирается библиотека и команды

deloed
Offline
Зарегистрирован: 23.05.2019

forfrends пишет:

Да, серьезно. Вы создали тему: U8g2lib - помогите раскурить

В видео подробно разбирается библиотека и команды

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

Ну и чтоб два раза не вставать - может вы в курсе как юзать функции userInterfaceMessage и userInterfaceSelectionList?

b707
Онлайн
Зарегистрирован: 26.05.2017

deloed пишет:

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

Блин, ну возьмите уже другую библиотеку...

Наберите в гугле "OLED 0.96 arduino" - таких библиотек не менее десятка

forfrends
Offline
Зарегистрирован: 24.02.2015

Да к в чем проблема??? Примеров - море, библиотек - тоже.. В той же u8g2 есть примеры с использованием нужных функций:
IconMenu.ino, SelectionList.ino, MessageBox и т.д...
Не понимаю, что вам мешает обновлять весь экран? 

deloed
Offline
Зарегистрирован: 23.05.2019

b707 пишет:

Блин, ну возьмите уже другую библиотеку...

Дет сад какой-то. Смысл топика в раскурке именно это либы.

 

 

deloed
Offline
Зарегистрирован: 23.05.2019

forfrends пишет:

Не понимаю, что вам мешает обновлять весь экран? 

Ну бывает, я тоже многих вещей не понимаю =)

b707
Онлайн
Зарегистрирован: 26.05.2017

deloed пишет:

Дет сад какой-то. Смысл топика в раскурке именно это либы.

тогда действительно детсад