LiquidCrystal & Wire
- Войдите на сайт для отправки комментариев
Сб, 18/04/2020 - 15:21
Всем привет, я пришёл к тупику.
Упростил свою проблему до кода из примера.
Пример из LiquidCrystal-->Hello World.
Удалил для удобства комментарии и добавил "проблемный" код на строках 0 и 5 (объявление "#include <Wire.h>" и подключение к шине I2C в качестве ведомого устройства "Wire.begin(0x27);" )
#include <Wire.h>
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Wire.begin(0x27);
lcd.begin(16, 2);
lcd.print("hello, world!");
}
void loop() {
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
}
Ведущий видит устройство, но никакие надписи на дисплей не выводятся.
Сама ардрунка работает, проверял на мигающем светодиоде, не выводится именно текст.
Тестировал на версиях Arduino IDE 1.6.5 и 1.8.12
Идея в том, чтобы одна ардуинка могла показывать некие буквы на экране получая их от ведущей. Мною был выбран протокол I2C как самый малозатратный по проводам и пониманию.
Буду рад любым идеям =)
А без строки №6 выводит нормально?
И, кстати, добавьте задержку в луп хоть на полсекунды, чего над экраном издеваться-то?
А без строки №6 выводит нормально?
И, кстати, добавьте задержку в луп хоть на полсекунды, чего над экраном издеваться-то?
Да, без "Wire.begin(0x27)" выводит нормально.
Этот код это модифицированный пример(для воспроизведения ошибки), из стандартной библиотеки примеров arduino.
loop в принципе избыточен для воспроизведения данной ошибки, но я его оставил чтобы код всё ещё был похож на пример =)
А Wire умеет работать и мастером и слейвом одновременно?
А Wire умеет работать и мастером и слейвом одновременно?
Да, чтобы запустить его в режиме мастера нужно вызвать "Wire.begin();"(без аргументов), чтобы вызвать его в качестве ведомого нужно вызвать "Wire.begin(0х##);"(указав адрес в аргументах)
Если только Вы не имели в виду "одновременно" как на одной плате.
Этот код это модифицированный пример(для воспроизведения ошибки)
Тем не менее, добавьте таки задержку в луп хоть на полсекунды. Не трудно же?
Тем не менее, добавьте таки задержку в луп хоть на полсекунды. Не трудно же?
Я добавлял 1 секунду, это не меняет ситуации.
Даже такой код может воспроизвести мою ситуацию:
#include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { Wire.begin(0x27); lcd.begin(16, 2); lcd.print("hello, world!"); } void loop(){}Комментирую 5-ю строку "Wire.begin(0x27);" и экранчик уже приветствует меня. Иначе вижу только контрастную полосу.
Давайте лучше с этим коротким кодом работать, а луп пусть будет пустой.
А вот теперь скажите, он у Вас выходит из пятой строки? Или в ней зацикливается? ну-ка поставьте печать чего-нибудь в сериал после неё, посмотрим.
А вот теперь скажите, он у Вас выходит из пятой строки? Или в ней зацикливается? ну-ка поставьте печать чего-нибудь в сериал после неё, посмотрим.
Сделал чуть по своему, но суть думаю не меняется, лампочка загорается.
void setup() { pinMode(13,OUTPUT); Wire.begin(0x27); lcd.begin(16, 2); lcd.print("hello, world!"); digitalWrite(13,HIGH); }UPD: И даже мигает если в луп блинк добавить
void loop(){ digitalWrite(13,HIGH); delay(1000); digitalWrite(13,LOW); delay(1000); }Бросил на 10-ть минут с блинком, появилось что-то непонятное
Прошу прощения за отсутствие спойлера, не могу я его найти тут.