|
本帖最后由 AimHigh 于 2018-9-15 11:15 编辑
教程四教大家如何写出delta并联机器人的串口通讯控制程序
大家有了教程一到三的基础,串口控制的部分相对就比较简单,所以arduino常用的串口操作函数不多,常用的有串口设置函数Srial.begin()、Srial.end(),输出串口数据函数Srial.print()、Srial.println(),读串口缓存区数据函数Srial.rend()、Srial.available()等函数。
串口通讯不需要用到其他硬件,只需要一根数据线即可,当然还需要串口监视器。本控制系统中串口对delta机器人通讯控制的工作流程图如下图所示: [sf]
[/sf]
因此,对于delta机器人的串口通讯程序如下:
#include <Servo.h>
Servo myservo1,myservo2,myservo3;
String comdata = "";
int numdata[9] = {0}, mark = 0,mark1 = 0;//来判断是否有"-"负号存在。[sf]
int xm=0,ym=0,zm=-290;
void setup()
{
myservo1.attach(9);
myservo2.attach(10);
myservo3.attach(11);
Serial.begin(9600);
}
void loop()
{
myservo1.write(nijie1(75,25,90,300,xm,ym,zm));
myservo2.write(nijie2(75,25,90,300,xm,ym,zm));
myservo3.write(nijie3(75,25,90,300,xm,ym,zm));
int j = 0;
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
mark = 1;
}
if(mark == 1)
{
Serial.println(comdata);
Serial.println(comdata.length());
for(int i=0;i<comdata.length()-1; i++)
{
if(comdata == ',')
{
j++;
mark1=0;//读取到','时,将mark1恢复到0值,便于下个字符是"-"时,赋予"1"
}
else
{
if(comdata=='-')
{
mark1=1;//判断是否有负号"-"
}
else
{
if(mark1==1)
{
numdata[j]=numdata[j]*10 - (comdata - '0');
// numdata[j] =0-numdata[j];//在执行此"else if"循环最后一条指令时,将数值转换为负值
}
else
{
numdata[j]=numdata[j] * 10 + (comdata - '0');
}
}
}//if(comdata == ',')的else结尾
}//for(int i = 0; i < comdata.length()-1 ; i++)的结尾
comdata = String("");
if(numdata[0]==0)
{
int xe=numdata[1];
int ye=numdata[2];
int ze=numdata[3];
int t=numdata[8];
chabu_line(xm,ym,zm,xe,ye,ze,t);
delay(2);
xm=xe;
ym=ye;
zm=ze;
}
else if(numdata[0]==1)
{
int xe=numdata[1];
int ye=numdata[2];
int ze=numdata[3];
int =numdata[4];
int y0=numdata[5];
int SN=numdata[7];
int t=numdata[8];
chabu_circle(xm,ym,zm,x0,y0,z0,angle,h,SN,t);
delay(2);
xm=xe;
ym=ye;
zm=ze;
}
for(int i=0;i<9;i++)
{
Serial.print(" = ");
Serial.println(numdata);
numdata = 0;
}
mark = 0;
}
}[/sf]
|
|