1602 ЖК-дисплей 16×2 не загорается для моего проекта системы автоматического полива
Я работаю над проектом по созданию системы автоматического полива с использованием платы Arduino Uno R3, ЖК-дисплея 16x2, водяного насоса и датчика влажности почвы. Однако я столкнулся с препятствием и мне действительно нужна помощь.
Проблема, с которой я столкнулся, заключается в том, что мой ЖК-дисплей вообще не загорается. Я дважды проверил все соединения, убедился, что код правильный.
Вот краткое описание моей настройки:
- Плата Arduino Uno R3
- ЖК-дисплей 16x2
- Водяной насос
- Датчик влажности почвы
Я подключился:
- контакты VCC и GND ЖК-дисплея к + и - на макетной плате
- контакт SCA ЖК-дисплея к аналоговому контакту A4 Arduino
- контакт SCL ЖК-дисплея к аналоговому контакту A5 Arduino
Я внимательно следовал инструкциям и руководствам, но, похоже, не могу понять, в чем причина проблемы.
Если кто-то сталкивался с подобной проблемой или у него есть предложения по ее устранению, я буду очень признателен за вашу помощь.
Вот код, который я использовал:
#Include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
delay(1000);
lcd.setCursor(0, 0);
lcd.print("IRRIGATION");
lcd.setCursor(0, 1);
lcd.print("SYSTEM IS ON ");
lcd.print("");
delay(3000);
lcd.clear();
}
void loop() {
int value = analogRead(A0);
Serial.println(value);
if (value > 950) {
digitalWrite(2, LOW);
lcd.setCursor(0, 0);
lcd.print("Water Pump is ON ");
} else {
digitalWrite(2, HIGH);
lcd.setCursor(0, 0);
lcd.print("Water Pump is OFF");
}
if (value < 300) {
lcd.setCursor(0, 1);
lcd.print("Moisture : HIGH");
} else if (value > 300 && value < 950) {
lcd.setCursor(0, 1);
lcd.print("Moisture : MID ");
} else if (value > 950) {
lcd.setCursor(0, 1);
lcd.print("Moisture : LOW ");
}
}
@Not_Lucky000, 👍-1
Обсуждение1 ответ
Адрес ЖК-дисплея может не быть 0x27
.
Проверьте адрес вашего ЖК-дисплея, проверив производителя PCF8574 (на задней стороне ЖК-панели). Из Интерфейс I2C LCD с Arduino:
- Если на вашем ЖК-дисплее установлен чип PCF8574 от Texas Instruments, его адрес I2C —
0x27
; - Если в нем установлен чип PCF8574 от NXP Semiconductors, его адрес I2C —
0x3F
.
Или из комментария 6v6gt:
На самом деле, суффикс «A» (или его отсутствие) в идентификаторе чипа отличает диапазон адресов I2C, поддерживаемый чипом. NXP PCF8574 и PCF8574A см. 7.1: Удаленный 8-битный расширитель ввода-вывода для шины I<sup>2</sup>C с прерыванием TI PCF8574 см. 8.4: Удаленный 8-битный расширитель ввода-вывода PCF8574 для шины I2C TI PCF8574A см. гл. 7 : PCF8574A Удаленный 8-битный расширитель ввода-вывода для шины I<sup>2</sup>C. В этом диапазоне пользователь, конечно, может также изменить 3 перемычки для точной настройки адреса.
Процитируем соответствующие разделы:
Из Удаленный 8-битный расширитель ввода-вывода для шины I<sup>2</sup>C с прерыванием
7.1 Адрес устройства
После условия START мастер шины должен отправить адрес подчиненного устройства, к которому он подключен. доступ и операция, которую он хочет выполнить (чтение или запись). Формат адреса PCF8574/74A показан на рисунке 6. Контакты адреса ведомого устройства A2, A1 и A0 удерживаются на ВЫСОКОМ уровне или LOW для выбора одного из восьми адресов подчиненных. Для экономии энергии, нет внутреннего подтягивающего резистора Резисторы встроены в выводы A2, A1 или A0, поэтому их необходимо удерживать внешним способом в состоянии ВЫСОКОГО или НИЗКОГО УРОВНЯ. Адресные контакты (A2, A1, A0) могут подключаться к VDD или VSS напрямую или через резисторы.
Последний бит первого байта определяет операцию, которая должна быть выполнена. При установке в логическую 1 выбирается чтение, а логический 0 выбирает операцию записи (операция записи показана на Рисунок 6).
В разделе 8.4, Функциональные режимы устройства, из PCF8574 Удаленный 8-битный расширитель ввода-вывода для шины I2C, показаны адресные и временные диаграммы для режимов записи и чтения.
В разделе 7 PCF8574A Remote 8-Bit I/O Expander для шины I<sup>2</sup>C приведена информация об измерении параметров со схемами и временными диаграммами.
В качестве альтернативы, согласно комментарию Юрая, запустите I2CScanner
:
// --------------------------------------
// i2c_сканер
//
// Версия 1
// Эта программа (или код, похожий на нее)
// можно найти во многих местах.
// Например, на форуме Arduino.cc.
// Первоначальный автор неизвестен.
// Версия 2, июнь 2012 г., с использованием Arduino 1.0.1
// Адаптировано для максимальной простоты пользователем Arduino.cc Krodal
// Версия 3, 26 февраля 2013 г.
// V3 от louarnold
// Версия 4, 3 марта 2013 г., с использованием Arduino 1.0.3
// от пользователя Arduino.cc Krodal.
// Изменения пользователя louarnold удалены.
// Адреса сканирования изменены с 0...127 на 1...119,
// по данным сканера i2c Ника Гэммона
// https://www.gammon.com.au/forum/?id=10896
// Версия 5, 28 марта 2013 г.
// Как и версия 4, но адрес теперь сканируется до 127.
// Датчик, похоже, использует адрес 120.
// Версия 6, 27 ноября 2015 г.
// Добавлено ожидание последовательной связи Leonardo.
//
//
// Этот скетч тестирует стандартные 7-битные адреса
// Устройства с более высоким битовым адресом могут отображаться некорректно.
//
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Леонардо: ждем серийный монитор
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// i2c_scanner использует возвращаемое значение
// Write.endTransmission, чтобы проверить,
// устройство подтвердило адрес.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // ждем 5 секунд для следующего сканирования
}
из i2c_scanner
На самом деле именно суффикс «A» (или его отсутствие) в идентификаторе чипа отличает диапазон адресов I2C, поддерживаемый чипом. NXP PCF8574 и PCF8574A см. 7.1: https://www.mouser.ch/datasheet/2/302/PCF8574_PCF8574A-3139141.pdf TI PCF8574 см. 8.4: https://www.ti.com/lit/ds/symlink/pcf8574.pdf TI PCF8574A см. гл. 7: https://www.ti.com/lit/ds/symlink/pcf8574a.pdf. В этом диапазоне пользователь, конечно, может также изменить 3 перемычки для пайки, чтобы точно настроить адрес., @6v6gt
Хорошо, большое спасибо. Ответ обновлен., @Greenonline
- Печать string and integer LCD
- Отправка значения с одного Arduino на другой
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Запрограммируйте Arduino Uno как цифровые часы
- ЖК-дисплей странные символы
- 16*2 1602A LCD дисплей не отображает никаких символов или контрастности, несмотря на правильное подключение
- Считыватель таймкода SMPTE с ЖК-дисплеем, вопрос кодирования
Описание электрических соединений не особенно полезно. Схематическая диаграмма (или, на худой конец, диаграмма Fritzing) была бы улучшением. Также какой ЖК-дисплей? Какая распиновка? Существует много разных версий. Водяной насос и датчик почвы, похоже, не имеют отношения к вашей проблеме и только запутывают ее . Вам следует удалить все, что не имеет прямого отношения к проблеме с дисплеем. Обращайтесь к одному модулю за раз., @Greenonline
запустите скетч I2CScanner, чтобы увидеть, обнаруживает ли он ЖК-дисплей и по какому адресу, @Juraj
контакты VCC и GND ЖК-дисплея к + и - макетной платы
... подключена ли шина макетной платы к+
и-
? ... некоторые шины макетной платы имеют разрыв посередине, обычно обозначаемый разрывом красной линии, @jsotola