Подсветка LCD не работает даже при 5V. Использование резистора 330 Ом
Я пытался создать этот проект: https://create.arduino. .cc/projecthub/chummer1010/electronic-safe-with-arduino-25d039
Я уверен, что все собрал правильно, но на моем ЖК-дисплее символы не отображаются. Другие проекты, похоже, исправили это, изменив потенциометр, но я его не использую.
Код Arduino:
/*
Made by Marco Fusco
May 20, 2016
Contact me at: [email protected]
*/
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <Servo.h>
int address = 0;
static unsigned long SaveTimer;
static unsigned long SaveDelay = (30 * 1000);
char CODE[10] = "1234E";
char Str[10];
char CodeLength = 4;
int Pos = 0;
bool Unlocked;
static unsigned long DisplayTimer;
static unsigned long DisplayDelay = 200;
LiquidCrystal lcd(12, 11, 9, 8, 7, 6);
int buttonPin1 = 2;
int buttonPin2 = 3;
int buttonPin3 = 4;
int buttonPin4 = 5;
int enterbutton = 10;
int clearlockbutton = 13;
Servo myServo;
void setup() {
myServo.attach(A1);
int EEPROMCodeOK = true;
for (Pos = 0; Pos <= (CodeLength); Pos++) {
Str[Pos] = EEPROM.read(Pos);
if (!(strrchr("1123456789", Str[Pos]))) {
// неверный код
EEPROMCodeOK = false;
}
}
Pos++;
Str[Pos] = EEPROM.read(Pos);
if (Str[CodeLength + 1] != 'E') EEPROMCodeOK = false;
if (EEPROMCodeOK) {
Str[CodeLength + 2] = '\0';
strncpy(CODE, Str, CodeLength + 1);
}
ClearCode();
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(buttonPin4, INPUT_PULLUP);
pinMode(enterbutton, INPUT_PULLUP);
pinMode(clearlockbutton, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Hello.");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Password:");
DisplayTimer = millis() + 200;
}
void loop() {
Lock();
Pos = constrain(Pos, 0, CodeLength);
int buttonState1 = digitalRead(buttonPin1);
int buttonState2 = digitalRead(buttonPin2);
int buttonState3 = digitalRead(buttonPin3);
int buttonState4 = digitalRead(buttonPin4);
int clButtonState = digitalRead(clearlockbutton);
int enterButtonState = digitalRead(enterbutton);
lcd.setCursor(9, 0);
if (buttonState1 == LOW) {
Str[Pos] = '1';
Pos++;
Str[Pos] = '\0';
delay(250);
while (digitalRead(buttonPin1) == LOW);
}
else if (buttonState2 == LOW) {
Str[Pos] = '2';
Pos++;
Str[Pos] = '\0';
delay(250);
while (digitalRead(buttonPin2) == LOW);
}
else if (buttonState3 == LOW) {
Str[Pos] = '3';
Pos++;
Str[Pos] = '\0';
delay(250);
while (digitalRead(buttonPin3) == LOW);
}
else if (buttonState4 == LOW) {
Str[Pos] = '4';
Pos++;
Str[Pos] = '\0';
delay(250);
while (digitalRead(buttonPin4) == LOW);
}
else if (enterButtonState == LOW) {
Str[Pos] = 'E';
Pos++;
Str[Pos] = '\0';
delay(250);
while (digitalRead(buttonPin1) == LOW);
if (strcmp (Str,CODE) == 0) {
Unlocked = true;
lcd.setCursor(0, 0);
lcd.print(" Access Granted");
delay(2000);
lcd.clear();
lcd.print(" Unlocked");
}
else if (SaveTimer > millis() && (Pos + 1) == CodeLength) {
strcpy(CODE, Str);
for (Pos = 0; Pos <= (CodeLength + 1); Pos++) {
EEPROM.write(Pos, Str[Pos]);
}
lcd.setCursor(0, 0);
lcd.print("Saving Code:");
lcd.setCursor(0, 1);
lcd.print(Str);
Unlocked = true;
}
else {
lcd.clear();
lcd.print(" Access Denied.");
delay(2000);
lcd.clear();
lcd.print("Password:");
}
while (Unlocked) {
Unlock();
if (digitalRead(clearlockbutton) == LOW) {
delay(200);
lcd.clear();
lcd.print(" Locked");
delay(2000);
lcd.clear();
Unlocked = false;
SaveTimer = millis() + 30000;
}
}
ClearCode();
}
else if (clButtonState == LOW) {
delay(500);
while (clearlockbutton == LOW);
if ((millis() - SaveTimer) > 4500) {
}
ClearCode();
}
if ( (long)( millis() - DisplayTimer ) >= 0) {
DisplayTimer += DisplayDelay;
lcd.setCursor(9, 0);
lcd.print(Str);
lcd.print(" ");
}
}
void ClearCode() {
Pos = 0;
Str[Pos] = '\0';
lcd.setCursor(0, 0);
lcd.print("Password:");
lcd.setCursor(0, 1);
lcd.print(" ");
}
void Unlock() {
myServo.write(150);
}
void Lock() {
myServo.write(50);
}
@Muhammed Asaf, 👍0
Обсуждение2 ответа
Пожалуйста, добавьте фотографию дисплея. Скорее всего у вас проблемы с контрастом. Схема по приведенной вами ссылке очень странная: пин 3, отвечающий за контрастность, завязан напрямую на GND, что выставляет дисплей на минимальную контрастность. Вы должны использовать либо потенциометр, либо делитель напряжения для этого вывода.
Дисплеи 1602, которые я использовал до сих пор, хорошо работали с резистором 2k или 5k между контрастным контактом и GND, в зависимости от модели., @towe
Для меня это очень странно, если честно. Все, что я видел, требует некоторого напряжения на этом контакте, и его, очевидно, нельзя установить с помощью какого-либо одного резистора. Адаптеры I2C также имеют небольшой потенциометр, встроенный в печатную плату., @Zhenek
Вот и я так же думал. Я использую оба как обычные 4-битные параллельные дисплеи. 2k входит в «Elegoo Uno R3 Ultimate Starter Kit». 5k - это "GE-C1602B-TMI-JT/R" от "Gleichmann", которые я использовал для рабочих проектов., @towe
@towe для китайца из стартового комплекта даташита конечно нет, но для второго нашел: http://www.produktinfo.conrad.com/datenblaetter/175000-199999/183045-da-01- en-LCD_MODUL_16X2_LED_GE_C1602B_TMI_JT_R.pdf. На странице 5 четко указано, что вы должны использовать банк в диапазоне 10-20k с выходом на контакт VO. Внизу страницы есть электрическая схема для этого. В таблице указано, что при комнатной температуре типичное напряжение VO составляет 3,7 В., @Zhenek
С резистором 5,1 кОм на землю и 5 В Vcc я получаю 1,08 В на VO и идеальный контраст., @towe
@towe во-первых, это противоречит тому, что указано в техническом описании, и поэтому очень странно. Во-вторых, я до сих пор не понимаю. Чтобы получить 1,08 В из 5,0 В, вам понадобится пара резисторов. Если один из них 5,1к, то другой должен быть около 18,5к. пожалуйста, покажите вашу фактическую установку, @Zhenek
Я хорошо знаю об этом. Я просто использовал то, что работало надежно. Заказная печатная плата (поэтому я был рад не тратить место на горшок), GND на GND, 5 В в качестве Vcc (либо от Uno через USB, либо от Recom R-785.0-0,5), и резистор 5,1 кОм от VO до ЗАЗЕМЛЕНИЕ. Подсветка питается либо от стабилизатора на 3,3В напрямую (первая версия), либо через резистор 100 Ом от 5В., @towe
Начните с жидкого кристалла, HelloWorld, пример. Выясните, является ли это вашей конфигурацией контактов или проблемой с потенциометром/без потенциометра, или у вас тупой ЖК-дисплей.
Некоторые LCD 1602 имеют встроенный потенциометр, поэтому убедитесь, что его тоже нет.
Процесс устранения.
- Печать string and integer LCD
- Отправка значения с одного Arduino на другой
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Запрограммируйте Arduino Uno как цифровые часы
- ЖК-дисплей странные символы
- 16*2 1602A LCD дисплей не отображает никаких символов или контрастности, несмотря на правильное подключение
- Считыватель таймкода SMPTE с ЖК-дисплеем, вопрос кодирования
но я им не пользуюсь
; почему не твой? Вы не можете просто исключить части схемы и ожидать, что она все еще будет работать. Если у вас нет потенциометров, вы проверяете комбинации двух резисторов, пока не получите хороший контраст. Наконец, вопрос в заголовке не имеет ничего общего с вопросом в остальной части текста., @Gerben