Матричная клавиатура для ввода символов

Niksov
Offline
Зарегистрирован: 06.09.2019

Здравствуйте. Подключил матричную клавиатуру 4х4 к ARDUINO PRO MICRO. Подскажите, пожалуйста, как реализовать вывод символов не в сериал порт, а на экран по аналогии с обычной клавиатурой - нажимаешь 7 -на экран выводится 7. Что дописать в скетче нужно?

#include <Keypad.h> 
const byte ROWS = 4; 
const byte COLS = 4; 

char hexaKeys[ROWS][COLS] = {
  {'0','1','2','3'},
  {'4','5','6','7'},
  {'8','9','A','B'},
  {'C','D','E','F'}
};

byte rowPins[ROWS] = {6, 7, 8, 9};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), colPins, rowPins, COLS, ROWS);  

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

void loop(){
  char customKey = customKeypad.getKey();
  if (customKey){
    Serial.println(customKey);
  }
}
Niksov
Offline
Зарегистрирован: 06.09.2019

Так?


#include "Keyboard.h"

void setup() {

keyboard.begin(DataPin, IRQpin);

}

void loop() {

  if (keyboard.available()) {

    char c = keyboard.read();

    if (c ='0') {
      Keyboard.write('0');
      delay(10);
      Keyboard.releaseAll();
    }

 

b707
Offline
Зарегистрирован: 26.05.2017

заменить строчку 23 на печать символа на экране

b707
Offline
Зарегистрирован: 26.05.2017

Niksov пишет:

Так?


#include "Keyboard.h"

void setup() {

keyboard.begin(DataPin, IRQpin);

}

void loop() {

  if (keyboard.available()) {

    char c = keyboard.read();

    if (c ='0') {
      Keyboard.write('0');
      delay(10);
      Keyboard.releaseAll();
    }

 

 

это если у вас экран приделан к другой ардуине, не к той, на которой клавиатура :)

Niksov
Offline
Зарегистрирован: 06.09.2019

b707 пишет:

заменить строчку 23 на печать символа на экране

Таким образом?

23	    Keyboard.write(customKey);

 

b707
Offline
Зарегистрирован: 26.05.2017

Niksov пишет:

Таким образом?

23	    Keyboard.write(customKey);

 

опять нет.

вы в бутылочку. что ли, играете? Открываете чужой код и наугад копируете оттуда любую строчку?

Если вам надо вывести символ на дисплей - причем тут метод write клавиатуры?

 

Для того, чтобы вывести что-то на экран. для начала надо подключить библиотеку экрана. инициализировать экран. задать позицию на дисплее, фонт, размер и цвет символов (смотря что применимо)

Все это на разных экранах делается по разному, а вы даже не сказаи. какой у вас дисплей

Niksov
Offline
Зарегистрирован: 06.09.2019

b707 пишет:

Niksov пишет:

Таким образом?

23	    Keyboard.write(customKey);

 

опять нет.

вы в бутылочку. что ли, играете? Открываете чужой код и наугад копируете оттуда любую строчку?

Если вам надо вывести символ на дисплей - причем тут метод write клавиатуры?

 

Для того, чтобы вывести что-то на экран. для начала надо подключить библиотеку экрана. инициализировать экран. задать позицию на дисплее, фонт, размер и цвет символов (смотря что применимо)

Все это на разных экранах делается по разному, а вы даже не сказаи. какой у вас дисплей

Вывести нужно не на дисплей, а на экран монитора (в блокноте например).

b707
Offline
Зарегистрирован: 26.05.2017

Niksov пишет:

Вывести нужно не на дисплей, а на экран монитора (в блокноте например).

тогда не знаю

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Чота ржу. 

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

Чота ржу. 

праильно ржешь, а то я  наехал на новичка. а сам команду эмуляции клавиатуры не узнал...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Niksov пишет:

Вывести нужно не на дисплей, а на экран монитора (в блокноте например).

А каким именно боком Ваша про-микро соединена с монитором? И соединена ли вообще?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Niksov пишет:

Здравствуйте. Подключил матричную клавиатуру 4х4 к ARDUINO PRO MICRO. Подскажите, пожалуйста, как реализовать вывод символов не в сериал порт, а на экран по аналогии с обычной клавиатурой - нажимаешь 7 -на экран выводится 7. Что дописать в скетче нужно?

Ничего - там все есть

Niksov
Offline
Зарегистрирован: 06.09.2019

ЕвгенийП пишет:

Niksov пишет:

Вывести нужно не на дисплей, а на экран монитора (в блокноте например).

А каким именно боком Ваша про-микро соединена с монитором? И соединена ли вообще?

Прошу прощения, возможно я не  совсем понятно объяснил. ARDUINO PRO MICRO подключается не к монитору, а к ПК через micro USB. Нужно, чтобы клавиатура выполняла ввод букв и цифр, как с обычной клавиатуры, но с 16 кнопками. Например, открываю обычный блокнот на ПК, нажимаю 7 на клавиатуре - в блокноте печатается 7.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Niksov пишет:

Прошу прощения, возможно я не  совсем понятно объяснил. ARDUINO PRO MICRO подключается не к монитору, а к ПК через micro USB. Нужно, чтобы клавиатура выполняла ввод букв и цифр, как с обычной клавиатуры, но с 16 кнопками. Например, открываю обычный блокнот на ПК, нажимаю 7 на клавиатуре - в блокноте печатается 7.

Дык Вам драйвер нужен на компьютере. Его и ищите. При чем здесь ардуинка?

b707
Offline
Зарегистрирован: 26.05.2017

Niksov пишет:

Прошу прощения, возможно я не  совсем понятно объяснил. ARDUINO PRO MICRO подключается не к монитору, а к ПК через micro USB. Нужно, чтобы клавиатура выполняла ввод букв и цифр, как с обычной клавиатуры, но с 16 кнопками. Например, открываю обычный блокнот на ПК, нажимаю 7 на клавиатуре - в блокноте печатается 7.

что, вы так и не решили свою задачку?

вы же вчера давали правильный ответ

 Keyboard.write(customKey);

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Т.е. надо, чтобы про-микро работало клавиатурой компьютера? Чтобы компьютер и не знал особо что там: честная клавиатура или Ваша про-микро. Так?

Niksov
Offline
Зарегистрирован: 06.09.2019

b707 пишет:

Niksov пишет:

Прошу прощения, возможно я не  совсем понятно объяснил. ARDUINO PRO MICRO подключается не к монитору, а к ПК через micro USB. Нужно, чтобы клавиатура выполняла ввод букв и цифр, как с обычной клавиатуры, но с 16 кнопками. Например, открываю обычный блокнот на ПК, нажимаю 7 на клавиатуре - в блокноте печатается 7.

что, вы так и не решили свою задачку?

вы же вчера давали правильный ответ

 Keyboard.write(customKey);

Благодарю, решил. Все получилось.

Niksov
Offline
Зарегистрирован: 06.09.2019

Подскажите, пожалуйста.

К Arduino Pro Micro подключаю матричную клавиатуру 5х6.

Задействованы 2, 3, 5, 7, 8, 9, 10, 14, 15, 16, 18 входы.

Входы SPI 14, 15 , 16 и

входы I2C 2, 3

нужно подтягивать к питанию?

    pinMode(2, INPUT_PULLUP);
    pinMode(3, INPUT_PULLUP);
    pinMode(14, INPUT_PULLUP);
    pinMode(15, INPUT_PULLUP);
    pinMode(16, INPUT_PULLUP);

Green
Offline
Зарегистрирован: 01.10.2015

Входа нужно подтягивать.

Niksov
Offline
Зарегистрирован: 06.09.2019

Green пишет:

Входа нужно подтягивать.

 

Спасибо за ответ.

Niksov
Offline
Зарегистрирован: 06.09.2019

Подскажите, пожалуйста.

Для подключения матричной клавиатуры по такой схеме нужно все входы подтянуть к питанию?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Нет.

Niksov
Offline
Зарегистрирован: 06.09.2019

Проверял на 6 кнопок скетч с библиотекой keypad.h

Все вроде работает.

#include "Keyboard.h"
#include <Keypad.h> 
const byte ROWS = 2; 
const byte COLS = 3; 

char hexaKeys[ROWS][COLS] = {
  {'1','2','3'},
  {'5','7','8'}
};
byte rowPins[ROWS] = {3, 9};
byte colPins[COLS] = {2, 5, 7};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), colPins, rowPins, COLS, ROWS);  

void setup(){

  Keyboard.releaseAll();
  delay(10);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);

}   

void loop(){
  char customKey = customKeypad.getKey();
  if (customKey){
    Keyboard.write(customKey);
  }
}

Что неправильно?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Матрица будет работать только в том случае, если часть пинов будет сконфигурирована на вход, а часть - на выход. 

Если у Вас ""все работает", то это лишь означает, что библиотека сама переключает какие ей нужно пины на выход. В этом случае производимая Вами инициализация пинов бесполезна.

Впрочем, правильнее всего - заглянуть в исходники библиотеки и выяснить, как именно она работает.

Niksov
Offline
Зарегистрирован: 06.09.2019

Огромное спасибо, andriano!

Действительно, библиотека сама определяет пины под колонки columnPins как выходы, а под строки rowPins  как входы и подтягивает их к питанию INPUT_PULLUP