/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百四十:YL-004老款20按键独立键盘 跑马灯矩阵键盘模块
程序之三:矩阵键盘部分测试按键'*'和 '#'控制LED灯(板载13脚)
*/
#include <Keypad.h>
const byte ROWS = 4; //四行
const byte COLS = 3; //三列
//定义键盘按钮上的符号
char keys = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins = {2, 3, 4, 5}; //连接到键盘的行插脚
byte colPins = {6, 7, 8};//连接到键盘的列插脚
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
byte ledPin = 13;
boolean blink = false;
boolean ledPin_state;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // 将数字管脚设置为输出
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)); // 将LED引脚从Hi2Lo或Lo2Hi更改
delay(100);
}
}
// 处理一些特殊事件
void keypadEvent(KeypadEvent key) {
switch (keypad.getState()) {
case PRESSED:
if (key == '#') {
digitalWrite(ledPin, !digitalRead(ledPin));
ledPin_state = digitalRead(ledPin); // 记住LED状态,亮或不亮
}
break;
case RELEASED:
if (key == '*') {
digitalWrite(ledPin, ledPin_state); // 从开始闪烁前恢复LED状态
blink = false;
}
break;
case HOLD:
if (key == '*') {
blink = true; // 按住*键时,LED闪烁
}
break;
}
}
'#'键控制LED灯自锁开关,'*'键按下时LED闪烁,松开熄灭
测试跑马灯部分接线示意图
我连地板都没混上,楼主真是精力旺盛啊~都写了这么多教程。整理一下都可以出个传感器典集啦 幻生幻灭 发表于 2020-2-28 21:20
我连地板都没混上,楼主真是精力旺盛啊~都写了这么多教程。整理一下都可以出个传感器典集啦 ...
:handshake谢谢老师的鼓励,整理的实验记录都是基础性的,去年五月份才开始接触单片机,底子太差,只好先从简单的开始学起 程序之四:测试跑马灯部分,循环逐个点亮,逐个熄灭
/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百四十:YL-004老款20按键独立键盘 跑马灯矩阵键盘模块
程序之四:测试跑马灯部分,循环逐个点亮,逐个熄灭
*/
int BASE = 6 ;
int NUM = 8;
void setup()
{
for (int i = BASE; i < BASE + NUM; i ++)
{
pinMode(i, OUTPUT);
}
}
void loop()
{
for (int i = BASE; i < BASE + NUM; i ++)
{
digitalWrite(i, LOW);
delay(200);
}
for (int i = BASE; i < BASE + NUM; i ++)
{
digitalWrite(i, HIGH);
delay(200);
}
} 测试独立按键部分+跑马灯部分
程序之六:测试独立按键部分+跑马灯部分,按键控制跑马灯
/*
【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
实验一百四十:YL-004老款20按键独立键盘 跑马灯矩阵键盘模块
程序之六:测试独立按键部分+跑马灯部分,按键控制跑马灯
*/
int buttonPin = 2 ; // 定义按键引脚
int BASE = 6; // 定义第一个LED引脚
int NUM = 8; // LED 的总数
int val;
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
for (int i = BASE; i < BASE + NUM; i ++)
{
pinMode(i, OUTPUT); // 设定LED引脚为输出引脚
}
}
void loop()
{
liangdeng(); // 循环亮灯子程序
delay(200); // 每次循环间隔时间
miedeng(); // LED全灭子程序
}
void liangdeng()
{
for (int i = BASE; i < BASE + NUM; i ++)
{
digitalWrite(i, LOW);//设定LED引脚逐个输出高电平逐个点亮
val = digitalRead(buttonPin); // 储存按键变换量
if (val == HIGH) //判断是否按下按键,弱已按下按键跳出当前循环
{
val = HIGH;
break;
}
delay(200); //延时
}
}
void miedeng()
{
for (int i = BASE; i < BASE + NUM; i ++)
{
digitalWrite(i, HIGH); //设定LED引脚逐个输出低电平逐个点亮
}
}
编玩边学开源图形编程
实验开源仿真编程(linkboy3.6)
页:
1
[2]