Медленно отрабатывае Oled дисплей
- Войдите на сайт для отправки комментариев
Задача стоит вывозить вот такое число 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
Печатайте не все сразу, а сначала только ones, потом ones и tens... Так и узнаете в чем причина.
Не совсем понял как это сделать. Я начинающий...
Графический дисплей в несколько десятков раз медленнее знакогенерирующего? Кто бы мог подумать.
На этом же дисплее, процедура вывода числа с двумя точками у других (на ютубе) работает быстро. Скетча их у меня нет.
Может есть иной способ вывода числа 3.657.350 и менять его энкодером?
Пусть для начала код вставит по правилам форума http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Chuck Noland, это делается не так. Нужную строку символов формируют отдельно от вывода на дисплей (в массив), а затем одной командой выводят на дисплей.
Первое !
Если выводите триадами, то и делите число на триады:
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(); и картинка отобразится.
Третье !
Пока вы не вставите код по правилам и с номерами строк - вам очень сложно помочь.