Вывод сообщения на LCD дисплей
- Войдите на сайт для отправки комментариев
Пнд, 10/06/2013 - 15:09
Всем доброго,
пытаюсь принять и вывести сообщение на LCD дисплей (16х2), чтобы научиться отправлять их из терминала линукс и в последствии уметь отправлять команды из терминала и быть уверенным, что они будут получены так как надо.
На данный момент либо loop выглядит так:
void loop() { while (Serial.available() == 0); char string[15] = {0}; for (int i=0; i<16; i++) { string[i] = Serial.read(); } lcd.begin(0, 2); lcd.print(string); }
Так выводит сообщение, но съедает 1-й символ, однако, если отправить один символ, то он успешно появляется. Когда я начал с вывода сообщения в 2 строки, там вообще творилось что то непонятное и страшное, поэтому решил совладать пока что хотя бы с одной.
Помогите разобраться пожалуйста.
может shar string[17] все таки? 16 для содержимого и один для заключительного нуля?
да хоть string[5], хоть string[25] - всеравно съедает первый символ(((
Ну во-первых не все равно. Если вы выйдите за пределы массива, то не факт что попадется 0 да еще и потрете какие нибудь другие переменные. Так что string должна иметь длину не меньше 17.
Во-вторых, вот это что за строка lcd.begin(0, 2);, что она у вас делает? Инициализирует дисплей, у которого в строке 0 символов и 2 строки? Посмотрите стандартные примеры библиотеки LiquidCrystal. А именно SerialDisplay:
Если же вам нужна эта строка что бы ее еще как то обработать, то тогда так:
Большое спасибо, все очень доходчиво и я много узнал важного, так же теперь стало понятно почему у меня ничего не получалось. Еще один вопрос, теперь печатается строка, но если она например 6 символов, то оставшиеся 10 печатаются как закрашенные прямоугольники, пробел при этом печатается как положено. Подскажите почему?
Ну кто ж его знает почему, код покажите.
Код, собственно полностью Ваш, только с инициализацией дисплея:
Спасибо
Ну так естественно, если вы выбрали этот вариант то будьте добры отправлять все 16 символов, либо нужно как то это описать
Чем вас не устроил первый вариант?
Вы не поняли мой вопрос, но я уже сам разобрался, спасибо, а второй вариант я выбрал, так как хочу принимать 32 символа и делать перенос строки, но это уже другая история, спасибо)
Я то понял ваш вопрос и показал как это исправить. Если именно интересует - почему? То потому что если вы отправляете меньше 16 символов ,то в переменную string читается пустой буфер, то есть 255 что на дисплее отображается как "закрашенный прямоугольник".
Почти закончил! Только вот странно
вот если выводить и первую и вторую строку - выводит только начиная с 17-го символа, но если вместо lcd.print(outString); написать lcd.print("Hello world"); (и в первом и во втором выводе, то выводит все как надо.
Еще я не понял как Вы сделали замену "" на " " в последнем примере.
Спасибо
Перечитайте сообщение #1 ,затем сообщение #3 и так до тех пор пока не найдете ответ на свой вопрос. Так же почитайте описание
Serial
.flush()
.Еще я не понял как Вы сделали замену "" на " " в последнем примере.
Здравствуйте Уважаемые! Я тоже интересуюсь подобной темой. А именно у меня по сериал приходят показания датчика, кодом ниже ардуина их выводит на дисплей от нокии. Но проблема следующая - приходит 2 строки. Мне нужно отображение двух. Они отображаются так: сначало одна, потом сразу вместо первой другая, на пару секунд залипнет и дисплей снова чистый. Мне нужно чтоб обе выводились одна ниже другой и оставались пока новые показания не придут. Два дня уже немогу найти как другую строку ниже разместить и оставить их на дисплее. Буду очеь рад подсказке. Заранее благодарен
Если Вам нужно, чтобы строки выводились одна под другой, зачем Вы каждый раз устанавливаете курсор в начало верхней строки?
Ну и чтение 16 символов без проверки, что прочиталось все, что пришло, тоже вызывает некоторые сомнения.