基于arduino uno的delta并联机器人控制系统设计教程四-Arduino中文社区 - Powered by Discuz! Archiver

AimHigh 发表于 2018-9-15 10:44

基于arduino uno的delta并联机器人控制系统设计教程四

本帖最后由 AimHigh 于 2018-9-15 11:15 编辑

      教程四教大家如何写出delta并联机器人的串口通讯控制程序
    大家有了教程一到三的基础,串口控制的部分相对就比较简单,所以arduino常用的串口操作函数不多,常用的有串口设置函数Srial.begin()、Srial.end(),输出串口数据函数Srial.print()、Srial.println(),读串口缓存区数据函数Srial.rend()、Srial.available()等函数。
    串口通讯不需要用到其他硬件,只需要一根数据线即可,当然还需要串口监视器。本控制系统中串口对delta机器人通讯控制的工作流程图如下图所示:
                                                      
            因此,对于delta机器人的串口通讯程序如下:
#include <Servo.h>
Servo myservo1,myservo2,myservo3;
String comdata = "";
int numdata = {0}, mark = 0,mark1 = 0;//来判断是否有"-"负号存在。
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=numdata*10 - (comdata - '0');
   // numdata =0-numdata;//在执行此"else if"循环最后一条指令时,将数值转换为负值
   }
   else
   {
      numdata=numdata * 10 + (comdata - '0');
   }
    }
   }//if(comdata == ',')的else结尾
   }//for(int i = 0; i < comdata.length()-1 ; i++)的结尾
    comdata = String("");
    if(numdata==0)
    {
      int xe=numdata;
      int ye=numdata;
      int ze=numdata;
      int t=numdata;
      chabu_line(xm,ym,zm,xe,ye,ze,t);
      delay(2);
      xm=xe;
      ym=ye;
      zm=ze;
      }
    else if(numdata==1)
    {
      int xe=numdata;
      int ye=numdata;
      int ze=numdata;
      int =numdata;
      int y0=numdata;
      int SN=numdata;
      int t=numdata;
      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;
}
}


页: [1]
查看完整版本: 基于arduino uno的delta并联机器人控制系统设计教程四