进阶之路(中级篇) - 017 有关于Arduino 驱动舵机及相关问题
/*********************************
代码功能:通过串口控制电机
使用函数:
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 驱动舵机及相关问题的更多相关文章
- 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架
一. 设备及要求 目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒. 基础装置:可伸缩的晾衣架. 开发环境:Arduino1. 8.1 主控板:Arduino UNO 动力装 ...
- docker进阶之路-基础篇 | 一:环境搭建
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...
- docker进阶之路-基础篇 | 二:portainer安装与基本使用
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061755.html 简介 Portainer 是轻量级,跨平台,开源的管理D ...
- 运维工程师打怪升级进阶之路 V2.0
在此之前,发布过两个版本: 运维工程师打怪升级之路 V1.0 版本发布 运维工程师打怪升级必经之路 V1.0.1 很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是 ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- Sass进阶之路,之一(基础篇)
Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...
- 【SSH进阶之路】Hibernate系列——总结篇(九)
这篇博文是Hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...
随机推荐
- 文本分类需要CNN?No!fastText完美解决你的需求(前篇)
http://blog.csdn.net/weixin_36604953/article/details/78195462?locationNum=8&fps=1 文本分类需要CNN?No!f ...
- nodejs 项目的session验证
原文:https://www.codexpedia.com/node-js/a-very-basic-session-auth-in-node-js-with-express-js/ -------- ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十八)ES6.2.2 增删改查基本操作
#文档元数据 一个文档不仅仅包含它的数据 ,也包含 元数据 —— 有关 文档的信息. 三个必须的元数据元素如下:## _index 文档在哪存放 ## _type 文档表示的对象类别 ## ...
- How to duplicate the records in a MongoDB collection
// Fill out a literal array of collections you want to duplicate the records in. // Iterate over e ...
- 红米除线刷的另外一种救砖方法fastboot
原文来自:https://jingyan.baidu.com/article/48a42057e945bca9242504d7.html , 按照它操做了一下,虽然没有救活我的红米1,但是让我更好的了 ...
- Windows系统内存分析工具的介绍
Windows系统内存分析工具的介绍(进程管理器,资源管理器,性能监视器, VMMap, RamMap,PoolMon) 微软官方提供多种工具来分析Windows 的内存使用情况,除了系统自带的任 ...
- Node.js中 express-session的奇怪问题
var session = require('express-session'); app.use(cookieParser()); 行 登录以后访问的时候有时候会报这样的错误: The la ...
- thrift系列 - 快速入门
1.简介 Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题. 本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:h ...
- GPUImage API文档之GPUImageFramebuffer类
GPUImageFramebuffer类用于管理帧缓冲对象,负责帧缓冲对象的创建和销毁,读取帧缓冲内容 属性 @property(readonly) CGSize size 说明:只读属性,在实现中, ...
- 解剖 CPU
http://www.ruanyifeng.com/blog/2010/11/cpu_autopsy.html 有一个瑞典 Lund 大学物理学博士生,就真的这么干了,还把照片放到网上.我们知道,CP ...