eagler8 发表于 2020-2-28 16:19:55

程序之三:矩阵键盘部分测试按键'*'和 '#'控制LED灯(板载13脚)

/*
【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;
}
}

eagler8 发表于 2020-2-28 16:27:05


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

eagler8 发表于 2020-2-28 16:40:02

测试跑马灯部分接线示意图

eagler8 发表于 2020-2-28 16:42:27

幻生幻灭 发表于 2020-2-28 21:20:42

我连地板都没混上,楼主真是精力旺盛啊~都写了这么多教程。整理一下都可以出个传感器典集啦

eagler8 发表于 2020-2-29 09:42:07

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

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

eagler8 发表于 2020-2-29 09:43:40

程序之四:测试跑马灯部分,循环逐个点亮,逐个熄灭

/*
【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);
}
}

eagler8 发表于 2020-2-29 09:52:25

eagler8 发表于 2020-2-29 10:18:03

测试独立按键部分+跑马灯部分

eagler8 发表于 2020-2-29 10:44:04

程序之六:测试独立按键部分+跑马灯部分,按键控制跑马灯

/*
【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引脚逐个输出低电平逐个点亮
}
}

eagler8 发表于 2020-2-29 15:03:06

编玩边学开源图形编程

eagler8 发表于 2020-2-29 15:18:42

实验开源仿真编程(linkboy3.6)

页: 1 [2]
查看完整版本: 【Arduino】168种传感器模块系列实验(140)---跑马灯矩阵键...