/*********************************
代码功能:通过串口控制电机
使用函数:
Serial.available();       //判断串口是否接收到数据
Serial.print(字符串);        //通过TX传出去
Serial.write(字符串);        //写入串口中
Serial.println(字符串);       //通过TX传出去,并在尾端加换行
strtol(字符串启始指针,字符串结束指针,字符转换长度);  //字符串转整形
constrain(数据,区间上界,区间下界);    //约束数据范围函数
strtok(将要分解字符串首地址,"分割字符");      //字符分割函数(s指向要分解的字符串,之后再次调用要把s设成NULL。)
调用的库:#include <Servo.h>     //设置舵机的库:详情见:https://www.arduino.cc/en/Reference/Servo
(电机名称).attach(控制电机引脚);   //初始化电机
(电机名称).write(角度); //写入旋转角度
(电机名称).writeMicroseconds(中间参数); //设置电机的转动方向值,详情见:http://www.cnblogs.com/jikexianfeng/p/6269629.html
(电机名称).read(); //用于读取舵机角度的语句,可理解为读取最后一条write()命令中的值。返回值为伺服的角度,从0到180度。
(电机名称).attached(); //检查伺服变量是否连接到引脚。如果伺服器连接到引脚,则为真; 否则为假。
(电机名称).detach();  //从其引脚分离伺服变量。如果所有伺服变量都分离,则引脚9和10可以用于使用analogWrite()进行PWM输出。
创作时间:2016*01*10
作者邮箱:jikexianfeng@outlook.com
********************************/
#include <Servo.h> char buffer[];
Servo servo1;
Servo servo2;
int L = ;
int R = ; void setup()
{
servo1.attach(L);
servo2.attach(R);
Serial.begin();
Serial.flush();
servo1.write();
servo2.write();
Serial.println("STARTINC....");
}
void loop()
{
if(<Serial.available()){
int index = ;
delay();
int numChar = Serial.available();
if(numChar > ){
numChar = ;
}
while(numChar--){
buffer[index++] = Serial.read();
}
splitString(buffer);
}
} void splitString(char *data){
Serial.print("Data entered:");
Serial.println(data);
char *parameter;
parameter = strtok(data,","); //首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL
while(NULL != parameter){
setServo(parameter);
parameter = strtok(NULL,","); //首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL
}
for(int x =;x<;x++){
buffer[x] = '\0';
}
Serial.flush();
} void setServo(char *data){
if((data[] == 'R')||(data[] == 'r')){
int firstVal = strtol(data+,NULL,);
firstVal = constrain(firstVal,,);
servo2.write(firstVal);
Serial.print("Servo2 is set to:");
Serial.println(firstVal);
}
if((data[] == 'L')||(data[] == 'l'))
{
int firstVal = strtol(data+,NULL,);
firstVal = constrain(firstVal,,);
servo1.write(firstVal);
Serial.print("Servo1 is set to:");
Serial.println(firstVal);
}
}

Arduino开发板上的5V供电口电流有限,只能带动一个S90的舵机,而且电机运动过程中对电源有较大的波动对开发板电压得稳定性有较大的冲击,会影响 Arduino开发板的正常工作,严重时会造成时钟紊乱,不断重启。

参考博客:http://www.cnblogs.com/jikexianfeng/p/6269629.html

参考网站:https://www.arduino.cc/en/Reference/Servo

进阶之路(中级篇) - 017 有关于Arduino 驱动舵机及相关问题的更多相关文章

  1. 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架

    一.    设备及要求 目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒. 基础装置:可伸缩的晾衣架. 开发环境:Arduino1. 8.1 主控板:Arduino UNO 动力装 ...

  2. docker进阶之路-基础篇 | 一:环境搭建

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...

  3. docker进阶之路-基础篇 | 二:portainer安装与基本使用

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061755.html ​简介 Portainer 是轻量级,跨平台,开源的管理D ...

  4. 运维工程师打怪升级进阶之路 V2.0

    在此之前,发布过两个版本: 运维工程师打怪升级之路 V1.0 版本发布 运维工程师打怪升级必经之路 V1.0.1 很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是 ...

  5. Java 进阶 hello world! - 中级程序员之路

    Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

  6. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...

  7. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  8. Sass进阶之路,之一(基础篇)

    Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...

  9. 【SSH进阶之路】Hibernate系列——总结篇(九)

    这篇博文是Hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

随机推荐

  1. NLP资源

    http://www.cs.columbia.edu/~mcollins/notes-spring2013.html http://web.stanford.edu/class/cs224n/syll ...

  2. 使用SVD方法实现电影推荐系统

    http://blog.csdn.net/zhaoxinfan/article/details/8821419 这学期选了一门名叫<web智能与社会计算>的课,老师最后偷懒,最后的课程pr ...

  3. nginx不浏览直接下载文件

    当我们使用Nginx时,如果要让一些附件比如txt,pdf,doc等不直接在浏览器打开,而弹出另存为的对话框(也就是下载),则可以在nginx里添加如下配置: location /{if ($requ ...

  4. Syntax error missing ; before *

      [问题] I have a header file like so: #pragma once #include "gamestate.h" #include "Ex ...

  5. OpenGL ES 3.0顶点着色器(二)

    #version es uniform mat4 u_mvpMatrix; in vec4 a_position; in vec4 a_color;out vec4 v_color;void main ...

  6. maven 添加jar到中央/远程仓库

    maven 添加jar到中央/远程仓库 开源中国 发表于 2014-08-23 00:08:00 commond: mvn deploy:deploy-file -DgroupId=com.tima. ...

  7. 【转】Ionic3在ts中获取html中值的方法

    我觉得有两种方法,都是Angular中的语法,一种是把值当做参数传递,另一种是使用ngModel实现双向绑定 还有一种很少用到的,Js的原生方法:document.getElementById('ch ...

  8. Centos7中修改Hostname的方法

    一.Centos7中修改的方法: hostnamectl set-hostname <new hostname> 说明:centOS 7 里面修改hostname的方式有所改变,修改/et ...

  9. Emmet (前身为 Zen Coding)

    使用示例: 在编辑器中输入缩写代码:ul>li* ,然后按下拓展键(默认为tab),即可得到代码片段: <ul> <li></li> <li>&l ...

  10. 003-Go初探Iris

    1.参考资源:https://iris-go.com/v10/start#Getting-Started 2.首先下载:go get -u github.com/kataras/iris,此处时间较长 ...