Подключение ЖК-дисплея, когда контакты 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);

}

, 👍2

Обсуждение

Линии связи 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


2 ответа


1

Как упоминалось в комментариях: ваш ЖК - дисплей и RTC используют шину I2C для связи. Эта шина предназначена для одновременного подключения многих устройств. Для этого для работы каждого ведомого устройства на шине (Arduino является ведущим устройством, у которого нет адреса) должен быть уникальный адрес. В своем коде вы пишете, что ЖК-дисплей находится по адресу 0x3F. Значение RTC DS1307 равно 0b1101000 или 0x68 (то же значение в двоичном или шестнадцатеричном представлении) (см. таблицу данных DS1307, стр. 12).

Таким образом, вы можете подключить оба устройства к одним и тем же контактам, поскольку интерфейс связи там уже поддерживает это. Контакты A4 и A5 являются выводами I2C Arduino, поэтому вам необходимо подключить их туда для использования оборудования Arduino I2C.

,

1

Вот мои 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 и модуля ЖК-дисплея.

,