Печать 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

Пожалуйста, помогите! Спасибо!

, 👍3


4 ответа


Лучший ответ:

6

Метод 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++.

,

0

Что здесь не так:

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 :).

Ура!

,

2

У меня возникла та же проблема, и я напечатал строку и целое число в одной строке, переместив курсор следующим образом:

   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); 
,

Что произойдет, если первый код ошибки будет, скажем, 1234, а затем еще один 57... на дисплее будет отображаться «5734», верно?, @Breaking not so bad


0
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"

,