arduino新手,一些关于舵机很简单的问题求助各位大神-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12762|回复: 7

[已解决] arduino新手,一些关于舵机很简单的问题求助各位大神

[复制链接]
发表于 2013-3-22 15:04 | 显示全部楼层 |阅读模式
#include<Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;

void setup()
{
  servo1.attach(8);
  servo2.attach(9);
  servo3.attach(10);
  Serial.begin(9600);
}
void loop()
{
  static int angle=0;
  if(Serial.available())
  {char ch=Serial.read();
  switch(ch)
  {
    case'0'...'9':
   angle =angle*10+ch-'0';
    break;
    case'a':
    servo1.write(angle);

angle=0
    break;
    case'b':
    servo2.write(angle);
    angle=0;
    break;
    case'c':
    servo3.write(angle);
    angle=0;
    break;
  }
  
}
}




这段程序里面的


{

  static int xp=0;

  if(Serial.available())

  {char ch=Serial.read();

  switch(ch)

  {

    case'0'...'9':

    xp=xp*10+ch-'0';

    break;

是什么意思?

比如我输入90a,它就会把那个舵机转到90度,怎么做到的?

怎么把90和a分离开来的

还有,如果我要编一段程序电脑输入(90,80,70)它就会同时把第一个转到90,第二80第三70,要怎么修改?


{:soso_e163:} 万分感谢
发表于 2013-3-22 18:15 | 显示全部楼层
#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;
  }
  
}
}
发表于 2013-3-22 18:20 | 显示全部楼层
"(90,80,70)它就会同时把第一个转到90,第二80第三70"

这个需求,你还是自己想想吧。
 楼主| 发表于 2013-3-22 18:55 | 显示全部楼层
i7456 发表于 2013-3-22 18:20
"(90,80,70)它就会同时把第一个转到90,第二80第三70"

这个需求,你还是自己想想吧。 ...

太感谢你了
发表于 2013-3-22 21:50 | 显示全部楼层
lxp5521 发表于 2013-3-22 18:55
太感谢你了

不用客气
发表于 2013-5-26 09:26 | 显示全部楼层
我改了这个程序想控制一个舵机,可是不行,能看看是哪儿出问题了吗
#include <Servo.h>

Servo servo1;
void setup()
{
  servo1.attach(9);
  Serial.begin(9600);
}
void loop()
{
static int angle=0;         
  if(Serial.available())         
  {char ch=Serial.read();   
                                      
   angle =angle*10+ch-'0';
   servo1.write(angle);
   angle=0;
  }
  }
发表于 2013-7-14 19:48 | 显示全部楼层
创客刀疤 发表于 2013-5-26 09:26
我改了这个程序想控制一个舵机,可是不行,能看看是哪儿出问题了吗
#include

我的成功控制多个舵机,在我博客 中: http://www.isn8.com/?p=1364
发表于 2013-7-15 20:34 | 显示全部楼层
创客刀疤 发表于 2013-5-26 09:26
我改了这个程序想控制一个舵机,可是不行,能看看是哪儿出问题了吗
#include

看我博客里有代码:http://www.isn8.com/?p=1359
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-3 07:28 , Processed in 0.113153 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表