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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3926|回复: 0

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

[复制链接]
发表于 2018-9-15 10:44 | 显示全部楼层 |阅读模式
本帖最后由 AimHigh 于 2018-9-15 11:15 编辑

        教程四教大家如何写出delta并联机器人的串口通讯控制程序
    大家有了教程一到三的基础,串口控制的部分相对就比较简单,所以arduino常用的串口操作函数不多,常用的有串口设置函数Srial.begin()、Srial.end(),输出串口数据函数Srial.print()Srial.println(),读串口缓存区数据函数Srial.rend()Srial.available()等函数。
    串口通讯不需要用到其他硬件,只需要一根数据线即可,当然还需要串口监视器。本控制系统中串口对delta机器人通讯控制的工作流程图如下图所示: [sf]
                                                       1.JPG [/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]


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:43 , Processed in 0.076380 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表