查看: 1718|回复: 0

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

[复制链接]
  • TA的每日心情

    2020-2-9 17:38
  • 签到天数: 330 天

    [LV.8]以坛为家I

    发表于 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]


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

    本版积分规则

    热门推荐

    《Color Unit免费申请试用》
    《Color Unit免费申请试用
    COLOR 是一款颜色识别 Unit,其内部集成TCS3472彩色光数字转换器,能够将其检测到颜色
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    求助帖,ESP01S介入WS2812B,无法让灯
    求助帖,ESP01S介入WS2812
    看抖音暴改车间着迷,但是无法调试出氛围灯,新手,有没有大神帮忙解决一下,感谢 上
    完美解决同步开关状态 ,小爱同学+app+本地按键控制状态...
    完美解决同步开关状态 ,
    你有没有发现app上面的按键在操作完毕后你就不知道开关的状态了;或者小爱操作完毕后
    DW542驱动器控制42步进电机
    DW542驱动器控制42步进电
    求一个范例,或者现成的代码,控制42步进电机,实现控制转台转动,要求可以控制转台转
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表