基于ROS使用Arduino控制数码管

1. 硬件

Arduino控制板:1个;

数码管:1个;

杜邦线:若干;

1.1 接线方式

参考如下方式:

实物连接图:

 注意:数码管有两种接法,共阴数码管在应用时应将公共极接到GND或者5V。

来张实际的照片(略麻烦):

2 程序

#include <ros.h>
#include <std_msgs/Int16.h>


//设置控制各段的数字IO 脚
int a=7;//定义数字接口7 连接a 段数码管
int b=6;// 定义数字接口6 连接b 段数码管
int c=5;// 定义数字接口5 连接c 段数码管
int d=10;// 定义数字接口10 连接d 段数码管
int e=11;// 定义数字接口11 连接e 段数码管
int f=8;// 定义数字接口8 连接f 段数码管
int g=9;// 定义数字接口9 连接g 段数码管
int dp=4;// 定义数字接口4 连接dp 段数码管
void digital_0(void) //显示数字5
{
unsigned char j;
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(dp,HIGH);
}
void digital_1(void) //显示数字1
{
unsigned char j;
digitalWrite(c,LOW);//给数字接口5 引脚高电平,点亮c 段
digitalWrite(b,LOW);//点亮b 段
for(j=7;j<=11;j++)//熄灭其余段
digitalWrite(j,HIGH);
digitalWrite(dp,HIGH);//熄灭小数点DP 段
}
void digital_2(void) //显示数字2
{
unsigned char j;
digitalWrite(b,LOW);
digitalWrite(a,LOW);
for(j=9;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
digitalWrite(c,HIGH);
digitalWrite(f,HIGH);
}
void digital_3(void) //显示数字3
{
digitalWrite(g,LOW);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(dp,HIGH);
digitalWrite(f,HIGH);
digitalWrite(e,HIGH);
}
void digital_4(void) //显示数字4
{
digitalWrite(c,LOW);
digitalWrite(b,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
digitalWrite(a,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
}
void digital_5(void) //显示数字5
{
unsigned char j;
digitalWrite(a,LOW);
digitalWrite(b, HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e, HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}
void digital_6(void) //显示数字6
{
unsigned char j;
for(j=7;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(c,LOW);
digitalWrite(dp,HIGH);
digitalWrite(b,HIGH);
}
void digital_7(void) //显示数字7
{
unsigned char j;
for(j=5;j<=7;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
for(j=8;j<=11;j++)
digitalWrite(j,HIGH);
}
void digital_8(void) //显示数字8
{
unsigned char j;
for(j=5;j<=11;j++)
digitalWrite(j,LOW);
digitalWrite(dp,HIGH);
}
void digital_9(void) //显示数字5
{
unsigned char j;
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e, HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(dp,HIGH);
}

void messageCb(std_msgs::Int16 message)
{
  int temp_message = message.data;
  switch(temp_message)
  {
    case 0:
      digital_0();
      break;
    case 1:
      digital_1();
      break;
    case 3:
      digital_3();
      break;
    case 4:
      digital_4();
      break;
    case 5:
      digital_5();
      break;
    case 6:
      digital_6();
      break;
    case 7:
      digital_7();
      break;
    case 8:
      digital_8();
      break;
    case 9:
      digital_9();
      break;
    case 2:
      digital_2();
      break;
    }
  
  }
ros::NodeHandle nh;
ros::Subscriber<std_msgs::Int16> sub("chatter",&messageCb);

void setup(){
  nh.initNode();
  nh.subscribe(sub);
  int i;//定义变量
  for(i=4;i<=11;i++)
    pinMode(i,OUTPUT);//设置4~11 引脚为输出模式
}
  
void loop(){
    nh.spinOnce();
}

2.1 程序下载和运行

首先:roscore

其次:rosrun rosserial_python serial_node.py /dev/ttyACM0

/dev/ttyACM0  这个是自己的端口号

最后:rostopic pub -1 /buzzer_msgs/Int8 1

来张图片:

猜你喜欢

转载自blog.csdn.net/qq_27806947/article/details/83419489
今日推荐