首页 > 其他分享 >【ROS2机器人入门到实战】学会使用按键-GPIO输入

【ROS2机器人入门到实战】学会使用按键-GPIO输入

时间:2023-09-04 18:02:24浏览次数:50  
标签:LED OUTPUT digitalWrite LOW 按键 GPIO Serial ROS2


3.学会使用按键-GPIO输入

写在前面

  1. 当前平台文章汇总地址:ROS2机器人从入门到实战
  2. 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
  3. 教程配套机器人开发平台:两驱版| 四驱版
  4. 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

你好,我是爱吃鱼香ROS的小鱼。上一节完成了LED灯的控制,本节我们学习下如何使用按键。

一、 按键检测原理

【ROS2机器人入门到实战】学会使用按键-GPIO输入_按键

上面的原理图就是我们MicroROS开发板的BOOT按键的原理图,该按键的位置在板子的左下角。

【ROS2机器人入门到实战】学会使用按键-GPIO输入_GPIO输入_02

简单的看下原理图可知

  • BOOT按下时,1,2就被联通了,此时ESP_IO2就连接到了GND上,也就是连接到GNDESP_IO2的电平被拉低了。
  • BOOT没有按下时,ESP_IO0通过R10连接到了3.3VESP_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,测量电池的电。


标签:LED,OUTPUT,digitalWrite,LOW,按键,GPIO,Serial,ROS2
From: https://blog.51cto.com/u_15473553/7353821

相关文章

  • 【ROS2机器人入门到实战】嵌入式开发之从点灯开始
    第十三章嵌入式开发之从点灯开始写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是小鱼。本章开始我们将一起走进机......
  • 【ROS2机器人入门到实战】使用开源库驱动IMU
    2.使用开源库驱动IMU写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节我们安装好了MPU605......
  • STM32深入学习3:GPIO模块控制LED(寄存器版)
    GPIO模块数据手册详解:GPIO:通用输入/输出AFIO:备用输入/输出GPIOx_CRL和GPIOx_CRH:配置寄存器GPIOx_IDR和GPIOx_ODR:数据寄存器GPIOx_BSRR:置位/复位寄存器GPIOx_BRR:复位寄存器GPIOx_LCKR:锁定寄存器,锁定GPIO的数值GPIO模式:1.输入浮动:完全由外部决定2.输入上拉和输入下拉:存在......
  • GPIO各类函数的使用
    参考:https://lwn.net/Articles/532714/内核中,系统中的每个GPIO都由一个简单的无符号整数表示。一般板子上有几百个GPIO引脚 GPIO必须在使用前进行分配,但当前的实现并未强制执行此要求。基本分配函数为:intgpio_request(unsignedintgpio,constchar*label);gpio......
  • regulator-fixed and regulator-gpio
    1、regulator-fixed作用:创建一个固定的regulator。一般是一个GPIO控制了一路电,只有开(enable)\关(disabled)两种操作device-treenodeio_vdd_en:regulator-JW5217DFND{ compatible="regulator-fixed"; pinctrl-names="default"; pinctrl-0=<&io_vdd_en_pin......
  • 各按键对应keycode一览表
    keycode   8=BackSpaceBackSpacekeycode   9=TabTabkeycode  12=Clearkeycode  13=Enterkeycode  16=Shift_Lkeycode  17=Control_Lkeycode  18=Alt_Lkeycode  19=Pausekeycode  20=Caps_Lockkeycode  27=EscapeEscapeke......
  • 15 Linux 按键深入实验
    一、Linux按键驱动原理  其实案件驱动和LED驱动很相似,只不过区别在于,一个是读取GPIO高低电平,一个是从GPIO输出高低电平。  在驱动程序中使用一个整形变量来表示按键值,应用程序通过read函数来读取按键值,判断按键有没有按下。在这里,这个保存按键值的变量就是个共享资源,驱......
  • 迅为RK3568开发板GPIO之外接模块
     在迅为RK3568开发板上有一组GPIO,可以用来外接各种外设模块,从面实现一系列好玩的功能,一起来看看各个模块合集吧    RFID模块:工作电流:13—20mA/直流3.3V空闲电流:10-13mA/直流3.3V休眠电流:<80UA峰值电流:<30mA工作频率:13.56MHz支持的卡类型:mifare1 S50.mifare1 S70.mif......
  • 1.2 STM32的GPIO
    一、GPIO的8种输入输出模式:1.输入:GPIO_Mode_AIN   // 模拟输入:用于ADC   GPIO_Mode_IN_FLOATING  //浮空输入GPIO_Mode_IPD   //下拉输入GPIO_Mode_IPU  //上拉输入2.输出:GPIO_Mode_Out_OD  //开漏输出GPIO_Mode_Out_PP......
  • 【STM32】2_0 GPIO
    注:凡是有FT标志的,都是兼容5V电平的IO口,可以直接接5V的外设(注意:如果引脚设置的是模拟输入模式,则不能接5V!,凡是不带FT标志的,不可与无5V链接,可能烧坏MCU。根据数据手册中列出的每个I/O端口的特性,可通过软件将通用I/O(GPIO)端口的各个端口位分别配置为多种模式:●......