c++实战项目

核心提示简介:设计舵机控制的上位机和运行在舵机控制板中的下位机代码,实现联动控制舵机。下面展现效果:项目效果项目开发环境: Visual Studio 2017 / Arduino IDE开发语言: C#/Cdemo功能:1:设计上位机,使得用户在

简介:设计舵机控制的上位机和运行在舵机控制板的下位机的代码,实现舵机的联动控制。

显示如下效果:

项目效果

开发环境:Visual Studio 2017/Arduino IDE

语言:C#/C

演示功能:

1.设计上位机,使用户可以拖动其界面中的滑块,并通过串口向单片机控制板发送指令。

2.在MCU控制板中设计固件程序,接收并解析来自上位机的串行命令,根据命令控制舵机运动。

3.这里的MCU控制板采用的是自己设计的一块arduino板,其他MCU板也可以,主要是了解它的通信原理。

以下源代码截图:

部分上位机源代码截图:

界面实现代码实现代码

还有一些下位机的源代码截图:

arduino实现代码arduino实现代码

上位机要注意串口的设置。demo设计比较简单,只实现了原理。在舵机控制方面,有多种玩法,包括将指定动作写入控制板,保存在芯片flash中实现回放;您也可以在线编辑行动组;舵机控制板也可以用stm32或51单片机设计电路和程序。

下面是源代码:

上位机源代码:

使用系统;

使用系统。集合。泛型;

使用系统。组件模型;

使用系统。数据;

使用系统。绘图;

使用系统。Linq

使用系统。文本;

使用系统。线程。任务;

使用系统。Windows . Forms

命名空间舵机图形主机软件

{

公共分部类Form1 : Form

{

公共表单1

{

InitializeComponent

}

bool buttonstatus = false

私有void按钮1_Click

{

尝试

{

如果

{

串行端口1。PortName = textBox3。Text . ToString//设置端口号

串行端口1。BaudRate =转换。ToInt32//设置波特率

串行端口1。开放;//打开串口

buttonstatus = true

面板1。BackColor =颜色。蓝色;

定时器1。Enabled = true

1.button = "关闭串口";

}

其他

{

串行端口1。关闭;//打开串口

buttonstatus = false

面板1。BackColor =颜色。红色;

定时器1。Enabled = false

1.button = "打开串口";

}

}

捕捉

{

MessageBox。展示;

}

}

私有空定时器1_Tick

{

串行端口1。write+" r n ");

串行端口1。write+" r n ");

文本框1。Text = trackBar1。Value . ToString

文本框2。Text = trackBar2。Value . ToString

}

}

}

下位机arduino源代码:

#包括

//定义转向器

伺服myservo2

伺服myservo3

int com data[8];//串口信息数组接收

int counter = 0;//串行计数器

电机内部;//定义舵号

int pwm

//转向器中值的定义

int compare2 = 1500

int compare3 = 1500

//串口接收数据位定义

int data _ 1;

int data _ 2;

int data _ 3;

int data _ 4;

int data _ 5;

int data _ 6;

int data _ 7;

int数据;

int标志;//串口接收标志位

无效设置{

//将您的安装代码放在这里,运行一次:

//舵机和串口配置

Serial.begin

my servo 2 . attach;

my servo 3 . attach;

}

无效循环{

//将您的主代码放在这里,以便重复运行:

While > 0) //串口接收数据时

{

comdata[counter]=);//读取数据

If )//判断数据帧的报头

{

flag = 1;//将接收标志位置1

}

如果

{

如果//判断何时接收到第一位数据

{

//判断舵号

如果

{

电机= 2;

}

否则如果

{

电机= 3;

}

}

//开始判断并求解舵机的运动参数。

如果

{

data _ 1 = com data[counter]-0x 30;

}

如果

{

data _ 2 = com data[counter]-0x 30;

}

如果

{

data _ 3 = com data[counter]-0x 30;

}

如果

{

data _ 4 = com data[counter]-0x 30;

}

如果

{

data _ 5 = com data[counter]-0x 30;

}

如果

{

//开始计算舵机的运动参数。

data _ 6 = com data[counter]-0x 30;

数据=数据_ 1 * 100000+数据_ 2 * 10000+数据_ 3 * 1000+数据_ 4 * 100+数据_ 5 * 10+数据_ 6;

flag = 0;

//用相应的数字开始舵机的打角。

如果

{

compare2 =数据;

my servo 2 . write微秒;

}

如果

{

compare3 =数据;

my servo 3 . write微秒;

}

计数器= 0;

goto aa

}

counter++;

aa:;

}

}

}

 
友情链接
鄂ICP备19019357号-22