单个舵机串口控制

本文介绍了如何使用Arduino通过串口控制舵机,强调了接线错误可能导致舵机损坏,并提供了正确接线方法和控制代码,同时展示了arduino板图,借助串口调试工具可以实现舵机指定角度转动。
摘要由CSDN通过智能技术生成

Arduino利用串口控制舵机

其中有些教训 舵机的接线 接错了,烧坏了舵机 千万不能把信号线和地线接错了。
正确的接线如下
这里写图片描述

具体代码如下:

int i,val;
char a[3];
boolean output_flag;
#include <Servo.h>
Servo servo1;
void setup()
{
  Serial.begin(115200);
  servo1.attach(7);//舵机一接pin4
}
void loop()
{
  if (Serial.available())
  {    
    //如果有数据输入.....
    delay(30);                    //等待30毫秒让所有输入数据从串口传输完毕.....
    if (Serial.available() <= 3)
    { 
       //如果输入数据位数'<=3'.....
      while (Serial.available())
      { 
        //开始读取数据直到[串口输入缓存被清空]
        a[i++] = Serial.read();   //读取数据到[数组"a"]
      }
      output_flag = 1;                    //数据读取完毕以后'打开'显示输出开关
    }
    else 
    {                        //如果输入数据位数'>3'.....
      Serial.flush();             //刷新串口输入缓存
    }
  }

  //=======================通过加减符号控制舵机增减一度转动=================//
  if (a[0] == 43 && output_flag)
  {
    val++;
    servo1.write(val);
    Serial.println(val);
    output_flag = 0;                  //显示完毕'关闭'显示输出开关
    Serial.flush();               //刷新串口输入缓存
    for (i = 0; i <= 3; i++)      //重置[数组"a"]
    {
      a[i] = 0;
    }
    i = 0;                        //重置"计数变量"
  }
  if (a[0] == 45 && output_flag)
  {
      val--;
      servo1.write(val);
      Serial.println(val);
      output_flag = 0;                  //显示完毕'关闭'显示输出开关
      Serial.flush();               //刷新串口输入缓存
      for (i = 0; i <= 3; i++)      //重置[数组"a"]
      {
        a[i] = 0;
      }
      i = 0;                        //重置"计数变量"
  }
  if (output_flag)                    //如果[显示输出开关]被'打开'则显示[数组"a"]的数据
  {
     //如果输入数据为两位数(最后一位空)
     if (!a[2])
     {
       //如果输入数据为一位数(最后两位空)
       if (!a[1])
       {
         a[2] = a[0];
         a[1] = 48;
         a[0] = 48;
        }
       else 
       {
         a[2] = a[1];
         a[1] = a[0];
         a[0] = 48;
       }
     }
  //==============转换变量类型后输出给舵机且通过串口返回结果值==============
    for (i=0;i<=3;i++)
    { 
      //变量类型:char to int (48为0的ASCII)
      a[i] -= 48;
    }
    val = 100*a[0] + 10*a[1] + a[2];
    if(val > 180)
    {
      Serial.println(val);
      Serial.println("error data \n");
    }
    else
    {
      servo1.write(val);
      Serial.println(val);
    }
    output_flag = 0;                  //显示完毕'关闭'显示输出开关
    Serial.flush();               //刷新串口输入缓存
    for (i = 0; i <= 3; i++)      //重置[数组"a"]
    {
      a[i] = 0;
    }
    i = 0;                        //重置"计数变量"
  }
}

arduino的版图如下:
求是07
利用串口调试工具就可以实现指定角度的转动了
这里写图片描述

利用arduino控制单个电机

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道亦无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值