ESP32 读取旋转编码器

news/2025/9/22 18:06:58/文章来源:https://www.cnblogs.com/zblblog/p/19105713

1、旋转编码器原理
image
1.1、以A输入为时钟,边沿中断检测A输入的上升边沿,同时在中断回调函数判断B的电平状态
①正转CW:A上升沿,B低电平;
②反转CWW:A上升沿,B高电平;
1.2、中间按键直接使用电平或者电平中断检测;

2、旋钮编码器读取
①顺时针旋转:三色灯根据编码器数据增加而变化
②逆时针旋转:三色灯根据编码器数据减少而变化
③中间按键:熄灭RGB三色灯

#define R_PIN 19
#define G_PIN 20
#define B_PIN 21#define ENCODER_A_PIN 12
#define ENCODER_B_PIN 13
#define ENCODER_SW_PIN 14unsigned char encoder_cnt = 0;
unsigned char cnt_last_state = 0;void rgb_turn_off(void){digitalWrite(R_PIN, LOW);digitalWrite(B_PIN, LOW);digitalWrite(G_PIN, LOW);
}void rgb_change(unsigned char val){unsigned int i =val;switch(i){case 1:digitalWrite(R_PIN, HIGH);digitalWrite(B_PIN, LOW);digitalWrite(G_PIN, LOW);break;case 2:digitalWrite(R_PIN, HIGH);digitalWrite(B_PIN, LOW);digitalWrite(G_PIN, HIGH);break;case 3:digitalWrite(R_PIN, HIGH);digitalWrite(B_PIN, HIGH);digitalWrite(G_PIN, LOW);break;case 4:digitalWrite(R_PIN, HIGH);digitalWrite(B_PIN, HIGH);digitalWrite(G_PIN, HIGH);break;case 5:digitalWrite(R_PIN, LOW);digitalWrite(B_PIN, LOW);digitalWrite(G_PIN, HIGH);break;case 6:digitalWrite(R_PIN, LOW);digitalWrite(B_PIN, HIGH);digitalWrite(G_PIN, HIGH);break;case 7:digitalWrite(R_PIN, LOW);digitalWrite(B_PIN, HIGH);digitalWrite(G_PIN, LOW);break;default:digitalWrite(R_PIN, LOW);digitalWrite(B_PIN, LOW);digitalWrite(G_PIN, LOW);break;}
}void Interrupt_read_encoder(void) {int dt_val = 0;dt_val = digitalRead(ENCODER_B_PIN);if(dt_val == LOW){Serial.println("Rotated CW >>");if(encoder_cnt >= 7){encoder_cnt = 7;}else{encoder_cnt ++;}}if(dt_val == HIGH){Serial.println("Rotated CCW <<");if(encoder_cnt == 0){encoder_cnt = 0;}else{encoder_cnt --;}}
}void setup() {Serial.begin(115200);pinMode(R_PIN, OUTPUT);pinMode(G_PIN, OUTPUT);pinMode(B_PIN, OUTPUT);rgb_turn_off();pinMode(ENCODER_A_PIN, INPUT);pinMode(ENCODER_B_PIN, INPUT);pinMode(ENCODER_SW_PIN, INPUT_PULLUP);attachInterrupt(digitalPinToInterrupt(ENCODER_A_PIN), Interrupt_read_encoder, RISING);Serial.print("RBG runing...\r\n");
}void loop() {noInterrupts();if(cnt_last_state != encoder_cnt){cnt_last_state = encoder_cnt;rgb_change(encoder_cnt);Serial.printf("encoder_cnt=%d.\r\n", encoder_cnt);}interrupts();if(digitalRead(ENCODER_SW_PIN) == LOW){delay(100);if(digitalRead(ENCODER_SW_PIN) == LOW){Serial.println("sw chick...\r\n");rgb_turn_off();encoder_cnt = 0;}}
}

2、执行仿真效果
image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

负载分析和排查六

负载分析和排查六明白,我帮你整理成一个完整专业文档,覆盖 CPU 各类负载(%user、%sys、%soft、%si、%iowait)分析、溯源、定位工具与优化策略,并包含脚本示例和中断原理说明。文档结构清晰,便于直接使用或汇报。…

赣州市建设工程造价管理网站现在做百度推广有用吗

目录 3.3 网络结构与损失函数设计 3.3.1 网络结构 3.3.2 损失函数设计

js网站大全郑州网站制作推广

除了基本的分组功能之外&#xff0c;GROUP BY 子句还提供了几个高级选项&#xff0c;可以用来实现更复杂的报表功能。 本文比较五种主流数据库实现的高级分组功能&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 功能MySQLOracleSQL ServerPostgreSQL…

苏州高端网站设计企业西安网络科技有限公司有哪些

1. 引言 限界上下文可以拆分为两个词&#xff0c;限界和上下文。限界&#xff1a;是指一个界限&#xff0c;具体的某一个范围。上下文&#xff1a;个人理解就是语境。 比如我们常说的段子&#xff1a; “我想静静。”这个句子一般是想表达“我想静一静”的意思。但是我们却把…

网站内容建设要求 age06建设六马路小学 网站

