Проблема с LCD keypad shield

Доброго времени суток.
Недавно купил шилд LCD keypad shield. Подключаю его к Arduino Uno. Заливаю скетч такого вида:


#include <LiquidCrystal.h>


const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  
  lcd.begin(16, 2);
  
  lcd.clear();
}

    


void loop() {
  
  lcd.setCursor(0, 0);
  lcd.print("analogRead");
  lcd.print(analogRead(A0));

  delay(250);
  

}

При нажатии любых кнопок, кроме Reset, ничего не происходит, постоянно выдает значение 1023. Прозвонил кнопки, залипаний нет, пин A0 звонится с первой кнопкой. Для проверки залил скетч AnalogReadSerial (из стандартных примеров IDE). В монитор порта при подключенном шилде тоже постоянно выдает значение 1023, при нажатии кнопок значение не меняется.
Можно ли как-то решить проблему с опросом кнопок, или это брак шилда?

Или нерабочий пин А0 на ардуине

Спасибо за ответ. Пин рабочий, подключал к нему потенциометр, при вращении значения в мониторе порта значения изменяются. Тогда скорее всего проблема в шилде. Жаль конечно…

А если кнопку нажать и так подержать?

Так тоже никакой реакции. Я думаю, как вариант проблема с одним из резисторов в цепи кнопок, но они находятся под экраном, нужно его выпаивать.

Зачем же сразу выпивать? Судя по схеме https://arduinolab.pw/wp-content/uploads/2017/06/LCDKeypad_Shield_SCH.png все резисторы контачат с кнопками, а кнопки вполне доступны. Достаточно тестером потыкать в выводы кнопок, что бы локализовать проблему и исправить припаяв прямо к кнопкам детальки или проводки.

Потыкал тестером, сопротивления плюс/минус (небольшие погрешности, видимо сам мультиметр привирает) совпадают с номиналами на схеме. Тем более тогда не понятно, в чем проблема. А0 на Uno рабочий - проверено. Дурным делом думал, что металлический экран дисплея замыкает резисторы, но как смог рассмотреть, то нет. По сути шилд простой, нет ничего в нем такого особенного, но проблема то есть, а где - хз.

А какое напряжение показывает тестер на А0 при нажимании кнопок?

Возможно нет контакта кнопок с GND

Прозвонил кнопки, все звонятся с землей.
Завтра, на свежую голову, попробую проверить напряжение на А0 при нажатии кнопок.
Всем спасибо за советы.

Надо ещё проверить, что они при нажатии, замыкают контакты. Может окислились.

pinMode(A0, INPUT_PULLUP);

Так ведь там и так, по схеме, подтяжка к VCC. Да и

это подтверждает

Для первого шага следовало бы сопротивление между A0 и VCC проверить. А так же между A0 и GND при нажимании кнопок.
На шилде может быть коротыш или неправильный номинал резистора.

2 лайка

Проверил сопротивление.
Между АО и VCC - 3кОм
По схеме, как я понял, должен стоять резистор на 2кОм.

Между А0 и GND (при нажатии кнопок)
Select - 3.2кОм
Left - 1.63кОм
Up - 0.3кОм
Down - 0.89кОм
Right - 0.3кОм.

шилд исправен, вы земли (минус) ардуино и шилда точно соединили?

хотя… вот это мне не нравится

но все равно, должны быть цифры отличные от 1023.

Да, пины земли Uno и шилда соединены. Тестером проверил.
Ошибся с кнопкой Right. Там сопротивление близкое к нулю.

это другое дело, на другой аналоговый пин, посадить, ну еще раз подергать все - чудес то не бывает.

адд
чет я пропустил, что это на уно надевается, сорри.

Натягивайте на Уно и снова измеряйте сопротивления. Потом включайте и меряйте напряжение на пине при нажатии кнопок. Что-то тянет вверх и нужно выяснить на каком этапе это всё проявляется.

С точки зрения физики 3К не может перетянуть 0.3К

Ну и, действительно, воткните в сетуп pinMode(A0, INPUT); - хуже не будет, а уверенность появится.

Уж не знаю, что и сказать…
Отдельно подключил шилд к Uno через “дюпонты” только блок кнопок. На Uno использовал A1. Залил скетч AnalogReadSerial. И значения, при нажатии кнопок начали изменяться, т.е. опрос идет.
Но потом решил снова подключить в A0, таким же способом (через провода). И… значения также при нажатии меняются.
Напряжения замерял: (при прямом подключении к UNO)

Select - 3.02В
Left - 1.94В
Up - 0.47В
Down - 1.21В
Right - 0В

Интересно то, что при прямом подключении все задействованные пины шилда и Uno звонятся между собой нормально, т.е. контакт (как по мне) нормальный.