进阶之路(中级篇) - 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是一个对象关系映射框架,当然从分层的角度看,我 ...
随机推荐
- 在TensorFlow中基于lstm构建分词系统笔记
在TensorFlow中基于lstm构建分词系统笔记(一) https://www.jianshu.com/p/ccb805b9f014 前言 我打算基于lstm构建一个分词系统,通过这个例子来学习下 ...
- Visual Studio 开始支持编写 Android 程序并自带 Android 模拟器【转载】
原文地址 本文内容 为什么需要一个 Android 模拟器 针对 Visual Studio Android 模拟器的调试 Visual Studio Android 模拟器的传感器模拟和其他功能 A ...
- 阿里云构建Kafka单机集群环境
简介 在一台ECS阿里云服务器上构建Kafa单个集群环境需要如下的几个步骤: 服务器环境 JDK的安装 ZooKeeper的安装 Kafka的安装 1. 服务器环境 CPU: 1核 内存: 2048 ...
- 获取sevlet response值
调用: PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8 ...
- HTTP协议综合
1.用浏览器模拟各种User Agent 测试页面的时候经常需要不同的User Agent,Firefox.Chrome浏览器就可以完美的模拟出各种User Agent.User Agent Swit ...
- AngularJS中移动页面滚动穿透解决方案
()] + s[]) >= , preventDefault: false, click: IscrollAndroidBug.click() }); var _ele = document.g ...
- linux下jdk_tomcat+mysql配置那点事
(1)上传环境压缩包 apache-tomcat-7.0.47.tar.gz, jdk-7u71-linux-x64.gz, mysql-5.6.14.tar.gz通过xftp工具上传到/usr/lo ...
- NIO SelectionKey attachment()空指针错误
Channel注册到Selector时添加了一个Object: serverSocketChannel1.register(selector, SelectionKey.OP_ACCEPT, num[ ...
- 透彻理解Ioc
引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...
- RHEL/CentOS/Fedora各种源
CentOS 默认自带 CentOS-Base.repo 源, 但官方源中去除了很多有版权争议的软件, 而且安装的软件也不是最新的稳定版. Fedora 自带的源中也找不到很多多媒体软件, 如果需要安 ...