Печать string and integer LCD
Как напечатать строку и целое число на ЖК-дисплее? Вот что я пробовал:
int number = 2;
int result = (number + number);
lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
И в результате возникает ошибка. Когда я пытаюсь:
lcd.print(number + "look");
или
lcd.print("1234 " + number);
Тогда на ЖК-дисплее отображается "34", так как были удалены первые два числа!
Я хочу напечатать:
1234 2
Пожалуйста, помогите! Спасибо!
4 ответа
Лучший ответ:
Метод lcd.print()
принимает в качестве аргумента строку или число, но не то и другое сразу. Использование оператора + для конкатенации не свойственно строкам C. Строки C в основном хранятся как указатели на первый символ строки. Итак, когда вы попробовали lcd.print("1234 " + number)
и получили "34 "
, скорее всего, вы передвинули указатель, указывая на первый символ из "1234"
(т.е. '1') на число
(т.е. 2), таким образом указатель указывает на 3-й символ в строке и, таким образом, заставить lcd.print()
отображать "34"
.
Чтобы напечатать что-то, что содержит как строки, так и целые числа, самый простой способ — преобразовать каждую часть в строку Arduino, а затем соединить их, используя оператор +, как вы делали ранее.
lcd.print(String("1234 ") + String(number));
lcd.print(String(number) + String(" plus ") + String(number) + String(" equals ") + String(result));
Вот несколько примеров. Вы также можете создать достаточно большой буфер char
и использовать sprintf()
из stdio.h
для создания строки, состоящей из целых чисел и строк. . Дополнительные сведения см. в учебнике по C/C++.
Что здесь не так:
lcd.print(number, DEC + " plus " + number, DEC + " equals " + result, DEC);
Это количество параметров и предположение, что плюс будет конкатенировать строковые литералы.
lcd.print("1234 " + number);
Это дает "34", когда число равно 2. Почему? Это связано с тем, что это результат добавления 2 к указателю строкового литерала, т. е. к строке, начинающейся с символа "3". Вместо этого используйте отдельные операторы печати:
lcd.print("1234 ");
lcd.print(number);
Не используйте String для объединения строк. Это пустая трата SRAM, обработка и риск фрагментации кучи. Просто плохая идея для небольших встроенных систем, таких как AVR.
Чтобы понять эти ошибки, вам следует вернуться и прочитать о строках и строковых литералах в C/C++ (по сравнению с Java :).
Ура!
У меня возникла та же проблема, и я напечатал строку и целое число в одной строке, переместив курсор следующим образом:
lcd.setCursor(0, 0); <----------Column 0 , Line 1
lcd.print("This code failed");
lcd.setCursor(0, 1); <----------Column 0 , Line 2
lcd.print("Error Code = ");
lcd.setCursor(13, 1); <-изменить курсор на INT. Столбец 13, строка 2
lcd.print(int);
int a=0;
float b=10.01;
char str[16];
sprintf(str,"a=%d, b=%.2f, c=%d", a, b, 2); // используем sprintf() для составления строки str
lcd.print(str);
Вывод будет "a=0, b=10,01, c=2"
- Ошибка: "'lcd' does not name a type" при использовании библиотеки LiquidCrystal.
- Запись значения на 7-сегментный дисплей max7219
- Как сделать динамическое меню с подменю ( Arduino mega или Arduino Uno)
- Два Arduino управляют ЖК-дисплеем
- ЖК-дисплей, отображающий странный текст
- Как прочитать расстояние до проходящего объекта?
- Я пытаюсь сделать что то вроде видеоигры с Arduino UNO
- Нужна помощь с программированием ЖК-дисплея для моего проекта
Что произойдет, если первый код ошибки будет, скажем, 1234, а затем еще один 57... на дисплее будет отображаться «5734», верно?, @Breaking not so bad