Arduino笔记实验(初级阶段)—Keypad小键盘

Arduino笔记实验(初级阶段)—Keypad小键盘



前言

自学笔记,没有历史知识铺垫(省略百度部分),博主基于C++代码编程,函数可以参考官网,或者下载Arduino IDE(工具),查看菜单:帮助->参考,系列性的记录核心的实用笔记,本章主要记录Arduino Keypad小键盘的实验与分析


IDE工具:Arduino IDE

组件:

  1. Arduino UNO R3 *1
  2. 面包版 *1
  3. 杜邦线若干
  4. 4x4按键膜(Keypad) *1

一、电路图

Keypad电路图

二、集成库方案(Keypad)

三方集成库

Keypad文档
三方集成库优点是便于使用,三方库在实际项目开发中应用非常普遍,由于对底层进行封装,不太利于基础学习,建议初学者养成阅读源代码的习惯

代码

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 9, 10, 11}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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

void loop() {
  char key = keypad.getKey();

  if (key != NO_KEY) {
    Serial.println(key);
  }
}

实验效果展示

在这里插入图片描述
在这里插入图片描述

三、基于Arduino原生方案

4*4按键膜结构图

在这里插入图片描述

此处仅做了按键的基础功能代码逻辑演示,能够实现不依赖三方库进行基础按键操作
逻辑其实很简单,4*4按键膜结构本质是一套二维数组(矩阵)开关,3个核心点:

  1. 使用同4*4按键膜结构的二位数组(矩阵),记录按键输出内容
  2. 建立两个记录矩阵行和列的数组,通过双重for循环来遍历两个数组的所有元素
  3. 利用数字引脚的INPUT和OUTPUT功能,检测二维数组中,哪个元素的电平被拉低,哪个元素就是被触发的元素

代码

const byte ROW_NUM = 4;
const byte COL_NUM = 4;
const byte rowPins[ROW_NUM] = {2, 3, 4, 5};
const byte colPins[COL_NUM] = {8, 9, 10, 11};
const char keymap[ROW_NUM][COL_NUM] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};



void setup() {

  Serial.begin(9600);

  for (byte r = 0; r < sizeof(rowPins); r++) {
    pinMode(rowPins[r], INPUT);
    digitalWrite(rowPins[r], HIGH);
  }

  for (byte c = 0; c < sizeof(colPins); c++) {
    pinMode(colPins[c], OUTPUT);
    digitalWrite(colPins[c], HIGH);
  }
}

void loop() {

  for (byte r = 0; r < sizeof(rowPins); r++) {
    for (byte c = 0; c < sizeof(colPins); c++) {
      digitalWrite(colPins[c], LOW);
      int upKey = digitalRead(rowPins[r]);
      if (upKey == LOW) {
        Serial.println(keymap[r][c]);
        delay(300);
        digitalWrite(rowPins[r], HIGH);
      }
      digitalWrite(colPins[c], HIGH);
    }
  }

}

实验效果展示

在这里插入图片描述

四、实验核心技术点-矩阵开关

通过上述两种方案实验可以看出,keypad实际上可以通过矩阵开关来实现,了解矩阵开关如何接入开发版中,可以扩展到更多的应用中.
如通过有限的引脚实现更多的功能,4*4按键膜,通过8个引脚可以获得16种按键操作,实际上,上面提供的三方库还可以监听按下,松开,长按等事件的监听,甚至通过多按键组合实现更大的操作空间,可以在日后的开发中灵活运用是关键所在

实验总结

本章主要以4x4按键膜为实验对象,扩展其实现原理,希望通过其原理,以后能够运用在更多场景中

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值