Медленно отрабатывае Oled дисплей

Chuck Noland
Offline
Зарегистрирован: 22.02.2021

Задача стоит вывозить вот такое число 3.657.350 по I2c на Oled 128-64. Число - это будет частота генератора. Для этого создаю переменную bfo = 3657350

Далее делю это число с остатком, получается число из отдельных цифр:

millions = int(bfo/1000000); hundredthousands = ((bfo/100000)%10); tenthousands = ((bfo/10000)%10); thousands = ((bfo/1000)%10); hundreds = ((bfo/100)%10); tens = ((bfo/10)%10); ones = ((bfo/1)%10);

Далее вывожу каждую цифру отдельно на дисплей:

myOLED.setFont(MediumFontRus); myOLED.setCursor(15,20); myOLED.print(millions); myOLED.print("."); myOLED.print(hundredthousands); myOLED.print(tenthousands); myOLED.print(thousands); myOLED.print("."); myOLED.print(hundreds); myOLED.print(tens); myOLED.print(ones);

При повороте энкодера к bfo прибавляется число к примеру 1000. Далее вызывается весь этот код, bfo делится на отдельные числа и вывод на экран. Вопрос в том что ардуинка видимо не успевает считать (делить) число. При 5-ти поворотах энкодера срабатывает только 4 раза. Ардуинка явно отстаёт.

Этот же код работает на I2c но с 1602 дисплеем как пуля. В чем может быть причина? Прилагаю весь код целиком.

 

 

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Печатайте не все сразу, а сначала только ones, потом ones и tens... Так и узнаете в чем причина.

Chuck Noland
Offline
Зарегистрирован: 22.02.2021

Не совсем понял как это сделать. Я начинающий...

rkit
Offline
Зарегистрирован: 23.11.2016

Графический дисплей в несколько десятков раз медленнее знакогенерирующего? Кто бы мог подумать.

Chuck Noland
Offline
Зарегистрирован: 22.02.2021

На этом же дисплее, процедура вывода числа с двумя точками у других (на ютубе) работает быстро. Скетча их у меня нет.
Может есть иной способ вывода числа 3.657.350 и менять его энкодером?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Пусть для начала код вставит по правилам форума http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Chuck Noland, это делается не так. Нужную строку символов формируют отдельно от вывода на дисплей (в массив), а затем одной командой выводят на дисплей.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Первое !

Если выводите триадами, то и делите число на триады:

int t3=bfo%1000

int t2=(bfo/1000)%1000

int t1=(bfo/1000000)%1000

выводим t1 t2 t3 через разделитель.

Второе !

Библиотека iarduino_OLED по умолчанию на каждую команду рисования, печати, ... ... сразу же выводит результат на экран. В итоге пока вы выводите своё число посимвольно - экран отобразится несколько раз ( display_frequency() перерисовывает весь экран 9 !!! раз).

Надо после myOLED.begin(); вставить myOLED.autoUpdate(false); вывод будет происходить только в буфер, после того как картинка готова - вставляем myOLED.update(); и картинка отобразится.

Третье !

Пока вы не вставите код по правилам и с номерами строк - вам очень сложно помочь.