此文为人大金仓数据库安装程序&#xff08;windows下kingbase开发及测试用&#xff09;。 1 人大金仓-成为世界卓越的数据库产品与服务提供商 官方下载安装包&#xff0c;同时需要下载授权文件&#xff0c;补丁文件可以不下。 2 点击安装 3 选择授权文件 4 默认安装即可&…

饰品交易网站怎么做做礼品建什么网站

Kafka消费流程 消息是如何被消费者消费掉的。其中最核心的有以下内容。 1、多线程安全问题 2、群组协调 3、分区再均衡 1.多线程安全问题 当多个线程访问某个类时&#xff0c;这个类始终都能表现出正确的行为&#xff0c;那么就称这个类是线程安全的。 对于线程安全&…

武威市建设局网站 放管服网站服务公司业务范围包括

软件项目范围基准明确了项目的边界、目标和主要交付成果&#xff0c;有助于提高项目成本、进度和资源估算的准确性&#xff0c;便于实施项目控制&#xff0c;而且还可以帮助我们清楚分派责任&#xff0c;防止范围蔓延&#xff0c;从而提升项目的成功率。 如果没有明确确定范围基…

网站建设php的心得和体会动漫设计网站

建议将全局变量创建在.h/.cpp文件中&#xff0c;其中.h文件声明变量&#xff0c;.cpp文件中定义变量值。 在.h文件中定义变量&#xff0c;则工程多次#include该文件会出现“该文件已经被使用”。 具体示例如下&#xff1a; synchronize_data.h // // Created by qiaowei on…

大地资源影视免费观看淄博网站建设优化运营熊掌号

介绍 Nginx是一个高性能的Web服务器&#xff0c;它可以处理大量的并发请求&#xff0c;同时还可以作为负载均衡器和反向代理服务器。在本篇博文中&#xff0c;我们将介绍如何从入门到精通Nginx的使用。 Nginx的安装和配置 在开始使用Nginx之前&#xff0c;您需要先安装和配置…

mysql/oracle LEFT JOIN 取时间最大的数据

如下SQL ,一次任务执行结果 没有聚合到任务结果表,可以在任务结果表中查询出这个任务结果id,然后可根据任务结果id内存遍历或者通过not exists进行结果明细的成功失败查询。select t.task_id,t.task_name, maxr.tas…

6月6日证书 - 工信部人才交流中心PostgreSQL中级PGCP高级PGCM认证

恭喜上一期参加并通过工信部人才交流中心PostgreSQL管理员PG中级和PG高级认证考试的各位同学,纸质版证书到啦【9月16日】! 电子版证书可以在工信部人才交流中心官网查询,或者联系CUUG客服!工信部人才交流中心Postgr…

基于遗传算法与非线性规划的混合优化算法在电力系统最优潮流中的实现

基于遗传算法(GA)与非线性规划(NLP)的混合优化算法在电力系统最优潮流(OPF)中的实现一、混合算法架构设计 混合策略优势全局探索:GA处理非凸、多峰问题,避免陷入局部最优 局部开发:NLP(如内点法)加速收敛,…

【下一款产品】

从哪里获取灵感、如何判断价值、最后怎么选。 ⸻ 1️⃣ 灵感来源(参考哪些网站) 🔹 全球趋势/新产品 • Product Hunt → 每天看独立开发者和公司在推什么工具,评论区也能看到用户需求。 • Hacker News → 技术社…

数1的个数

//题意:给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。 //例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5…

企业网站快速建站深圳网站搭建找谁

一、pytest跳过功能 1. 使用 pytest.skip 装饰器跳过测试用例 Pytest中的 pytest.skip 装饰器允许你跳过指定的测试用例。你可以将该装饰器应用于测试函数或测试类上。 import pytestpytest.mark.skip(reason"Skipping this test case") def test_skip():assert 1…

青州网站建设优化推广wordpress 网站图标设置

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…

有没有做门面设计的网站网站备案掉了怎么办

烘焙预计算 前文:续_直接和间接光照这一篇小结:Unity烘焙预计算烘焙前的场景设置1.2.Contribute GI如下图:物体的Static和面板上的Contribute GILightmap的UV模型自带Lightmap的UVUnity 自动展Lightmap的UV1.3.Meta PassMeta Pass代码如下:1.4.Light Mode模式

做外贸都做哪些网站好免费下载网站开发国内外研究状况

感谢使用护卫神云查杀系统&#xff0c;该软件专门查杀网页木马&#xff0c;完全免费&#xff0c;欢迎大家使用。远程FTP查杀部分&#xff1a;1、点击【远程查杀】图标&#xff0c;如上图所示&#xff0c;进入远程FTP查杀页面&#xff1a;1、首先要求输入远程FTP连接信息&#x…

网站域名注册管理中心书店商城网站设计

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 stack容器queue容器 stack容器 是什么&#xff1f;功能是什么&#xff1f;常用接口是什么&#xff1f;局限性有哪些&#xff1f;优势又有哪些&#xff1f; 栈容器&#xff0c;先进…

相亲网站绑定微信怎么做南昌个人网站制作怎么做

一、video-player 介绍 video-player 是一个基于 video.js 的视频播放器组件&#xff0c;它提供了丰富的功能&#xff0c;包括视频播放、暂停、快进、快退、全屏、音量控制等。 video-player 的使用非常简单&#xff0c;如下安装即可。 npm install video.js videojs-player…