Работа с библиотекой U8glib
- Войдите на сайт для отправки комментариев
Пнд, 09/12/2019 - 18:36
Всем привет!
Создаю один проект с OLED дисплеем и библиотекой U8glib. Не могу понять как вывести на дисплей значение переменной.
float db = 3,52;
u8g.drawStr( 0, 22, db);
Выдает ошибку. Пробовал так:
u8g.drawStr( 0, 22, char(db));
Тоже не принимает. Как правильно вывести значение переменной типа float и int?
Уважаемый, а ошибка, которую выдают это огромный секрет?
А по хорошему - учите преобразование числа в строку:
itoa (int data, char* string, int radix); // преобразование int
ltoa (long data, char* string, int radix); // преобразование long
Ну по чему же, нет. Просто ошибка одна и та же: несоответствие типа данных.
Вот ошибка если написать так u8g.drawStr( 0, 22, String(db)):
Вот ошибка если написать так u8g.drawStr( 0, 22, char(db)):
Вот ошибка если просто попытаться вывести переменную: u8g.drawStr( 0, 22, db):
Везде результат одинаков - несоответствие типа принимаемой переменной.
Нашел простое решение без преобразования переменных:
Везде результат одинаков - несоответствие типа принимаемой переменной.
ну так вы весь вывод читайте. Оно же вам ясно говорит - формат вызова функции drawStr вот такой
- то есть третим аргументом функции должна быть C-style string - или иначе говоря, массив символов
А вы эту функцию методолм тыка пытаетесь одолеть - суете ей то char, то String, то float...
Подставьте правильный аршумент и все заработает
Советую мигрировать на u8g2
Сегодня полдня ловил ошибку с пропаданием ШИМа в скетче с u8g - причина оказалась простой, но в данной версии неизлечимой.
А вот это что, по Вашему, означает?
float
db = 2,56;
b707, в том то и дело, какой аргумент правильный??? Я не нашел простого решения кроме как перевода переменной из одного формата в другой (через промежуточную переменную). И все это занимает не меньше 4-х строк.
ЕвгенийП, к кому вопрос?
sadman41, пробовал я u8g2. Простой пример "Hello World!", на 10 строчек, съедает 75% оперативки (Атмега328)... Как-то сильно жирно...
ЕвгенийП, к кому вопрос?
А тому, кто это написал. Я думал. что к Вам, но если это писали не Вы, то извините.
Я написал, в качестве примера. Просто не понял ваш вопрос, по этому переспросил. А что не так с записью? Есть неправильно написал, то скажите что не так.
Откуда мне знать правильно на написана или нет? Вы же игнорируете мой вопрос и не хотите мне сказать что Вы хотели написать. Если бы сказали, то был бы смысл продолжать разговор.
Хочу на дисплей вывести значение переменной типа float. С десятичными, 2 знака после запятой. Это мне нужно на данный момент.
Так же интересно как выводить переменные типа int.
Один из вариантов решения я написал выше. Но все же интересно как правильно это делать.
sadman41, пробовал я u8g2. Простой пример "Hello World!", на 10 строчек, съедает 75% оперативки (Атмега328)... Как-то сильно жирно...
u8g
U8g2
Больше, конечно (шрифты, может, разные), но не 75% всяко.
Вы не поняли моего вопроса.
Вопрос простой: что означает эта строка?
Разве в ней есть что-нибудь про дисплей? Можете объяснить нормальными словами, что написано в этой строке?
ЕвгенийП, вы задаете вопрос, но не полностью.. вот весь мой код:
sadman41, Хм... может от типа дисплея это зависит? У меня пример тот же, только тип дисплея SSD1306 128x64 I2C
вы задаете вопрос, но не полностью..
Я задаю вопрос полностью. В коде сообщения #3 первая строка выглядит как:
float
db = 2,56;
я всего лишь прошу Вас объяснить что Вы имели в виду? Что написано в этой строке? Что здесь делается? Вы можете ответить? Нет - ну и не надо, это же не мне в конце концов нужно.
Оператор запятая. Я и забыл про такое)
float
db = 2,56;
я всего лишь прошу Вас объяснить что Вы имели в виду? Что написано в этой строке? Что здесь делается? Вы можете ответить? Нет - ну и не надо, это же не мне в конце концов нужно.
b707, в том то и дело, какой аргумент правильный??? .
ну вот же компилятор вам пишет - const char*
И я вам выше написал, что это называется c-style string. Вам не знакомо это понятие? - так найдите в гугле описание и почитайте. Если написано char* - не надо пытать передавать туда int float или еще чего - все равно не прокатит
sadman41, Хм... может от типа дисплея это зависит? У меня пример тот же, только тип дисплея SSD1306 128x64 I2C
Не HelloWorld, но всё же разница незначительна и не 75% занято - однозначно.
float
db = 2,56;
я всего лишь прошу Вас объяснить что Вы имели в виду? Что написано в этой строке?
Прежде, чем отвечать, попробуйте запустить вот это
float
db = 2,56;
я всего лишь прошу Вас объяснить что Вы имели в виду? Что написано в этой строке?
Отвечу за него. Ничего не написано в этой строке. Если правую часть выражения взять в скобки - rvalue становится 56. Иначе - ошибка во всех моих компиляторах. Потому что присваивание приоритетнее запятой.
Так ото ж!