单个舵机串口控制

Arduino利用串口控制舵机

其中有些教训 舵机的接线 接错了,烧坏了舵机 千万不能把信号线和地线接错了。
正确的接线如下
单个舵机串口控制_第1张图片

具体代码如下:

int i,val;
char a[3];
boolean output_flag;
#include 
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的版图如下:

利用串口调试工具就可以实现指定角度的转动了
单个舵机串口控制_第2张图片

利用arduino控制单个电机

你可能感兴趣的:(电子)