尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ESP32 读取旋转编码器

ESP32 读取旋转编码器
📅 发布时间:2026/6/19 7:53:33

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

相关新闻

  • 数1的个数
  • 基于RSSI修正的定位算法分析
  • 接口测试流程+jmeter并发+面试题(总结) - 指南

最新新闻

  • 机器学习模型生产化落地的四大工程断层与实战解法
  • 大模型推理服务的工程化实战:从实时性到安全合规
  • 行驶美国纪念碑谷公路,红色孤峰像走进西部电影
  • FoMo-X:模块化异常检测基础模型的可解释性框架
  • 选购非标定制气缸,这些靠谱企业别错过 - mypinpai
  • 从零实战Heartbleed漏洞:靶场搭建、手工复现与自动化检测脚本开发

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号