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的版图如下:
利用串口调试工具就可以实现指定角度的转动了
利用arduino控制单个电机