arduino 1 读取电机编码器值
#define BAUDRATE 115200
#define LEFT 0 //左轮
#define RIGHT 1 //右轮
#define FORWARDS true
#define BACKWARDS false//如果一个变量所在的代码段可能会意外地导致变量值改变那此变量应声明为volatile,
//比如并行多线程等。在arduino中,唯一可能发生这种现象的地方就是和中断有关的代码段,成为中断服务程序。
// 中断函数中使用的变量需要定义为 volatile 类型.
volatile long encoderLeft = 0L;
volatile long encoderRight = 0L;//初始化编码器
void initEncoders(){pinMode(2, INPUT);pinMode(3, INPUT);//中断函数(中断源,中断触发函数,中断触发信号)//中断源可选值为0或1,一般分别对应2号和3号引脚//需要中断的函数名//LOW(低电平触发)、CHANGE(变化时触发)、RISING(低电平变为高电平触发)、FALLING(高电平变为低电平触发)attachInterrupt(0, encoderLeftISR, CHANGE); attachInterrupt(1, encoderRightISR, CHANGE);
}//中断触发函数
void encoderLeftISR(){encoderLeft++;
}//中断触发函数
void encoderRightISR(){encoderRight++;
}//读左轮或右轮编码器
long readEncoder(int i) {long encVal = 0L;if (i == LEFT) {noInterrupts(); //关中断//detachInterrupt(0); //取消中断;取消指定类型的中断.encVal = encoderLeft;interrupts(); //开中断//attachInterrupt(0, Code_left, FALLING);}else {noInterrupts(); //关中断//detachInterrupt(1);encVal = encoderRight;interrupts(); //开中断//attachInterrupt(1, Code_right, FALLING);}return encVal;
}//指定左右轮编码器复位,数值为0
void resetEncoder(int i) {if (i == LEFT){noInterrupts();encoderLeft = 0L;interrupts();}else {noInterrupts();encoderRight = 0L;interrupts();}
}
//左右轮编码器复位,数值都为0
void resetEncoders() {resetEncoder(LEFT);resetEncoder(RIGHT);
}//初始化void setup() {// 串口通信函数说明:// begin():打开串口,参数波特率;Serial.begin(BAUDRATE);// available():获取串口上可读取的数据的字节数,函数返回可读取的字节数;Serial.available();// 该数据是指已经到达并存储在接收缓存(共有64字节)中。available()继承自Stream实用类。// read():读串口数据,read()继承自Stream实用类。Serial.read();// 返回值:串口上第一个可读取的字节(如果没有可读取的数据则返回-1)- int型。// flush(): 刷新串口数据// print(): 往串口发数据,串口输出数据函数。语法:1)Serial.print(val);2)Serial.print(val,format)// 参数: val: 打印的值,任意数据类型;format: 输出的数据格式,包括整数类型和浮点型数据的小数点位数。// println(): 串口输出数据函数。与Serial.print()不同的是输出数据带回车符。// write(): 写二进制数据到串口,数据是一个字节一个字节地发送的,若以字符形式发送数字请使用print()代替。// peak(): 串口读取函数。返回的是串口数据中下一字节的内容// serialEvent(): 当串口有数据到达时调用该函数(然后使用Serial.read()捕获该数据)。Serial.begin(BAUDRATE);initEncoders();resetEncoders();
}void loop() {long lval=readEncoder(0);long rval=readEncoder(1);Serial.print("left: ");Serial.print(lval);Serial.print("; right: ");Serial.println(rval);delay(30);
}
arduino 1 读取电机编码器值相关推荐
- 增量编码器与Arduino连接(读取编码器脉冲数)
https://mp.weixin.qq.com/s/e_25NUo5C_IhVck6dl3Tfg 如下将编码器与Arduino连接: A相:PIN 2( arduino的中断器引脚) B相:PIN ...
- (2)arduino读取电压相对值(模拟读取传感器数值)
arduino读取电压相对值 准备工作 接线图 读取电压值代码 准备工作 需要准备的材料有:电位器一个.arduino uno单片机.杜邦线.面包板 接线图 电位器与滑动变阻器相似,若将其两端连接5V ...
- 初出茅庐的小李第36篇博客之读取旋转编码器正反转状态(arduino uno 测试)
旋转编码器的引脚 CLK(A相) DATA(B相) SWITCH VCC GND 工作原理 旋转编码器的工作原理以及如何在Arduino中使用 https://www.yiboard.com/thre ...
- PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速
PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...
- 玩转电机驱动——电机编码器
玩转电机驱动--电机编码器 文章目录 玩转电机驱动--电机编码器 前言 一.旋转编码器 1. 光学编码器 2. 光学旋转编码器与Arduino连接 3. 程序 二.Arduino Encoder.h库 ...
- 电机编码器的使用方法
电机编码器位置的校正原理(PMSM Encoder Calibration) 绝对编码器 不需要在运行开始前进行参考点的定位(增量编码器需要先找到Z信号),即便是在掉电期间产生的转动也不妨碍后续上电后 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )
文章目录 一.调试进程 ATTACH 附着目标进程 二.读取目标函数寄存器值并存档 1.主要操作流程 2.ptrace 函数 PTRACE_GETREGS 读取寄存器值 一.调试进程 ATTACH 附 ...
- 基于android7.1+msm8937读取ADC采样值
基于android7.1+msm8937读取ADC采样值 读取给设备供电的电压,比如16V,通过监控ADC(Analog-to-Digital Conversion)值来知道电源波动情况和实际给设备供 ...
- ABAP:DYNP_VALUES_READ读取屏幕字段值
在Screen显示之前,系统会自动将程序变量值放到屏幕字段中:在PAI事件中,系统会自动将屏幕字段的值更新到相应的程序变量.在Screen Logic中我们还有POH和POV事件,所以有时需要调用函数 ...
最新文章
- 淘宝特价版给拼多多送芒果,网友:这是什么操作?
- android回调函数
- seaborn常用图
- 1.16 模拟(排序)
- python 剪切一行内容到另一个文件
- python写传奇脚本,Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
- oracle自定义存储过程:删除表(无论表是否存在)和检测表是否存在
- mysql5.7设置默认的字符集
- Hadoop出现core-site.xml not found的解决办法
- 解决IE6不支持fixed
- [ZZ]为什么传统的自动化测试工具会扼杀敏捷?
- 为什么我keepalive配置的vip不能通_企业十大应用-Keepalived-配置详解
- 编译64位dcmtk库
- webUploader选择文件按钮无效
- python几岁开始学比较好_少儿编程到底几岁开始学合适?
- 基于springboot vue uniapp点餐外码系统源码(毕设)
- 如果你的网站需要免费的 SVG 插图,一定不要错过 Undraw 这个网站
- u盘中Trojan.Generic病毒
- Servlet(一)——刨根问底
- 产品思维训练 | 面试题探讨:提高旅游产品评论数量的解决方案
热门文章
- 随机种子 seed()到底是怎么回事。
- 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化...
- pytorch Module中的forward使用for循环与不使用for循环的区别
- TestCenter测试管理平台,如何快速创建项目?
- 以窗口形式进行数字图像处理时,在图像边界处对超出图像边界的窗口内容的映射(对称)处理
- python射击小游戏源码_导弹发射小游戏——Python源代码
- 流式布局案例——京东网页
- 胡昌泽 day3笔记
- matlab 双音频信号的检测,双音频(DTMF)信号的产生与检测.doc
- ubuntu14.10+QT4编写ARM9(mini2440)应用的配置与安装