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/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |