查看: 3125|回复: 1

intel Curie/Arduino 101入门开发套件之-实验:串口舵机控制

[复制链接]
本帖由 Leonardo 同步到 yvuke 的微博!

该用户从未签到

发表于 2016-6-14 18:17 | 显示全部楼层 |阅读模式
本帖最后由 Leonardo 于 2016-6-16 15:13 编辑

        前面的章节我介绍了用ArduinoIDE自带的示例去控制舵机,这章我们利用串口通过输入命令的方式去控制舵机的角度,直接在串口监视器中输入目标位置的角度值,舵机即可转动到相应角度,下面是实现的代码,我觉得我的注释已经足够详细了。。。。

kittenblock中小学创客名师推荐的图形化编程软件

#include <Servo.h> //调用舵机库
int val;//定义一个舵机控制变量
int i;//定义一个数据位变量
char Data[3];//定义一个用于存放字符串的数组
boolean complete;//定义一个数据接收是否完成的布尔值
Servo SerialServo; //创建一个名为SerialServo的舵机工程
 
void setup()
{
  Serial.begin(9600);//串口通讯波特率9600
  SerialServo.attach(9);//定义舵机连接在数字9号口
}
 
void loop()
{
  if (Serial.available()){        //如果串口有数据输入
    delay(30);                    //给30ms缓冲时间让数据读取完整
    if (Serial.available() <= 3)//如果输入数据位数小于或者有3位
    { 
      while (Serial.available())
      { 
        Data[i++] = Serial.read();   //把依次读到的数据存入数组
      }
      complete = true;      //数据读取完毕
    }
    else 
    {                        //如果获取到更多的新的数据
      Serial.flush();             //刷新缓存存放新的值
    }
  }

if (complete)     //如果数据读取完毕则开始解码数据
  {
   if (!Data[2])
   { //如果输入数据为两位数,最后一位为空
   if (!Data[1])//如果输入数据为一位数,最后两位都为空
      { 
         Data[2] = Data[0];//把有效的数据移到最后一位
         Data[1] = 48;//第二位归零
         Data[0] = 48;//第一位归零(如5NN变为005)//N代表空位
      }
   else //如果是两位的话
      { 
        Data[2] = Data[1];//把第二位数右移一位
        Data[1] = Data[0];//把第一位数右移一位
        Data[0] = 48;//第一位归零(如25N变为025)//N代表空位
      }
  }
for (i=0;i<=3;i++)//依次把命令值转化为整型变量(字符0对应的ASCII码为48)
{ 
Data -= 48;//每一位减去48就转化为了整数
}
val = 100*Data[0] + 10*Data[1] + Data[2];//重组数据为整数
SerialServo.write(val);//数据量控制舵机
Serial.println(val);//串口输出舵机的控制量
 
    complete = false;                  //复位系统状态布尔值
    Serial.flush();               //刷新串口输入缓存
    for (i = 0; i <= 3; i++)      //数组初始化
    {
      Data = 0;//数组归零
    }
    i = 0;    //初始化数据位值

}
}


下载成功后,等待5秒以上,打开串口监视器,输入0-180度的度数,舵机便旋转至目标角度。
Arduino101/ intel Curie入门开发套件

打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2019-8-24 11:04
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2019-6-16 21:40 来自手机 | 显示全部楼层
    先标记,过几天买个串口舵机试一下。
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    新人 if else if语句问题
    新人 if else if语句问题
    想要的效果是分别输入1;2;3;4;时 分别输出1;2;3;4,输入其他时输出输出code
    【Arduino】u8g2中文字库制作教程 小白请进
    【Arduino】u8g2中文字库
    我知道对于这个话题许多大佬们都会,发这个贴子也算是炒冷饭了,所以一开始我也十分纠
    请问Arduino可以和这种NB-IOT模块连接吗
    请问Arduino可以和这种NB-
    如图
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表