极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: eagler8

【Arduino】168种传感器模块系列实验(140)---跑马灯矩阵键...

[复制链接]
 楼主| 发表于 2020-2-28 16:19:55 | 显示全部楼层
程序之三:矩阵键盘部分测试按键'*'和 '#'控制LED灯(板载13脚)

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十:YL-004老款20按键独立键盘 跑马灯矩阵键盘模块
  4.   程序之三:矩阵键盘部分测试按键'*'和 '#'控制LED灯(板载13脚)
  5. */

  6. #include <Keypad.h>

  7. const byte ROWS = 4; //四行
  8. const byte COLS = 3; //三列
  9. //定义键盘按钮上的符号
  10. char keys[ROWS][COLS] = {
  11.   {'1', '2', '3'},
  12.   {'4', '5', '6'},
  13.   {'7', '8', '9'},
  14.   {'*', '0', '#'}
  15. };

  16. byte rowPins[ROWS] = {2, 3, 4, 5}; //连接到键盘的行插脚
  17. byte colPins[COLS] = {6, 7, 8};  //连接到键盘的列插脚

  18. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
  19. byte ledPin = 13;

  20. boolean blink = false;
  21. boolean ledPin_state;

  22. void setup() {
  23.   Serial.begin(9600);
  24.   pinMode(ledPin, OUTPUT);              // 将数字管脚设置为输出
  25.   digitalWrite(ledPin, HIGH);           // 打开LED
  26.   ledPin_state = digitalRead(ledPin);   // 存储初始LED状态。当LED亮起时为高
  27.   keypad.addEventListener(keypadEvent); // 为此键盘添加事件侦听器
  28. }

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

  31.   if (key) {
  32.     Serial.println(key);
  33.   }
  34.   if (blink) {
  35.     digitalWrite(ledPin, !digitalRead(ledPin));   // 将LED引脚从Hi2Lo或Lo2Hi更改
  36.     delay(100);
  37.   }
  38. }

  39. // 处理一些特殊事件
  40. void keypadEvent(KeypadEvent key) {
  41.   switch (keypad.getState()) {
  42.     case PRESSED:
  43.       if (key == '#') {
  44.         digitalWrite(ledPin, !digitalRead(ledPin));
  45.         ledPin_state = digitalRead(ledPin);        // 记住LED状态,亮或不亮
  46.       }
  47.       break;

  48.     case RELEASED:
  49.       if (key == '*') {
  50.         digitalWrite(ledPin, ledPin_state);   // 从开始闪烁前恢复LED状态
  51.         blink = false;
  52.       }
  53.       break;

  54.     case HOLD:
  55.       if (key == '*') {
  56.         blink = true;    // 按住*键时,LED闪烁
  57.       }
  58.       break;
  59.   }
  60. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 16:27:05 | 显示全部楼层

'#'键控制LED灯自锁开关,'*'键按下时LED闪烁,松开熄灭

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 16:40:02 | 显示全部楼层
测试跑马灯部分接线示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 16:42:27 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2020-2-28 21:20:42 | 显示全部楼层
我连地板都没混上,楼主真是精力旺盛啊~都写了这么多教程。整理一下都可以出个传感器典集啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 09:42:07 | 显示全部楼层
幻生幻灭 发表于 2020-2-28 21:20
我连地板都没混上,楼主真是精力旺盛啊~都写了这么多教程。整理一下都可以出个传感器典集啦 ...

谢谢老师的鼓励,整理的实验记录都是基础性的,去年五月份才开始接触单片机,底子太差,只好先从简单的开始学起
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 09:43:40 | 显示全部楼层
程序之四:测试跑马灯部分,循环逐个点亮,逐个熄灭

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十:YL-004老款20按键独立键盘 跑马灯矩阵键盘模块
  4.   程序之四:测试跑马灯部分,循环逐个点亮,逐个熄灭
  5. */

  6. int BASE = 6 ;
  7. int NUM = 8;

  8. void setup()
  9. {
  10.   for (int i = BASE; i < BASE + NUM; i ++)
  11.   {
  12.     pinMode(i, OUTPUT);
  13.   }
  14. }

  15. void loop()
  16. {
  17.   for (int i = BASE; i < BASE + NUM; i ++)
  18.   {
  19.     digitalWrite(i, LOW);
  20.     delay(200);
  21.   }
  22.   for (int i = BASE; i < BASE + NUM; i ++)
  23.   {
  24.     digitalWrite(i, HIGH);
  25.     delay(200);
  26.   }
  27. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 09:52:25 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 10:18:03 | 显示全部楼层
测试独立按键部分+跑马灯部分

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 10:44:04 | 显示全部楼层
程序之六:测试独立按键部分+跑马灯部分,按键控制跑马灯

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料+代码+图形+仿真)
  3.   实验一百四十:YL-004老款20按键独立键盘 跑马灯矩阵键盘模块
  4.   程序之六:测试独立按键部分+跑马灯部分,按键控制跑马灯
  5. */

  6. int buttonPin = 2 ;   // 定义按键引脚
  7. int BASE = 6;        // 定义第一个LED引脚
  8. int NUM = 8;         // LED 的总数
  9. int val;

  10. void setup()
  11. {
  12.   Serial.begin(9600);
  13.   pinMode(buttonPin, INPUT);
  14.   for (int i = BASE; i < BASE + NUM; i ++)
  15.   {
  16.     pinMode(i, OUTPUT);   // 设定LED引脚为输出引脚
  17.   }
  18. }

  19. void loop()
  20. {
  21.   liangdeng();            // 循环亮灯子程序
  22.   delay(200);             // 每次循环间隔时间
  23.   miedeng();              // LED全灭子程序
  24. }

  25. void liangdeng()
  26. {
  27.   for (int i = BASE; i < BASE + NUM; i ++)
  28.   {
  29.     digitalWrite(i, LOW);  //设定LED引脚逐个输出高电平逐个点亮
  30.     val = digitalRead(buttonPin);   // 储存按键变换量
  31.     if (val == HIGH)          //判断是否按下按键,弱已按下按键跳出当前循环
  32.     {
  33.       val = HIGH;
  34.       break;
  35.     }
  36.     delay(200);        //延时
  37.   }
  38. }

  39. void miedeng()
  40. {
  41.   for (int i = BASE; i < BASE + NUM; i ++)
  42.   {
  43.     digitalWrite(i, HIGH);    //设定LED引脚逐个输出低电平逐个点亮
  44.   }
  45. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 15:03:06 | 显示全部楼层
编玩边学开源图形编程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 15:18:42 | 显示全部楼层
实验开源仿真编程(linkboy3.6)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-29 07:09 , Processed in 0.042511 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表