舵机控制的程序求解~
本帖最后由 乐_乐(顺) 于 2012-11-21 09:50 编辑实验代码如下:
#i nclude <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
void setup()
{
servo1.attach(8);//定义舵机控制口
servo1.setMaximumPulse(2200);//定义180度的脉冲宽度,最大2400微秒
servo2.attach(9);
servo2.setMaximumPulse(2200);
servo3.attach(10);
servo3.setMaximumPulse(2200);
Serial.begin(19200);//设置波特率
Serial.print("Ready");
}
void loop()
{
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();//读取串口数据
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';//字符换算成10进制
break;
case 'a'://如果数据后带a,则表示是servo1的数据,比如串口发送85a
servo1.write(v);
v = 0;
break;
case 'b'://如果数据后带b,则表示是servo2的数据,比如串口发送90b
servo2.write(v);
v = 0;
break;
case 'c'://如果数据后带c ,则表示是servo3的数据,比如串口发送180c
servo3.write(v);
v = 0;
break;
}
}
Servo::refresh();//刷新
}
这个是网上看到的舵机控制程序,中间有段程序不是很明白,所以请教各位~~
一、 char ch = Serial.read();//读取串口数据
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';//字符换算成10进制
问题:读取用户输入的数据比如90a(让SERVO1转90度),为什么要转换成10进制?最后2条程序没看懂~~~
二、static int v = 0;
问题:上面的static 在ARDUINO中是静态变量,静态变量是什么意思?能否直接定义INT V=0? 我是这么理解的 ~
1/串口发出的数据是字符的形式,而控制舵机是通过调节0-255 占空比,是以十进制的形式,所以要进行十进制的转换.
2/static 静态变量,要是不加的话,接受到串口的数据,V的值就会改变,而且到下次循环的话还是上一个循环的值,会继续执行旧值程序.所以要加这个静态变量.
我自己的理解 欢迎指正~
我是这么理解的 ~
1/串口发出的数据是字符的形式,而控制舵机是通过调节0-255 占空比,是以十进制的形式,所以要进行十进制的转换.
2/static 静态变量,要是不加的话,接受到串口的数据,V的值就会改变,而且到下次循环的话还是上一个循环的值,会继续执行旧值程序.所以要加这个静态变量.
我自己的理解 欢迎指正~
100a200b,这样的格式 四九零二 发表于 2012-11-21 21:23 static/image/common/back.gif
我是这么理解的 ~
1/串口发出的数据是字符的形式,而控制舵机是通过调节0-255 占空比,是以十进制的形式,所 ...
Case '0'...'9'的意思是什么呢? 假如是输入80a,一开始v=0,首先检测到8,则v=8,继续检测到0,则v=v*10+‘ch’-‘0’=8*10+0=80,把字符80a转成十进制80。 混球 发表于 2012-11-29 13:27 static/image/common/back.gif
假如是输入80a,一开始v=0,首先检测到8,则v=8,继续检测到0,则v=v*10+‘ch’-‘0’=8*10+0=80,把字符80 ...
明白了大部分,那'CH'-'0',后面的'0'有什么用处呢?没有貌似也行啊? 本帖最后由 混球 于 2012-11-30 15:48 编辑
乐_乐(顺) 发表于 2012-11-29 19:42 static/image/common/back.gif
明白了大部分,那'CH'-'0',后面的'0'有什么用处呢?没有貌似也行啊?
‘0’代表0的ASCII码啊,假如ch=8,ASCII码是38,而0的ASCII码是30,'CH'-'0'=8,转换成十进制嘛。 混球 发表于 2012-11-30 15:35 static/image/common/back.gif
‘0’代表0的ASCII码啊,假如ch=8,ASCII码是38,而0的ASCII码是30,'CH'-'0'=8,转换成十进制嘛。
啊,懂了!^_^谢谢!
页:
[1]