Вывод на LCD текста и данных в одной строке
- Войдите на сайт для отправки комментариев
Вс, 16/02/2014 - 15:24
Добрый день! Возникла неприятная мелочь - в функции lcd.print() не получается объединить строковый и числовой типы, т.е. вот так не получается:
lcd.print("температура" + h_temp);
Из-за этого приходится городить целую гору лишних вызовов этой функции и фунции, перемещающей курсор. Есть какой-нибудь выход?
Добрый день! Возникла неприятная мелочь - в функции lcd.print() не получается объединить строковый и числовой типы, т.е. вот так не получается:
Из-за этого приходится городить целую гору лишних вызовов этой функции и фунции, перемещающей курсор. Есть какой-нибудь выход?
Сначала делаешь вывод в строку командой sprintf(), затем получившуюся строку выводишь командой
lcd.print.
эмм, всмысле данные и текст в одну строку запихать, а потом ее выводить на ЖКИ? Или как? Что-то не пойму что здесь делает spritf();
Но лучше так:
эмм, всмысле данные и текст в одну строку запихать, а потом ее выводить на ЖКИ? Или как? Что-то не пойму что здесь делает spritf();
А у меня так вообще не получается. Ошибки при компиляции...
Test_String_function.ino: In function 'void loop()':
Test_String_function:14: error: call of overloaded 'String(float)' is ambiguous
arduino\hardware\arduino\cores\arduino/WString.h:70: note: candidates are: String::String(long unsigned int, unsigned char)
arduino\hardware\arduino\cores\arduino/WString.h:69: note: String::String(long int, unsigned char)
arduino\hardware\arduino\cores\arduino/WString.h:68: note: String::String(unsigned int, unsigned char)
юзайте пример с sprintf который msg31 бросил, там не так все сложно и намного больше возможностей чем с использованием String
Всё равно ничего не выходит :-(
Ошибки.
Test_String_function.ino: In function 'void loop()':
Test_String_function:11: error: invalid conversion from 'int' to 'const char*'
Test_String_function:11: error: initializing argument 2 of 'int sprintf(char*, const char*, ...)'
Всё равно ничего не выходит :-(
http://www.chitay.org/c/13/sprintf.htm и особенно http://www.chitay.org/c/13/printf.htm
Супер! Теперь вышло.
Супер! Теперь вышло.
Покажите пожалуйста, в каком виде все это получилось, чет читаю и ничего не пойму!!
Супер! Теперь вышло.
Покажите пожалуйста, в каком виде все это получилось, чет читаю и ничего не пойму!!
Ты посмотри как функцию printf использовать. Просто погугли. Найдешь кучу примеров и ссылок на книжки всякие. Начни с азов "Hello World", это самое первое, что на Си изучают.
Супер! Теперь вышло.
Покажите пожалуйста, в каком виде все это получилось, чет читаю и ничего не пойму!!
Вот мой тестовый вариант.
Воспользовался советом из данной темы, вот что получается:
Почему-то дата и время перестают обновляться.
В то же время с таким кодом данные даты и времени обновляются из модуля часов реального времени:
Из-за чего может быть проблема?
Из-за чего может быть проблема?
Попробуй сначала считать данные из датчика, а затем выводить. А вообще объяви массивы раза в два больше на всякий случай. Ну или хотя бы предусмотри место для завершающего символа 0, то есть массивы объяви хотя бы.
char
sdate[11];
02
char
stime[9];
Супер! Теперь вышло.
Покажите пожалуйста, в каком виде все это получилось, чет читаю и ничего не пойму!!
Вот мой тестовый вариант.
Теперь все гораздо прозрачнее! Ну по крайней мере для меняя! Я не знал того что под каждый тип переменной надо в функции sprintf задавать так называемые "границы" Вообще крайне удобная вещь когда на LCD в строчке приходится выводить несколько переменных типа int+char/ А если переменная будет меньше размера поля, ну допустим
будет выведено число
Теперь все гораздо прозрачнее! Ну по крайней мере для меняя! Я не знал того что под каждый тип переменной надо в функции sprintf задавать так называемые "границы"
не надо. это опционально
Воспользовался советом из данной темы, вот что получается:
Почему-то дата и время перестают обновляться.
В то же время с таким кодом данные даты и времени обновляются из модуля часов реального времени:
Из-за чего может быть проблема?
Максим, благодарю! Теперь работает, только почему Ваш код заработал, а мой нет я не понял.. разница ведь только в true/false в начале, но в чем разница между этими значениями нигде информации не нашел...
Вижу, ты так и не увеличил размер массива. У тебя запихивается в массив sdate 10 символов, а надо еще место под завершающий символ с кодом 0. Также и в stime. Увеличь размер, а то запись пойдет неизвестно куда.
Да кстати, не обратил внимание на эту красоту:
char
sdate[11];
02
char
stime[9];
Дело вам говорят, нужны еще по одному символу в массивах
Иначе не равен час впишется этот ноль куда нибудь туда, куда не надо или наоборот затрется и будет вам экран показывать содержимое ОЗУ.
msg31, maksim
да, да. Спасибо.
туда тоже добавил по дополнительному элементу. Пока вроде больше загвоздок не появилось.
PS: Пытаюсь сделать 4х канальный таймер для аквариума, а то китайские одноканальные периодически скидывают время и места много занимают...
Надо будет и себе попробовать
Супер! Теперь вышло.
Покажите пожалуйста, в каком виде все это получилось, чет читаю и ничего не пойму!!
Вот мой тестовый вариант.
У меня Ваш пример не выводит переменую типа float.
и не выведет. %f в указателях формата работать не будет, особенности платформы. примите это как данность. если хочется вывести вещественное число, то выводите отдельно целую часть, затем запятую как символ, и затем дробную часть
ап
я вообще не понял сути заморочек - делал бы так и не парился бы:
Мне нужно засунуть в стринг число с точкой например 12.33 или 4.26.
Через %f это не получается.
и не выведет. %f в указателях формата работать не будет, особенности платформы. примите это как данность. если хочется вывести вещественное число, то выводите отдельно целую часть, затем запятую как символ, и затем дробную часть
хм...
Я вижу доминацию гена лени над желанием и интелектом. За 15 минут решил ...
Если будут помогать такие люди как Вы, то глупые вопросы рано или позно кончаться... ну, я хочу в это верить.
а в чем разница между sprintf_P и sprintf?
Строка формата берётся из Флеша, а не из озу
Пиши lcd.init();
Вместо lcd.begin();
А по поводу темы топика - я такие вещи вот так выводу
lcd.print(F("значение: ") + (String)intVal + " %");
Это уже чудеса какие-то. Кто говорит? Что за ошибка?
А если перенести всё из loop в setup?
неа смайла всё равно нет (я перенёс функции в setup)
а другие символы (стандартные) - выводит?
yes
da
Попробуй создать и вывести не нулевой знак, а первый, чота помнится, у меня тоже с нулевым символом проблемы были (но это неточно)
пробовал неполучилось ( если что версия ардю 1.0.6)
Ты б еще на 0.0.1b запустить пытался
а чего не так?