Объясните пожалуйста библиотеку Keypad.h. Какие команды и для чего там используются?

Тема в разделе "Arduino & Shields", создана пользователем saul, 2 июл 2018.

  1. saul

    saul Нерд

    Прошу разобрать скетч по подключению матричной 4 на 4 клавиатуры с подробными комментариями. Для чего и какие команды там используются. И метод ввод многозначных чисел для их последующей обработки. Думаю эта информация (снабженная объяснениями) будет многим полезна, т.к. на сторонних ресурсах она даётся очень поверхностно или со специфическими акцентами. Заранее спасибо!
     
  2. b707

    b707 Гуру

    скетч-то где?

    но вообще вопрос напоминает "прошу разобрать слово "Корова" - какие буквы в нем используются и для чего, а то в учебнике информации мало" :)
    Чуть-чуть продвинтесь в изучении языка - и такие вопросы у вас возникать не будут...
     
    Daniil, Airbus и Igor68 нравится это.
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Бывает "тот же х*р, но вид сбоку" - есть библиотека, нет описания функций. Слышали что подходит для нашей цели, но нет описания. Тогда открываем текстовым редактором xxx.h - и xxx.cpp - файлы библиотеки и ищем. Бывает есть комменты. А нет - смотрим объявления функций и их аргументы. Опыт, удача и английский язык в помощь. Тут хоть текстовый вид. А в Винде - там скомпилированные библиотеки xxx.dll - там DLL-вьювер в помощь. А насчет конкретно вопроса - описание в интернете ищется свободно.
     
    Последнее редактирование: 2 июл 2018
  4. saul

    saul Нерд

    Скетч, так скетч:

    10 #include <Keypad.h>
    11
    12 const byte ROWS = 4; //four rows
    13 const byte COLS = 4; //four columns
    14 //define the cymbols on the buttons of the keypads
    15 char hexaKeys[ROWS][COLS] = { //вопрос 1: hexaKeys, тут это название массива?
    16 {'1','2','3','A'},
    17 {'4','5','6','B'},
    18 {'7','8','9','C'},
    19 {'*','0','#','D'}
    20 };
    21 byte rowPins[ROWS] = {9,8,7,6}; //connect to the row pinouts of the keypad
    22 byte colPins[COLS] = {5,4,3,2}; //connect to the column pinouts of the keypad
    23
    24 //initialize an instance of class NewKeypad
    25 Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //вопрос 2:
    //Keypad customKeypad = Keypad , где тут что, что присвоенное имя, а что комнада?

    26
    27 void setup(){
    28 Serial.begin(9600);
    29 }
    30
    31 void loop(){
    32 char customKey = customKeypad.getKey(); //вопрос 3: тут вроде понятно customKey - имя переменной
    33
    34 if (customKey){
    35 Serial.println(customKey);
    36 }
    37 }
    // вопрос 4: внятно его тоже не нашёл, как ввести 2-3 ёх значное число, так что бы его потом можно было бы обработать?
     
  5. saul

    saul Нерд

    вот с простыми конкретными вопросами беда: простые вещи подробно мало где рассматриваются, в основном походя в конкретных проектах. А хочется получить фундаментальные понятия по таким основным вещам. "IDE за один день для чайников", ага... За совет про текстовый редактор - спасибо.
     
  6. Mitrandir

    Mitrandir Гуру

    //вопрос 1: hexaKeys, тут это название массива?
    Ответ 1: да, hexaKeys это имя массива, двумерного, содержащего кнопки клавы
    //вопрос 2:
    //Keypad customKeypad = Keypad , где тут что, что присвоенное имя, а что комнада?

    ответ

    Keypad - имя типа, класс Keypad
    customKeypad - имя переменной
    = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); - создание класса, в конструктор передаем какие кнопки есть на клаве и пины куда подключили
    //вопрос 3: тут вроде понятно customKey - имя переменной
    ответ -
    тут получаем какую кнопку нажали

    char customKey = customKeypad.getKey();

     
    Последнее редактирование: 3 июл 2018
    saul и arkadyf нравится это.
  7. Mitrandir

    Mitrandir Гуру

    как ввести трехзначное число?
    вот переработанная функция loop

    Код (C++):

    int n = 0;//номер текущей цифры
    char str[4]; // тут положим трехзначное число. 4 элемента в массиве так как в с++ строка должна кончаться 0

    void loop(){
      char c = customKeypad.getKey(); // считываем код символа с клавы
      if(c){// что-то прочитали
          str[n++] = c; //положим в позицию n и увеличим счетчик
          if(n == 3){ // все цифры введены
                str[3] = 0; //положим завершающий 0
                Serial.print("вы ввели:");
                Serial.println(str);
                n = 0;
          }
      }


    }
     
    kraus, saul и arkadyf нравится это.
  8. Mitrandir

    Mitrandir Гуру

    Bard, saul и arkadyf нравится это.
  9. b707

    b707 Гуру

    Чтобы получить фундаментальные знания, надо читать учебники по языку программирования. Изучение чужого кода - вещь полезная, но только после прочтения грамотной книжки страниц на 700, а не вместо нее.
     
    saul, arkadyf, vvr и ещё 1-му нравится это.
  10. saul

    saul Нерд

    И снова майары спасают ситуацию. Спасибо, Митрандир.
     
    Mitrandir нравится это.
  11. saul

    saul Нерд

    Не спорю, кстати в тему, можете порекомендовать такую?
     
  12. Bard

    Bard Нуб

    Всем доброго времени суток.
    Молод я в кодинге и посему читать библиотеку пока сложновато, хотя я пытаюсь.
    Однако, сдается мне, что товарищи старокодящие даже знают ответ...
    Вопрос: кто-нибудь точно знает или разбирался в этой библиотеке, защищена ли она от короткого замыкания, при нажатии двух кнопок в разных столбцах/строках (не знаю, библиотека какие пины использует для подачи сигнала, а какие для чтения)? Переводятся ли все, кроме активного пина, в режим чтения, чтобы не допускать КЗ?

    Ранее (в дороге читал) не открывалась ссылка, которую давал Mitrandir. Сейчас заработала, так так, исхоя из текста - да, есть защита.
    Mitrandir, спасибо!
     
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Представьте - процессор без конца гоняет пины в режимы выход-вход !!! Он по питалову потратит энергии больше чем - Поставить 4-8 30-копеечных диода - и никаких проблем. Нет надейтесь на библиотеки, нужна аппаратная защита.
     
    Последнее редактирование: 11 фев 2020
  14. Bard

    Bard Нуб

    Шутка хорошая, смешная даже, но явно немного устаревшая... Наверное у вас юмор версии v2.19.0beta, а сейчас актуальной является v2.02.0gretta, там было бы еще про неэкологичность и безответственность такого подхода к кодингу... )

    А все же, я правильно понимаю, что защитные диоды с этой библиотекой не нужны?
     
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Насчет софта не скажу - этой библы не устанавливал. Предпочитаю вот такое -
     

    Вложения:

    issaom и kraus нравится это.
  16. parovoZZ

    parovoZZ Гуру

    ЛА повесь да и посмотри. Маловероятно, что отточенная библа имеет такие явные косяки.
     
  17. Bard

    Bard Нуб

    Я так понимаю, что это все на один аналоговый пин и определять по напряжению какая кнопка нажата?
    Хотя согласен, самое надежное решение, однако требующее чуть или даже не чуть больших временных затрат, не говоря о резюках )
     
  18. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Пинов у Ардуины фиг да маленько. Клава в "стандарт"- подключении 8 штук отъедает. А тут - 1шт.. Если надумаете - помогу. Это проще чем со стандартной. Резюки - цена - рупь/шт.
    ПС. С библой - разберитесь. Изучить - важней чем делать.
     
    Последнее редактирование: 11 фев 2020
    kraus нравится это.
  19. kraus

    kraus Нерд

    А библиотеку надо к аналоговой клавиатуре? Поискал-не нашёл.
     
  20. parovoZZ

    parovoZZ Гуру

    А без библиотеки и не программист уже?