openCR-用ROS代码控制按键的方法

//头文件 ros/ros.h 包含了标准 ROS 类的声明,你将会在每一个你写的 ROS 程序中包含它。
#include <ros.h>
//std_msgs中已经包含了所有的基本数据类型
#include <std_msgs/Byte.h>
//在创建时,如果一个内部节点没有被启动,节点句柄将启动该节点.
//一旦所有的节点句柄实例被销毁,那么节点将被自动关闭.    
ros::NodeHandle nh;
//定义一个相应数据类型的对象
std_msgs::Byte button_msg;
//指明发布的数据类型,话题和缓存队列大小
//声明发布者,话题名 = button
ros::Publisher pub_button("button", &button_msg);

void setup()
{
  nh.initNode();
  nh.advertise(pub_button);
//定义按键SW1和SW2的模式为输入
  pinMode(BDPIN_PUSH_SW_1, INPUT);
  pinMode(BDPIN_PUSH_SW_2, INPUT);
}

void loop()
{
//  reading的低8、7位为0
  uint8_t reading = 0;
//静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,
//以后每次调用静态局部变量的时候都用上次调用后的值。
  static uint32_t pre_time;

//功能:读取引脚电平状态;//形式:digitalRead(pin)//参数:pin://要读取的引脚返回值:HIGH或者LOW;
//检测到高电平,给reading赋新值
  if (digitalRead(BDPIN_PUSH_SW_1) == HIGH)
  {
//  reading的低8位为1
    reading |= 0x01;
  }
  if (digitalRead(BDPIN_PUSH_SW_2) == HIGH)
  {
//  reading的低7位为1
    reading |= 0x02;
  }

//millis()函数会返回一个值,该值代表当前cpu的时间
//可以用来定时,这样可以不用占用cpu时间
  if (millis()-pre_time >= 50)
  {
//将reading赋值给data
    button_msg.data = reading;
    pub_button.publish(&button_msg);
    pre_time = millis();
  }
//loop函数中,调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理
  nh.spinOnce();
}

  

转载于:https://www.cnblogs.com/kay2018/p/10016434.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值