Подключение ЖК-дисплея, когда контакты A4 и A5 заняты
Недавно я работал над автоматическим дозатором для кормления собак (который распределяется путем поворота винта, прикрепленного к шаговому двигателю). В настоящее время у меня есть Nema 17, подключенный к шаговому драйверу L298N, который подключен к выводам Arduino 9-12, и DS1307 RTC, подключенный к аналоговым выводам A4 и A5 (у меня была бы картинка, но проводка повсюду). Я хотел бы подключить ЖК-экран 16x2 (с потенциометром уже на задней панели и 4 соединительными контактами), но, судя по всему, что я видел в Интернете, он также использует аналоговые контакты A4 и A5, которые заняты RTC. Как бы я подключил ЖК-дисплей?
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h>
#include <SoftwareSerial.h>
#include <Stepper.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x3F , 16 , 2);
Stepper myStepper(200 , 9 , 10 , 11 , 12);
void setup() {
lcd.init();
lcd.print("yes");
Wire.begin();
Serial.begin(9600);
rtc.adjust(DateTime(2021 , 7 , 15 , 3 , 23 , 0));
myStepper.setSpeed(100);
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(":");
Serial.print(now.second());
Serial.println(" ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
lcd.println(" ");
if ((now.hour() == 7 and now.minute() == 0 and now.second() == 0)) {
myStepper.step(1000);
}
delay(1000);
}
@Carter, 👍2
Обсуждение2 ответа
Как упоминалось в комментариях: ваш ЖК - дисплей и RTC используют шину I2C для связи. Эта шина предназначена для одновременного подключения многих устройств. Для этого для работы каждого ведомого устройства на шине (Arduino является ведущим устройством, у которого нет адреса) должен быть уникальный адрес. В своем коде вы пишете, что ЖК-дисплей находится по адресу 0x3F
. Значение RTC DS1307 равно 0b1101000
или 0x68
(то же значение в двоичном или шестнадцатеричном представлении) (см. таблицу данных DS1307, стр. 12).
Таким образом, вы можете подключить оба устройства к одним и тем же контактам, поскольку интерфейс связи там уже поддерживает это. Контакты A4 и A5 являются выводами I2C Arduino, поэтому вам необходимо подключить их туда для использования оборудования Arduino I2C.
Вот мои 2 цента. Как следует из другого ответа, вы всегда можете использовать одни и те же линии I2C для устройств. Устройства будут дифференцированы по адресу I2C. Я скомпилировал один пример на основе вашего кода. Вот ссылка на симуляцию
Код приведен ниже
#include <Wire.h>
#include "LiquidCrystal_I2C.h"
#include <RTClib.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Wire.begin();
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
lcd.init();
lcd.backlight();
lcd.print("yes");
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(":");
Serial.print(now.second());
Serial.println(" ");
lcd.setCursor( 0,0);
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
if ((now.hour() == 7 and now.minute() == 0 and now.second() == 0)) {
// myStepper.step(1000);
}
delay(1000);
}
Как вы можете видеть, линии I2C являются общими для модуля RTC и модуля ЖК-дисплея.
- Печать string and integer LCD
- Отправка значения с одного Arduino на другой
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Запрограммируйте Arduino Uno как цифровые часы
- ЖК-дисплей странные символы
- 16*2 1602A LCD дисплей не отображает никаких символов или контрастности, несмотря на правильное подключение
- Считыватель таймкода SMPTE с ЖК-дисплеем, вопрос кодирования
Линии связи I2C поддерживают несколько устройств на одних и тех же выводах, поэтому просто подключите ЖК-дисплей к одним и тем же выводам... или вы можете просто заглянуть под свой Arduino, чтобы найти еще 2 вывода I2C(слева от вывода Aref)., @Coder9390
https://www.arduino.cc/en/Reference/Wire, @Juraj
Я подключил ЖК-дисплей и RTC к A4 и A5 через макет, и он отлично работает. Спасибо!, @Carter
Вот один пример, где ЖК-дисплей и RTC подключены к одним и тем же выводам I2C. https://wokwi.com/arduino/projects/306828496357818944, @ArduinoFan