进阶之路(中级篇) - 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是一个对象关系映射框架,当然从分层的角度看,我 ...
随机推荐
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装
一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...
- SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。
出现的错误:SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 错误的原因:.NET Framework dat ...
- OpenNebula学习第二节OpenNebula Node Installation
一.准备工作 准备一台物理机或者虚拟机:Ubuntu16.0.4 已经更新了aliyun的source cpu支持虚拟化 关闭防火墙 二.安装步骤 2.1:下载opennebula repo源 wge ...
- 解压版mysql的配置与使用
1.在环境变量path中添加mysql的bin目录路径,例如 D:\Program Files\MySQL\mysql\bin 2.修改mysql目录下的my-default.ini文件 # 设置my ...
- HighCharts设置图表背景透明
其实就一句话: backgroundColor: 'rgba(0,0,0,0)' 完整示例: $(function () { $('#container').highcharts({ chart: { ...
- .Net Framework System.Collections 集合类
本文内容 集合类 性能 最近复习了一下集合,C# 关于集合的类蛮多,但我除了 List 那几个经常用之外,其他的用得还真不多(只在小范围使用),但其实,每个集合类都各有自己适用的场景,功能也很强大.尤 ...
- Fragment的setUserVisibleHint方法实现懒加载,但setUserVisibleHint 不起作用?
我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在 ...
- Android百日程序:绘画程序-画手指路径
本程序实如今一个画布中,用手指绘图的效果. 须要使用的知识: 1 Canvas 画布,动态保存更新当前画面 2 Path 记录并画出手接触屏幕经过的路径 如以下效果图: 仅仅须要依照默认设置新建一个项 ...
- javascript中IE浏览器不支持NEW DATE()带参数的解决方法
代码如下: var date1=new Date(dateTimes[z][1]); 在火狐下 可以正常取得时间,在IE7下 却是 NaN.纠结老长时间,放弃了new date 然后再老外的论坛中找了 ...
- 007-Go package 说明
1:在项目src下面存在两个目录,每个目录里面各有一个go文件 2:add.go package test02 func Add(a int, b int) int{ return a + b } 注 ...