乐_乐(顺) 发表于 2012-11-21 09:46:06

舵机控制的程序求解~

本帖最后由 乐_乐(顺) 于 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?

四九零二 发表于 2012-11-21 21:22:43

我是这么理解的 ~
1/串口发出的数据是字符的形式,而控制舵机是通过调节0-255 占空比,是以十进制的形式,所以要进行十进制的转换.
2/static 静态变量,要是不加的话,接受到串口的数据,V的值就会改变,而且到下次循环的话还是上一个循环的值,会继续执行旧值程序.所以要加这个静态变量.
我自己的理解 欢迎指正~

四九零二 发表于 2012-11-21 21:23:02

我是这么理解的 ~
1/串口发出的数据是字符的形式,而控制舵机是通过调节0-255 占空比,是以十进制的形式,所以要进行十进制的转换.
2/static 静态变量,要是不加的话,接受到串口的数据,V的值就会改变,而且到下次循环的话还是上一个循环的值,会继续执行旧值程序.所以要加这个静态变量.
我自己的理解 欢迎指正~

johnsonzzd 发表于 2012-11-22 16:30:30

100a200b,这样的格式

乐_乐(顺) 发表于 2012-11-22 18:11:11

四九零二 发表于 2012-11-21 21:23 static/image/common/back.gif
我是这么理解的 ~
1/串口发出的数据是字符的形式,而控制舵机是通过调节0-255 占空比,是以十进制的形式,所 ...

Case '0'...'9'的意思是什么呢?

混球 发表于 2012-11-29 13:27:25

假如是输入80a,一开始v=0,首先检测到8,则v=8,继续检测到0,则v=v*10+‘ch’-‘0’=8*10+0=80,把字符80a转成十进制80。

乐_乐(顺) 发表于 2012-11-29 19:42:19

混球 发表于 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:35:34

本帖最后由 混球 于 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 22:13:10

混球 发表于 2012-11-30 15:35 static/image/common/back.gif
‘0’代表0的ASCII码啊,假如ch=8,ASCII码是38,而0的ASCII码是30,'CH'-'0'=8,转换成十进制嘛。

啊,懂了!^_^谢谢!
页: [1]
查看完整版本: 舵机控制的程序求解~