accelstepper 获取方向_AccelStepper库
/*
Arduino通过AccelStepper库控制28BYJ-48步进电机示例程序-2
by 太极创客(www.taichi-maker.com)
可通过Arduino IDE 串口监视器输入电机指令
本程序旨在演示move/moveTo/runToNewPosition区别 (两个28BYJ-48电机演示)
如需获得本示例程序详细电路信息以及如何使用Arduino控制电机的更多知识,请参考太极创客网站:
http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/accelstepper-library/
* 电机指令列表
* 'o' 利用currentPosition获取当前电机输出轴位置并通过串口监视器输出该信息
* 'v' 利用moveTo函数使电机运行到用户指定坐标位置,moveTo函数不会“block”程序。
* 例:v1024 - 将电机moveTo到1024位置
* 'm' 利用move函数使电机运行相应步数。move函数不会“block”程序。
* 例:m1024 - 使电机运行1024步
* 'r' 利用runToNewPosition函数让电机运行到用户指定坐标位置。runToNewPosition函数功能
* 与moveTo函数功能基本相同。唯一区别是runToNewPosition函数将“block”程序运行。
* 即电机没有到达目标位置前,Arduino将不会继续执行后续程序内容。
* 这一点很像Arduino官方Stepper库中的step函数。
* 例:r1024 - 将电机runToNewPosition到1024位置。Arduino在电机达到1024位置前将停止
* 其它程序任务的执行。
* 's' 利用setCurrentPosition函数设置当前位置为用户指定位置值。
* 例:s0 - 设置当前位置为0
* 'a' 利用setAcceleration函数设置加速度
* 例:a100 - 设置电机运行的加速度为100
* 'x' 利用setMaxSpeed函数设置最大速度
* 例:x500 - 设置电机运行的最大速度为500
* 'd' 用户通过此指令可指定哪一个电机进行工作
* 例:d1 一号电机工作,d2 二号电机工作, d0 两个电机同时工作
*/
#include "AccelStepper.h"
// 电机步进方式定义
#define FULLSTEP 4 //全步进参数
#define HALFSTEP 8 //半步进参数
// 定义步进电机引脚
#define motor1Pin1 8 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in1
#define motor1Pin2 9 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in2
#define motor1Pin3 10 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in3
#define motor1Pin4 11 // 一号28BYJ48连接的ULN2003电机驱动板引脚 in4
#define motor2Pin1 4 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in1
#define motor2Pin2 5 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in2
#define motor2Pin3 6 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in3
#define motor2Pin4 7 // 二号28BYJ48连接的ULN2003电机驱动板引脚 in4
// 定义两个步进电机对象
// 定义中ULN2003驱动板引脚顺序为 in1-in3-in2-in4
// 1号电机设置为全步进运行,2号电机设置为全步进运行
AccelStepper stepper1(FULLSTEP, motor1Pin1, motor1Pin3, motor1Pin2, motor1Pin4);
AccelStepper stepper2(FULLSTEP, motor2Pin1, motor2Pin3, motor2Pin2, motor2Pin4);
char cmd; //电机指令字符
int data; //电机指令参数
int stepperNum; //控制电机编号
void setup()
{
stepper1.setMaxSpeed(500.0); // 1号电机最大速度500
stepper1.setAcceleration(50.0); // 1号电机加速度50.0
stepper2.setMaxSpeed(500.0); // 2号电机最大速度500
stepper2.setAcceleration(50.0); // 2号电机加速度50.0
Serial.begin(9600);
Serial.println(F("++++++++++++++++++++++++++++++++++"));
Serial.println(F("+ Taichi-Maker AccelStepper Demo +"));
Serial.println(F("+ www.taichi-maker.com +"));
Serial.println(F("++++++++++++++++++++++++++++++++++"));
Serial.println(F(""));
Serial.println(F("Please input motor command:"));
}
void loop(){
if (Serial.available()) { // 检查串口缓存是否有数据等待传输
cmd = Serial.read(); // 获取电机指令中指令信息
Serial.print(F("cmd = "));
Serial.print(cmd);
Serial.print(F(" , "));
data = Serial.parseInt(); // 获取电机指令中参数信息
Serial.print(F("data = "));
Serial.print(data);
Serial.println(F(""));
runUsrCmd();
}
stepper1.run();
stepper2.run();
}
void runUsrCmd(){
switch(cmd){
case 'o': //利用currentPosition获取当前电机输出轴位置并通过串口监视器输出该信息
Serial.print(F("stepper1 Position: "));
Serial.println(stepper1.currentPosition());
Serial.print(F("stepper2 Position: "));
Serial.println(stepper2.currentPosition());
Serial.print(F("Current Running Motor: "));
if (stepperNum == 1 || stepperNum == 2 ) {
Serial.print(F("Motor# "));
Serial.println(stepperNum);
} else if (stepperNum == 0 ) {
Serial.println(F("Both Motors"));
}
break;
case 'v': //利用moveTo函数使电机运行到用户指定坐标位置,moveTo函数不会“block”程序。
if (stepperNum == 1){
Serial.print(F("Motor1 'moveTo' ")); Serial.println(data);
stepper1.moveTo(data);
} else if (stepperNum == 2){
Serial.print(F("Motor2 'moveTo' ")); Serial.println(data);
stepper2.moveTo(data);
}else if (stepperNum == 0){
Serial.print(F("Both Motors 'moveTo' ")); Serial.println(data);
stepper1.moveTo(data);
stepper2.moveTo(data);
}
break;
case 'm': // 利用move函数使电机运行相应步数。move函数不会“block”程序。
if (stepperNum == 1){
Serial.print(F("Motor1 'move' ")); Serial.println(data);
stepper1.move(data);
} else if (stepperNum == 2){
Serial.print(F("Motor2 'move' ")); Serial.println(data);
stepper2.move(data);
}else if (stepperNum == 0){
Serial.print(F("Both Motors 'move' ")); Serial.println(data);
stepper1.move(data);
stepper2.move(data);
}
break;
case 'r': //利用runToNewPosition函数让电机运行到用户指定位置值。
if (stepperNum == 1){
Serial.print(F("Motor1 'runToNewPosition' "));
Serial.println(data);
stepper1.runToNewPosition(data);
} else if (stepperNum == 2){
Serial.print(F("Motor2 'runToNewPosition' "));
Serial.println(data);
stepper2.runToNewPosition(data);
}else if (stepperNum == 0){
Serial.print(F("Both Motors 'runToNewPosition' "));
Serial.println(data);
stepper1.runToNewPosition(data);
stepper2.runToNewPosition(data);
}
break;
case 's': //利用setCurrentPosition函数设置当前位置为用户指定位置值。
if (stepperNum == 1){
Serial.print(F("Set stepper1 Current Position to "));
Serial.println(data);
stepper1.setCurrentPosition(data);
} else if (stepperNum == 2){
Serial.print(F("Set stepper2 Current Position to "));
Serial.println(data);
stepper2.setCurrentPosition(data);
}else if (stepperNum == 0){
stepper1.moveTo(data);
Serial.print(F("Set both steppers' Current Position to "));
Serial.println(data);
stepper1.setCurrentPosition(data);
stepper2.setCurrentPosition(data);
}
break;
case 'a': //利用setAcceleration函数设置加速度
if (stepperNum == 1){
Serial.print(F("Motor1 'setAcceleration' "));
Serial.println(data);
stepper1.setAcceleration(data);
} else if (stepperNum == 2){
Serial.print(F("Motor2 'setAcceleration' "));
Serial.println(data);
stepper2.setAcceleration(data);
}else if (stepperNum == 0){
Serial.print(F("Both Motors 'setAcceleration' "));
Serial.println(data);
stepper1.setAcceleration(data);
stepper2.setAcceleration(data);
}
break;
case 'x': //利用setMaxSpeed函数设置最大速度
if (stepperNum == 1){
Serial.print(F("Motor1 'setMaxSpeed' "));
Serial.println(data);
stepper1.setMaxSpeed(data);
} else if (stepperNum == 2){
Serial.print(F("Motor2 'setMaxSpeed' "));
Serial.println(data);
stepper2.setMaxSpeed(data);
}else if (stepperNum == 0){
Serial.print(F("Both Motors 'setMaxSpeed' "));
Serial.println(data);
stepper1.setMaxSpeed(data);
stepper2.setMaxSpeed(data);
}
break;
case 'd': //用户通过此指令可指定哪一个电机进行工作
if ( data == 1 || data == 2 ){
stepperNum = data;
Serial.print(F("Running Motor ")); Serial.println(stepperNum);
} else if (data == 0 ){
stepperNum = data;
Serial.println(F("Running Both Motors "));
} else {
Serial.print(F("Motor Number Wrong."));
}
break;
default: // 未知指令
Serial.println(F("Unknown Command"));
}
}
accelstepper 获取方向_AccelStepper库相关推荐
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net...
Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net 1. -catalog与schema的设计区别1 ...
- python中哪个库用于中文分词_以下属于?Python?中文分词方向第三方库的是:
以下属于?Python?中文分词方向第三方库的是: 答:jieba 霍兰德代码由几个字母组成: 答:3 在弹性价格下的货币模型下,当汇率变动与本国货币存量的供给成正比,与外国货币供给成反比,当本国货币 ...
- 从搜狗获取行业词库并转换成jieba可用的词库文件
从搜狗获取行业词库并转换成jieba可用的词库文件 从搜狗获取行业词库 利用网站在线转换 利用Django建立网站 从搜狗获取行业词库 搜狗官方的词库地址 下载下来后是.scel扩展名的文件 利用网站 ...
- ladp3 获取属性_Ldap3库使用方法(四)
#!/usr/bin/env python # -*- coding: utf-8 -*- import json from ldap3 import ALL_ATTRIBUTES # 注意:ldap ...
- input内容右对齐_向右打方向倒库过程中,如何判断后车距离?光线较暗车库倒库技巧...
现在进入泉城广场的地下停车场,根据上方导向箭头提示,车位和出口都在右转方向. 现在大家从画面中可能觉得光线还可以,其实这个停车场光线比较差,从后视镜中可以看到相对真实的光线状态. 很多朋友曾经问过我, ...
- 获取手机指纹库指纹信息
本Demo 所示用测试机为华为KIW-UL00 系统版本:Android 6.0.1, API 23 参考谷歌官方文档可知,公开的指纹操作类只有一个FingerprintManager.且暴露的方法有 ...
- 获取谷歌语音库单词发音
最近要做一个英语学习软件,首先要考虑的就是词库,单词好找,发音比较难解决,分析了市面上几家语音引擎提供商,谷歌是发音最标准的了,下面是采集谷歌单词发音的c#代码. /// <summary> ...
- ladp3 获取属性_Ldap3 库使用方法(三)
#!/usr/bin/env python # -*- coding: utf-8 -*- import json from ldap3 import ALL_ATTRIBUTES # 注意:ldap ...
- java、python、node等,轻松获取驾考题库数据
今天分享一个免费获取各类驾考试题的API,接入非常简单,试题种类也非常丰富 介绍:最新驾照考试题库,分小车,货车,客车,客运,货运5类.可按顺序或者随机获取题库试题,题库包含:"A1&quo ...
最新文章
- 在阿里云Kubernetes容器服务上打造TensorFlow实验室
- linux中编译C语言程序
- TP 框架没有考虑完善的功能点:1、表达式查询不支持INSTR形式的查询
- WebStorm无法显示文件夹目录
- Qt Creator配置项目
- spring控制事务:声明式事务(注解)
- 好工作为什么会与你擦肩而过?
- 2019年今日头条机试_JAVA后台岗_第一题
- Amos简介及安装步骤
- 关于PreScan的Vissim插件
- PDF Candy Desktop(全能PDF工具箱)官方中文版V2.91 | pdf candy desktop官网下载 | 含pdf candy desktop使用教程
- 阿里云云计算工程师ACA认证(Alibaba Cloud Certified Associate - Cloud Computing)考试大纲-V3.0
- Spark MLlib特征处理:MinMax最大最小值区间缩放---原理及实战
- PostgreSQL的集群化和容器化部署
- 有趣的python小程序
- 合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信监息提取、测
- hexo部署到云服务器
- 清除页面缓存快捷键-避免重新登陆方式
- 编程的第二个十年:关于Real™编程器的全部
- 现代OpenGL教程 02 - 贴图