#include<Servo.h>
Servo servo1; //定义了三个舵机,servo1,servo2,servo3
Servo servo2;
Servo servo3;
void setup()
{
servo1.attach(8); //舵机servo1,servo2,servo3分别接在8,9,10三个脚上
servo2.attach(9);
servo3.attach(10);
Serial.begin(9600); //串口波特率 9600
}
void loop()
{
static int angle=0; //变量angle,代表舵机转过的角度
if(Serial.available()) //条件:串口有数据
{char ch=Serial.read(); //将读入的每一位,赋值给变量ch
switch(ch) //多分支选择
{
case'0'...'9': //如果ch是数字 '0' - '9' ; “...”这种用法没见过,有机会得测试下。常规写法应该是:
// case '0':
// case '1':
// case '2':
// case '3':
// case '4':
// case '5':
// case '6':
// case '7':
// case '8':
// case '9':
angle =angle*10+ch-'0'; //将串口得到的数字,转换成角度:例如输入的是91a。
// angle=0*10+9=9; //ch-'0'就是将ascii马转换成数值,即 '9' - '0' = 9;
// angle=9*10+1=91;
//再下一个字符是'a',不是'0' - '9'范围内的数,此计算分支结束;
break;
case'a': //如果字符是'a',让servo1动; 角度当然是字母a前面的数值;
servo1.write(angle);
angle=0 //(这里少了一个' ;')把angle清零,用来存储下一次输入的角度;
break;
case'b': //如果字符是'b',让servo2动; 角度当然是字母b前面的数值;
servo2.write(angle);
angle=0;
break;
case'c': //如果字符是'c',让servo3动; 角度当然是字母c前面的数值;
servo3.write(angle);
angle=0;
break;
}
}
} |