37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十六:4X4键盘矩阵按键板控制模块 16按键板 轻触按键微动开关 单片机IO口外扩
4X4矩阵键盘模块的实验环境
一、4X4矩阵键盘模块实验所需硬件清单
4X4矩阵键盘模块X1
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
LED发光二极管(蓝色)X1
高电平触发有源蜂鸣器模块X1
高电平触发单路5V继电器模块X1
Proto Shield 原型扩展板(带mini面包板)X1
二、4X4矩阵键盘模块实验所需软件平台
代码编程 Arduino IDE (版本1.8.19)
仿真编程 Linkboy (版本V4.6.3)
图形编程 Mind+ (版本 V1.7.0 RC2.0)以及编玩边学(线上平台)
三、4X4矩阵键盘模块实验接线
4X4矩阵键盘模块上有一个8针的杜邦排线接口,理论上可以直接插到0-7脚上,但0,1脚用于串口通信,所以只能选择2~13脚,这里实验选用了2-9脚。
Keypad Pin R1 –> Arduino Pin 2
Keypad Pin R2 –> Arduino Pin 3
Keypad Pin R3 –> Arduino Pin 4
Keypad Pin R4 –> Arduino Pin 5
Keypad Pin C1 –> Arduino Pin 6
Keypad Pin C2 –> Arduino Pin 7
Keypad Pin C3 –> Arduino Pin 8
Keypad Pin C4 –> Arduino Pin 9
四、安装“Keypad.h”驱动库
1、打开 https://github.com/
2、搜索“Keypad”,下载安装红点处的文件
4X4矩阵键盘模块的几个实验
程序一:通过串口显示16位键盘的16个键值
1、Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序一:通过串口显示16位键盘的16个键值
*/
#include <Keypad.h> //加载库
const byte ROWS = 4;
const byte COLS = 4;
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}; //定义行引脚
byte colPins[COLS] = {6, 7, 8, 9}; //定义列引脚
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );//实例化Keypad 对象
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey(); //新建一个key 变量 用于获取键盘当前的值
if (key != NO_KEY) {
Serial.println(key);
}
}
2、实验串口返回情况
3、实验场景图
二、程序二:4X4矩阵键盘模块的简单测试
1、实验开源图形编程(Mind+、Mixly、编玩边学)
实验串口返回情况
程序三:设定按键S1、S2、S3和S16控制LED的亮灭状态
1、实验开源仿真编程(Linkboy V4.63)
2、实验结果:
按下1#按键,点亮LED灯;
松开1#按键,熄灭LED灯;
按下2#按键,LED灯反转一次;
按下3#按键,LED灯连续闪烁
按下16#按键,点亮LED灯;
松开16#按键,熄灭LED灯。
3、实验场景图
程序四:按下1键控制LED亮或灭,长按2键LED闪烁
1、Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序四:按下1键控制LED亮或灭,长按2键LED闪烁
*/
#include <Keypad.h> //加载库
const byte ROWS = 4;
const byte COLS = 4;
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}; //定义行引脚
byte colPins[COLS] = {6, 7, 8, 9}; //定义列引脚
//初始化我们提交 NasiZnakovi 的 NewKeypad 类,连接行和列的引脚以及行和列的数量
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
byte ledPin = 13;//定义LED接脚为D13
boolean blink = false;
boolean ledPin_state;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); //将数字引脚13设置为输出
digitalWrite(ledPin, HIGH); //打开 LED
ledPin_state = digitalRead(ledPin); //存储初始 LED 状态,LED 亮时为高电平
keypad.addEventListener(keypadEvent); //为这个键盘添加一个事件监听器
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
}
if (blink) {
digitalWrite(ledPin, !digitalRead(ledPin));
delay(100);
}
}
//处理一些特殊事件,按下1键控制LED亮灭,长按4键LED闪烁
void keypadEvent(KeypadEvent key) {
switch (keypad.getState()) {
case PRESSED:
if (key == '1') { //按下1键时反转LED的亮灭状态
digitalWrite(ledPin, !digitalRead(ledPin));
ledPin_state = digitalRead(ledPin);
//记住 LED 状态,亮或不亮
}
break;
case RELEASED:
if (key == '2') {
digitalWrite(ledPin, ledPin_state); //从开始闪烁之前恢复 LED 状态
blink = false;
}
break;
case HOLD:
if (key == '2') {
blink = true; //连续按住2键时LED闪烁
}
break;
}
}
2、实验串口返回情况
3、实验结果
(1)按下1#按键,串口显示:1,点动控制LED亮或灭(双稳态);
(2)按下2#按键,串口显示:2,长按4键LED一直闪烁,松开停止;
(3)按下3#按键,串口显示:3;
(4)按下4#按键,串口显示:A;
(5)按下5#按键,串口显示:4;
(6)按下6#按键,串口显示:5;
(7)按下7#按键,串口显示:6;
(8)按下8#按键,串口显示:B;
(9)按下9#按键,串口显示:7;
(10)按下10#按键,串口显示:8;
(11)按下11#按键,串口显示:9;
(12)按下12#按键,串口显示:C;
(13)按下13#按键,串口显示:*;
(14)按下14#按键,串口显示:0;
(15)按下15#按键,串口显示:#;
(16)按下16#按键,串口显示:D。
程序五:设定按键密码锁,控制舵机
1、实验开源仿真编程(Linkboy V4.63)
2、实验结果
(1)按下1#按键,点亮LED灯,松开LED灯灭;
(2)按下2#按键,点亮LED灯,松开LED灯灭;
(3)按下8#按键,点亮LED灯,舵机转动60度,开锁;
(4)按下12#按键,点亮LED灯,松开LED灯灭;
(5)按下其他按键,没有反应。
3、实验场景图