Oled дисплей 128x64, помощь
- Войдите на сайт для отправки комментариев
Чт, 11/10/2018 - 13:22
Здравствуйте, делаю сигнализатор скорости для машины. При выводе на дисплей скорости в сторону увеличения все хорошо, но вот при уменьшении скорости, остаётся число на экране, например было трехзначное число, при достижении скорости 99 первый разряд предыдущего числа горит на экране. Вопрос как его убрать? Пробовал наложить на этот разряд квадрат в цвет фона, но он постоянно мерцает.
gzp13, выводить не число а строку во всю ширину дисплея
Как это строку? Я указываю координаты, указываю что надо вывести скорость и все. Да, библиотеку использую iarduino OLED.
Я вывожу так, myOLED. print(speed, 55,55);
Идея простая: конвертируем число в строку, и слева (или справа, как угодно) - добиваем пробелами до максимальной разрядности. При этом число 99 будет выглядеть так: "99 ", число 123 - так: "123" и т.п. Т.е. пробелы - просто для затирания неиспользуемого разряда, чтобы он не оставался на экране.
Именно об этом говорил dimax. Данный способ - самый простой, как кувалда. Есть пограмотнее, но посложнее. Почему пограмотнее: незачем постоянно перерисовывать все разряды - надо только при смене разрядности выводимого числа в меньшую сторону - стирать знакоместо канувшего в небытие разряда.
Я правильно понял, надо сделать так?
MYOLED. print(speed, 50,55);
MYOLED.setcursor(60,66);
MYOLED.print(" ") ;
Лучше snprintf() в буфер, а потом буфер в print(). Тогда будет примыкание пробела к цифрам стопроцентное.
Все, разобрался, спасибо за наводки. Просто нарисовал квадрат в цвет фона и вставил куда надо на экране.
Все, разобрался, спасибо за наводки. Просто нарисовал квадрат в цвет фона и вставил куда надо на экране.
этта правильно, канеш, но не быстро.
Опять я что то затупил, не понимаю что делать?
Посмотрите пожалуйста, в чем ошибка? Смысл в том, что если speed<10 то надо затереть цифры справа, чтобы индицировалось одноразрядное число от 0 до 9. Если 100>speed>10 то надо затереть цифры, но чтобы индицировались уже два разряда.
если speed целое, то
(но это не точно) проверь щажжэ, я от канпилятора далеко и у меня OLED нету.
Ща проверю.
Проверил, работает правильно, но мне же надо затереть цифру 0 при достижении значения 10, чтобы на экране отображалась цифра 9.
http://cpp.com.ru/shildt_spr_po_c/08/0804.html
Искать разделы со словом "модификаторы".
минус убери:
sprintf(buf,
"%
3d"
,speed);
Это работает с числами типа INT, а у меня скорость float.
ну иоптваюмать. цифры после запятой нужны?
А еще чтобы float задом-наперед выводилось.
И красненьким.
Но иногда можно синим.
Точечка чтоб мигала.
Но не быстро.
Или быстро, когда скорость большая.
Попискивала еще чтоб.
На IPS OLED MP3 экране.
Это работает с числами типа INT, а у меня скорость float.
Ну и что, фантазию включай.
Это работает с числами типа INT, а у меня скорость float.
Ну и что, фантазию включай.
поправочка : ((x*y) mod y) = x ,всегда
более уместней будет :
поправочка : ((x*y) mod y) = x ,всегда
более уместней будет :
Если это была шутка, то она несмешная..
на самом деле, ((x*y) mod y) = 0 ,всегда, если x и y целые
DetSimen,А у нас "x" это флоат. Поэтому (3.1415*100)%100 = 14
DetSimen,А у нас "x" это флоат. Поэтому (3.1415*100)%100 = 14
а я согласно.
поправочка : ((x*y) mod y) = x ,всегда
более уместней будет :
Если это была шутка, то она несмешная..
на самом деле, ((x*y) mod y) = 0 ,всегда, если x и y целые
да, поспешил,был не прав.