【Arduino】按键按下执行不同模式程序

程序可直接复制到 Arduino IDE 运行,不需要额外添加其他库文件。

按键原理图如下:

  • 原理图所接按键与示例程序不一致,原理图演示的为 D2 引脚,程序为 A0 引脚。
  • 电阻 R1 的阻值,示例程序所用的为 1K 欧姆。
    在这里插入图片描述
  • 程序名称:按键测试程序
  • 程序功能:按下按键程序执行不同脚本,并通过串口显示程序执行模式
  • 示例程序:示例程序为 4 种模式,可任意进行修改,支持 0~9 种模式
  • 程序版本:Ver 1.0
  • 编写日期:2020/07/30
  • 作者信息:天津科技大学创新实验室-JC
/******************************************************************
* 程序名称:按键测试程序
* 程序功能:按下按键程序执行不同脚本,并通过串口显示程序执行模式
* 示例程序:示例程序为 4 种模式,可任意进行修改,支持 0~9 种模式
* 程序版本:Ver 1.0
* 编写日期:2020/07/30
* 作者信息:天津科技大学创新实验室-JC
******************************************************************/

#define   MODE A0   // 按键连接引脚

int KeyNum = 1;     // 初识执行状态

void setup() {
  // put your setup code here, to run once:
pinMode(MODE,INPUT);
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(MODE) == 1) {               // 如果检测到按键按下
    delay(500); KeyNum ++; delay(500);        // 执行模式 +1
    if (KeyNum>=5) {                          // 如果超过设定执行状态数量,那么就回到 1 号模式
      KeyNum = 1;
      }
    }
  switch(KeyNum){
    case 1:Serial.println("现在进入了 1 号执行模式");break;
    case 2:Serial.println("现在进入了 2 号执行模式");break;
    case 3:Serial.println("现在进入了 3 号执行模式");break;
    case 4:Serial.println("现在进入了 4 号执行模式");break;
    default: Serial.println("程序异常");break;
  }
}
Ref
  1. arduino学习笔记6 - 按键实验
Arduino中使用一个按键控制多种模式通常涉及中断处理和状态机设计。通过连接一个按键Arduino的数字输入引脚,你可以编写程序使得每当按下或释放这个按键时,会触发不同的操作或进入不同的工作模式。 以下是一个基本步骤: 1. **硬件连接**:将按键连接到Arduino的INPUT引脚,并确保接好电源和地线。 2. **初始化**:在代码里初始化按键输入,设置它的中断功能,并配置回调函数来响应按键事件。 3. **定义状态**:创建几个状态变量,如常量或枚举,代表不同的工作模式,比如"模式A"、"模式B"等。 4. **编写状态机器**:当按键被按下时,改变当前的状态并执行对应于新状态的操作;松开按键则可能回到前一个状态或进行切换条件下的操作。 5. **处理按键事件**:在中断服务函数中检查按键状态变化,更新状态变量并调用相应的函数来执行特定动作。 6. **执行模式函数**:每个状态都关联一个函数,该函数包含了在该模式执行的具体任务。 例如: ```cpp enum Mode { MODE_A, MODE_B }; Mode currentMode = MODE_A; void setup() { pinMode(kbtnPin, INPUT_PULLUP); // 按键引脚设置为上拉 attachInterrupt(digitalPinToInterrupt(kbtnPin), buttonHandler, FALLING); } void loop() { switch (currentMode) { case MODE_A: // 执行模式A的任务 break; case MODE_B: // 执行模式B的任务 break; } } void buttonHandler() { if (digitalRead(kbtnPin) == LOW) { // 按键按下 if (currentMode == MODE_A) { currentMode = MODE_B; // 切换到模式B } else { currentMode = MODE_A; // 回到模式A } } } ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值