Всем привет, я пришёл к тупику. Упростил свою проблему до кода из примера. Пример из LiquidCrystal-->Hello World. Удалил для удобства комментарии и добавил "проблемный" код на строках 0 и 5 (объявление "#include <Wire.h>" и подключение к шине I2C в качестве ведомого устройства "Wire.begin(0x27);" ) Код (C++): #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 как самый малозатратный по проводам и пониманию. Буду рад любым идеям =)
Ну так-то у Вас на четверной строке дисплей инициализируется не на I²C. Для работы по I²C отдельная библиотека есть.
Я же не писал что у меня дисплей I²C. Дисплей обычный, поэтому и инициализируется как обычный =) Без "Wire.begin(0x27);" он отлично работает.
Бросил на 10-ть минут с кодом: Код (C++): void setup() { pinMode(13,OUTPUT); Wire.begin(0x27); lcd.begin(16, 2); lcd.print("hello, world!"); digitalWrite(13,HIGH); } void loop(){ digitalWrite(13,HIGH); delay(1000); digitalWrite(13,LOW); delay(1000); }
А где у вас в коде реализована функция чтения данных с интерфейса i2c Код (C++): #include <Wire.h> void setup() { Wire.begin(8); // подключиться к i2c шине с адресом #8 Wire.onReceive(receiveEvent); // зарегистрировать обработчик события Serial.begin(9600); // настроить последовательный порт для вывода } void loop() { delay(100); } // функция, которая будет выполняться всякий раз, когда от мастера принимаются данные // данная функция регистрируется как обработчик события, смотрите setup() void receiveEvent(int howMany) { while (Wire.available()) { char c = Wire.read(); // принять байт как символ Serial.print(c); // напечатать символ } } Пример из описания библиотеки, думаю тут есть всё что нужно для решения.