zoukankan      html  css  js  c++  java
  • 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();
    }
    

      

    作者:kay
    出处:https://www.cnblogs.com/kay2018/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Java核心技术
    浏览器地址栏输入url回车之后发生了些什么
    Java相关面试题总结+答案(十)
    Java相关面试题总结+答案(九)
    Java相关面试题总结+答案(八)
    Java相关面试题总结+答案(七)
    input type=‘file’方法
    禁止用户复制网页内容
    js添加背景水印
    angular双向绑定
  • 原文地址:https://www.cnblogs.com/kay2018/p/10016434.html
Copyright © 2011-2022 走看看