Официальный сайт компании Arduino по адресу arduino.cc
Вывод вводимой строки на экран 1602 I2C
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 14/11/2016 - 23:43
Пишу простенькую программу для тренировки знаний в Arduino. На экран при помощи библеотеки ArduinoThread в разных потоках выводятся часы и значение, введеным в консоль. Если с часами все ок, то вот с выводом получаемой строки проблема - выводится R написанная пунктиром и все. В консоль же все выводит как надо. Вот код, подскажите что не так
#include <StaticThreadController.h> #include <Thread.h> #include <ThreadController.h> #include <LiquidCrystal_I2C.h> #include <iarduino_RTC.h>//Часы, DS1302 #include <Wire.h> iarduino_RTC watch(RTC_DS1302,10,13,12); LiquidCrystal_I2C screen(0x3F,16,2); Thread watchThread = Thread(); Thread textThread = Thread(); void setup() { watch.begin(); screen.init(); screen.backlight(); watchThread.onRun(startWatch); watchThread.setInterval(1000); textThread.onRun(startText); textThread.setInterval(10); Serial.begin(9600); } void loop() { if(watchThread.shouldRun()) watchThread.run(); if(Serial.available() > 0) textThread.run(); } void startWatch() { screen.setCursor(0,0); screen.print(watch.gettime("H:i d-m-y")); } void startText() { char cin; char cout[16]; cin = Serial.read(); screen.setCursor(0,1); sprintf(cout,"%c",cin); String str(cout); screen.print(str); Serial.print(str); }
Извиняюсь, проблема оказалась в другом: char разбивает слова. С р разобрался, мой косяк сборки. Как выводить слова целиком на экран?
Вашем скетче переменная cin была типа char, ее значение вы брали из порта, то есть только один символ. а нужно весь буфер запилить. печатать можно и через String но ведь это зло...
печатать можно и через String но ведь это зло...
Зло, но печатаю жеж и экран не блымает, а то некоторым не нравится, когда блымает
А вот позвольте полюбопытствовать, зачем задержка в 100 миллисекунд?
(есть предположение, что я на косяк нарывался именно из-за этого)
Зло, но печатаю жеж и экран не блымает, а то некоторым не нравится, когда блымает
Ну я тоже сторонник того что ресурсы нужно использовать полностью, но когда Стринг уже не влазиет можно же и посимвольно блымать. а чтобы блымать быстро подключайте без i2c, на прямую
а всё жеж, насчёт задержки... а IIC это святое )))
и второе, я задолбался с версиями IDE, под 1.6.12 ваш код не компилируется, не нравится ему функция print_char_array!
Сволочь, кричит, что не объявлена )))
Ну да, забыл совсем выше ее нужно ставить. Видимо circuis еще не обновили калькулятор. Кстати на счет circuis там сейчас кучу латчиков добавили, тебе и дальномер и газ. Нравится мне этот проект. Да и единственный для меня способ с работы сидеть там...
Пробовал String, она выводит коды букв из таблицы ASCI. До ардуины только добрался, сейчас попробую местные варианты
да работает:
Попробовал ваш метод... код:
Сейчас собаку вышулю и разберемся, пока про не закидали какашками
А вот позвольте полюбопытствовать, зачем задержка в 100 миллисекунд?
(есть предположение, что я на косяк нарывался именно из-за этого)
тут такое дело, данные у нас с сириал не мгновенно попадают в ардуину, а передаются какое то время если не ставить задержку то при попадании первого байта у нас available уже становится больше нуля, программа лезит в иф, но там только 1 байт, она его как положено печатает, а во втором цыкле уже печатает все остальные так как они успевают добежать пока мы все там выводим на экран. так что когда aveilable я решил подождать остальные байты, чтобы они точно пришли. Может есть способ сделать по другому, я сделал так, и все работает.
Попробовал ваш метод...
Вот ссылка на Circuits где все работает. Также выше скрин с работой. Почему не работает у Вас я не знаю. по поводу другого куска скетча. Когда вижу
с моими глазами происходит то же что и на моей аватарке. Хотя в принципе работает да и ладно, но мы же развиваемся, поэтому пишем
В принципе должно печатать тоже самое.
Если уж так нравится String то давайте сделаем так:
Ну и в качестве задания для Вас объединить 2 скеча
Учитель, можно ДЗ завтра сделать, а то меня уже мутит от C++
Учитель, можно ДЗ завтра сделать, а то меня уже мутит от C++
Да я такой же ученик, только на год старше))))
Я только 1 неделю с ардуинкой работаю. Кстати, тут я поразмыслил(туплю) над вашими словами про то, что сериал не сразу передает данные... видимо, задержку надо попробовать.
Урааа, вы были правы, все заработало. Вот только эти квадраты в конце вывода консоли меня напрягают. PS - это из-за указания размера массива cout. убрал цифры(как в вашем скетче) и все чистенко.
Кстати, вот у меня вопрос... я, понимаете-ли, немного дуб в плюсах, и не могу понять, почему print остаток места в массива забивает своими кракозябрами, а write нет
Вот здесь мне трудно подсказать так как я сам не до конца догнал. print печатает символы, а write бинарный код. И печатает он то что есть в массиве, если он печатает крыказябы значит они есть в массиве. Обычно это свидетельствует о выходе за пределы массива. Попробуйте мой скетч со String, новичку он должен быть более понятнн. Вообще String для новичков и создан, просто не далек тот день когда Ваш проект упрется String'ом в ограничение памяти и тогда нужно будет изобретать безстринговые конструкции как в моем первом примере...
Собственно из-за памяти я String и не стал использовать в скетчах. На ПеКе то памяти 15 товарных составов, а тут пол-вагонетки