Подключение мембранной клавиатуры через аналоговые пины?

ruspad
Offline
Зарегистрирован: 20.01.2017
Всем привет! 
Помогите, пожалуйста разобраться! 
Есть Nano к ней подключен модуль NRF24L01 (синие контакты),хочу подключить 16 кнопочную мембранную клавиатуру. Для ее подключения необходимы 8 пинов, коих на нане осталось (цифровых) 7шт. Попытался подключить через аналоговый порт А6. Но все результаты четны.
1) Возможно ли подключить один из пинов к аналоговому пину, например, к А6? (красные контакты). При этом используя библиотеку keypad.h
2) Как подключить клавиатуру, например, с помощью сдвиговым регистром? Нашел несколько статей на этот счет но не связаных с ардуино =( 
 
Заранее спасибо за помощь!

 

 

JasKo
Offline
Зарегистрирован: 21.11.2015

К А6 и А7 нельзя - это только аналоговые входы, а к А0-А5 можно.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

На аналоговые можно, кроме А6 и А7. Они работают только как входы АЦП.

"Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5)"

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Либо 4 вывода через регистр сдвига, либо добавить резисторы и получить аналоговую мембраную матрицу.

ruspad
Offline
Зарегистрирован: 20.01.2017

JasKo пишет:

К А6 и А7 нельзя - это только аналоговые входы, а к А0-А5 можно.

Jeka_M пишет:

На аналоговые можно, кроме А6 и А7. Они работают только как входы АЦП.

"Аналоговые входы (analog pins) могут быть использованы как цифровые вход/выходы (digital pins). Обращение к ним идет по номерам от 14 (для аналогового входа 0) до 19 (для аналогового входа 5)"

Вотжеж )) ларчик то просто открывался

Спасибо огромное! Все сразу же заработало!

ruspad
Offline
Зарегистрирован: 20.01.2017

qwone пишет:

Либо 4 вывода через регистр сдвига

Да, вот тоже думал, но вот что-то не нашел ничего путного на этот счет =( 

Я так понимаю в случае подключения через сдвиговые регистр, библиотека работать не будет. Или кто-то написал на этот случай? )

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ruspad пишет:

qwone пишет:

Либо 4 вывода через регистр сдвига

Да, вот тоже думал, но вот что-то не нашел ничего путного на этот счет =(  

Я так понимаю в случае подключения через сдвиговые регистр, библиотека работать не будет. Или кто-то написал на этот случай? )

Все хотите на халяву. А головой подумать, руками поработать. Мои библиотеки вам не подойдут. так что пишите свои. У вас канал SPI . Вот и подключайте . Итого 5 выводов для обработки клавиатуры . CS на регистр и 4 входных. 

JasKo
Offline
Зарегистрирован: 21.11.2015

ruspad пишет:

qwone пишет:

Либо 4 вывода через регистр сдвига

Да, вот тоже думал, но вот что-то не нашел ничего путного на этот счет =( 

Я так понимаю в случае подключения через сдвиговые регистр, библиотека работать не будет. Или кто-то написал на этот случай? )

Можно подключить через PCF8574, а библиотеку можно поиском здесь на форуме найти. Подключаться будет на A4 и А5 (всего два пина).

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

JasKo, можно и так. Но это не решает главный вопрос. Каков интерфейс полученной быблиотеки. Будет ли библиотека активная и иметь свои обработчики или же пассивная, для определения нажатой клавиши надо запросить нужный метод. А может клавиатура сливает данные в специальный буфер, как serial.

 

Pyotr
Offline
Зарегистрирован: 12.03.2014

ruspad пишет:

1) Возможно ли подключить один из пинов к аналоговому пину, например, к А6? (красные контакты). 

 

Иногда в своих девайсах подключаю матричную клавиатуру к аналоговому входу. Дополнительно нужно 7 резисторов. Схему рисовал для себя, извиняйте за корявость.

Скетч тестовый. 

//опрос матричной клавы 4х4 
//3 x R = 560 Ом, 3 x R2 = 2.2 кОм, R1 = 22 kOm
const word coef = 80;// (R1/R+1) * 2 = 80;
const byte keyPin = A6;  
word val;       
byte key; //0-15      

void setup() {
  Serial.begin(9600); 
}

void loop() {
  val = analogRead(keyPin);
  if(val < 300){ //что-то нажато
    key = ((val * coef) / (1024 - val) +1) / 2;
    Serial.print("analogRead() = "); Serial.println(val);      
    Serial.print("key = "); Serial.println(key);   
    delay(500); 
  }  
}