Arduino和键盘(完整指南)

嗨,哈伯族居民! 今天,我决定为Arduino制作完整的键盘指南。
注意! 本文主要针对初学者!

在许多项目中,需要创建用户输入的可能性。 如果您需要实现大量按钮(相对),那么分别连接它们将既漫长又不合理。 为此,最好选择一个键盘,但是像其他选择一样,您需要自觉地进行操作。 键盘的类型是什么?如何与它们交互?

在全球范围内,这种类型的所有模块都可以分为两大类: 矩阵模拟

矩阵键盘


最简单,最便宜和最流行的键盘类型。 它相对容易制造,并占据了arduino模块的大部分市场。 它通常看起来像这样:

图片

图片

工作原理


您可以通过研究下图来了解此键盘的工作原理:

图片

要了解按下了哪个按钮,您需要向模块的前四个触点施加信号,并观察从第二个触点返回的信号。 但是不要担心,您将不得不手动编写八个引脚的处理算法-现成的库“ keypad.h”将帮助我们解决这个问题,因此,我们不必重新发明轮子。

电路板连接


连接模块本身


在本文中,我将使用以下连接图:

图片

您可能有一个问题:“为什么我决定从第二个到第九个使用引脚,而跳过零个和第一个?” -事实是某些模块将它们用作接收和发送数据的RX和TX通道。 例如,一个蓝牙模块。 因此,考虑到可能会将项目添加到其他模块中,因此决定不使用这些连接引脚。

素描写作


首先,为了能够使用该库连接代码中的键盘,您需要将其安装在设备上。 可以按以下步骤进行操作:在Arduino IDE本身中,单击Sketch-> Connect Library-> Manage Libraries ...或使用键盘快捷键“ Ctrl + Shift + I”。 在搜索驱动器中的“ keypad.h”(不带括号)中,然后按“安装”。

安装后,继续编写草图:

#include <Keypad.h> //      const byte ROWS = 4; //     const byte COLS = 4; //     char hexaKeys[ROWS][COLS] = {//      ,   ,   {'1','4','7','*'}, {'2','5','8','0'}, {'3','6','9','#'}, {'A','B','C','D'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //      byte colPins[COLS] = {9, 8, 7, 6}; //      //    : Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600);//      } void loop(){ char customKey = customKeypad.getKey();//   if (customKey){// -  Serial.println(customKey);//      } } 

利弊


缺点


  • 需要连接太多引脚才能工作。 如果您不是要创建计算器或密码锁,而是创建一个较大的项目,那么这是一个大问题,在该项目中您仍然需要使用大量不同的模块-也许它们只是没有足够的引脚。
  • 模块的执行质量太低:没有人能保证持续稳定的信号。 原始键盘的制作水平不是很高,如果您完全在速卖通上订购,那么很可能必须用烙铁固定中国工程师的边框,才能实现稳定的操作。
  • 使用了一个额外的库,该库也将占用微控制器的内存,而该内存已经不多了。 如果您正在编写具有许多功能和计算的大型项目,并且需要手动从键盘读取数据或使用模拟键盘,则帐户上的每个字节。

优点


  • 价格低廉
  • 容易找到特价

模拟键盘


工作原理


在模拟键盘中,电阻器用于改变电压电平,并且信号通过一个通道,该通道实际上连接到板上的模拟引脚。 通过查看下图可以了解所有内容的排列方式:

图片

电路板连接


连接非常简单,但可能因特定的键盘而异。 在本文中,我将考虑将这种中文模拟键盘与Ali一起使用的示例。

因此:我们将键盘的模拟输出连接到板上的任何模拟引脚,将板上的VCC引脚连接到3.3V(不要看键盘本身的铭文上写着5V-这是一个错误),以及板上的GND和模块上的GND。 您可以使用以下方案:



素描写作


无需使用第三方库,因为 一切都非常简单明了。 这是代码本身,它读取按下的按钮并向端口监视器显示其编号,从1到16(从左到右,从上到下)或0(如果没有按下任何按钮)。

 unsigned const short int KEYPAD_PIN = 0;//    void setup() { Serial.begin(9600); analogReadResolution(10);//      0...1023 } void loop() { Serial.println(getPressedKeypadButton());//       } short int getPressedKeypadButton(){//  keypad`a //   1  16      0     const int OCCURACY = 5;//     int sensorValue = analogRead(KEYPAD_PIN);//    int keys[] = {1016, 937, 860, 794, 683, 641, 604, 571, 509, 485, 464, 444, 407, 328, 275, 236};//    (0-15,  0=1, 1=2  ..) if(sensorValue > -OCCURACY && sensorValue < OCCURACY){return 0;}//   ,    0 for(short int i = 0; i < 16; i++){//             if(sensorValue > (keys[i] - OCCURACY) && sensorValue < (keys[i] + OCCURACY)){ return i+1;//   , ..     0   ,    0    } } } 

利弊


优点


  • 连接非常简单
  • 只有一根针
  • 节省您不用在库下的内存
  • 提供稳定的操作(前提是您一次不能按下多个按钮)

缺点


  • 比矩阵键盘贵
  • 唯一的购买方式很可能是从中国订购,并且送货需要一些时间

总结


就个人而言,我建议使用模拟键盘,因为它们通常(多数情况下)质量更高,并且连接起来非常简单。 最主要的是要注意制造商提供的按下按钮的值表,如果没有,则可以自己进行这些测量,并在端口监视器中显示模拟端口的值,以便稍后在代码中使用它们。 但是,选择永远是您的选择:使用标准的便宜选项或为某些情况下的显着优势多付钱。

这就是我的全部。 将您的问题留在评论中,发表您的意见,我们将在哈伯开放空间见面!

Source: https://habr.com/ru/post/zh-CN460409/


All Articles