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 как цифровые часы
- Чтение SMS с помощью Arduino Uno и SIM800L и печать на LCD (16x2 буквенно-цифровых) с использованием последовательного соединения
- ЖК-дисплей странные символы
- 16*2 1602A LCD дисплей не отображает никаких символов или контрастности, несмотря на правильное подключение
Описание электрических соединений не особенно полезно. Схематическая диаграмма (или, на худой конец, диаграмма Fritzing) была бы улучшением. Также какой ЖК-дисплей? Какая распиновка? Существует много разных версий. Водяной насос и датчик почвы, похоже, не имеют отношения к вашей проблеме и только запутывают ее . Вам следует удалить все, что не имеет прямого отношения к проблеме с дисплеем. Обращайтесь к одному модулю за раз., @Greenonline
запустите скетч I2CScanner, чтобы увидеть, обнаруживает ли он ЖК-дисплей и по какому адресу, @Juraj
контакты VCC и GND ЖК-дисплея к + и - макетной платы
... подключена ли шина макетной платы к+
и-
? ... некоторые шины макетной платы имеют разрыв посередине, обычно обозначаемый разрывом красной линии, @jsotola