3.学会使用按键-GPIO输入
写在前面
- 当前平台文章汇总地址:ROS2机器人从入门到实战
- 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
- 教程配套机器人开发平台:两驱版| 四驱版
- 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn
你好,我是爱吃鱼香ROS的小鱼。上一节完成了LED灯的控制,本节我们学习下如何使用按键。
一、 按键检测原理
上面的原理图就是我们MicroROS开发板的BOOT按键的原理图,该按键的位置在板子的左下角。
简单的看下原理图可知
- 当
BOOT
按下时,1,2就被联通了,此时ESP_IO2
就连接到了GND
上,也就是连接到GND
,ESP_IO2
的电平被拉低了。 - 当
BOOT
没有按下时,ESP_IO0
通过R10
连接到了3.3V
,ESP_IO2
引脚上的电压就被拉高了。
二、 使用按键控制LED灯(按着开松开关)
新建example03_key
工程,在main.cpp
输入代码。
/**
* @file main.cpp
* @author [email protected]
* @brief 使用按键控制LED灯,按着开,松开关
* @version 0.1
* @date 2022-12-19
*
* @copyright Copyright (c) 2022
*
*/
#include <Arduino.h>
void setup()
{
Serial.begin(115200);
pinMode(0, INPUT); // 设置2号引脚模式为OUTPUT模式
pinMode(2, OUTPUT); // 设置2号引脚模式为OUTPUT模式
}
void loop()
{
if (digitalRead(0) == LOW)
{
Serial.println("LED ON");
digitalWrite(2, LOW); // 低电平,打开LED灯
}
else
{
Serial.println("LED OFF");
digitalWrite(2, HIGH); // 高电平,关闭LED灯
}
}
接着将代码编译烧录到开发板上,按下按键,查看LED灯。
三、使用按键控制LED(自锁开关)
所谓自锁,就是按下开,再按一下关,看一下代码实现
/**
* @file main.cpp
* @author [email protected]
* @brief 使用按键控制LED灯,按着开,松开关,自锁开关
* @version 0.1
* @date 2022-12-19
*
* @copyright Copyright (c) 2022
*
*/
#include <Arduino.h>
bool status = false;
void setup()
{
Serial.begin(115200);
pinMode(0, INPUT); // 设置2号引脚模式为OUTPUT模式
pinMode(2, OUTPUT); // 设置2号引脚模式为OUTPUT模式
}
void loop()
{
// 自锁开关
if (digitalRead(0) == LOW)
{
delay(50); // 休眠50ms再次判断,防止误触
if (digitalRead(0) == LOW)
{
status = !status;
while (digitalRead(0) == LOW) // 死循环等待放开按键
;
}
}
if (status == true)
{
digitalWrite(2, LOW); // 低电平,打开LED灯
}
else
{
digitalWrite(2, HIGH); // 低电平,打开LED灯
}
/*
// 按着开,松开关
if (digitalRead(0) == LOW)
{
Serial.println("LED ON");
digitalWrite(2, LOW); // 低电平,打开LED灯
}
else
{
Serial.println("LED OFF");
digitalWrite(2, HIGH); // 高电平,关闭LED灯
}
*/
}
这里稍微复杂一些,当按键按下时我们需要休眠50ms,防止误触,接着反置状态,等待按键松开。
将代码下载到开发板,按下按键,测试一下。
四、总结
本节我们通过学习按键的使用,掌握了GPIO的输入,下一节我们将尝试进阶使用DAC,测量电池的电。