Python#
1. Python简介#
Python是一种高级、通用的编程语言,自1991年首次发布以来,因其简洁的语法、强大的库支持和广泛的应用场景而受到欢迎。Python支持多种编程范式,包括面向对象、过程式和函数式编程,使得开发者能够灵活选择最适合项目需求的编程风格。Python广泛应用于数据分析、机器学习、人工智能、Web开发、自动化脚本等领域。其丰富的第三方库(如NumPy、Pandas、Matplotlib等)和框架(如Django、Flask)极大地扩展了其功能,使得Python成为新手和专业开发人员的理想选择。
2. 接线图#

节点 |
连接方式 |
|---|---|
树莓派PICO |
旋转编码器 |
GPIO 18 |
CLK |
GPIO 19 |
DT |
GPIO 20 |
SW |
3. 测试代码(测试软件版本:Thonny 3.3.3)#
# ----Keyes----
#####################################################
from machine import Pin
from time import sleep
makerobo_RoAPin = 18 # 旋转编码器CLK管脚
makerobo_RoBPin = 19 # 旋转编码器DT管脚
makerobo_BtnPin = 20 # 旋转编码器SW管脚
makerobo_globalCounter = 0 # 计数器值
makerobo_flag = 0 # 是否发生旋转标志位
makerobo_Last_RoB_Status = 0 # DT 状态
makerobo_Current_RoB_Status = 0 # CLK 状态
# 初始化工作
def makerobo_setup():
global clk_RoA
global dt_RoB
global sw_BtN
clk_RoA = Pin(makerobo_RoAPin, Pin.IN) # 旋转编码器CLK管脚,设置为输入模式
dt_RoB = Pin(makerobo_RoBPin, Pin.IN) # 旋转编码器DT管脚,设置为输入模式
sw_BtN = Pin(makerobo_BtnPin, Pin.IN, Pin.PULL_UP) #设置管脚为输入模式,上拉至高电平(3.3V)
# 初始化中断
sw_BtN.irq(trigger=Pin.IRQ_FALLING, handler=makerobo_btnISR)
# 旋转编码方向位判断函数
def makerobo_rotaryDeal():
global makerobo_flag # 是否发生旋转标志位
global makerobo_Last_RoB_Status
global makerobo_Current_RoB_Status
global makerobo_globalCounter # 计数器值
makerobo_Last_RoB_Status = dt_RoB.value()
while(not clk_RoA.value()): # 判断CLK管脚的电平变化来区分方向
makerobo_Current_RoB_Status = dt_RoB.value()
makerobo_flag = 1 # 发生旋转标记
if makerobo_flag == 1: # 标记位为1 发生了旋转
makerobo_flag = 0 # 复位标记位
if (makerobo_Last_RoB_Status == 0) and (makerobo_Current_RoB_Status == 1):
makerobo_globalCounter += 1 # 逆时针方向
if (makerobo_Last_RoB_Status == 1) and (makerobo_Current_RoB_Status == 0):
makerobo_globalCounter -= 1 # 顺时针方向
# 中断函数
def makerobo_btnISR(chn):
global makerobo_globalCounter
makerobo_globalCounter = 0 # 计数器清零
# 循环函数
def makerobo_loop():
global makerobo_globalCounter
makerobo_tmp = 0 # 当前状态判断
while True:
makerobo_rotaryDeal() # 旋转编码方向位判断函数
if makerobo_tmp != makerobo_globalCounter: # 判断状态值发生改变
print('makerobo_globalCounter = %d' % makerobo_globalCounter) # 打印出状态信息
makerobo_tmp = makerobo_globalCounter # 将当前状态赋值到下一个状态,避免重复打印
# 程序入口
if __name__ == '__main__':
makerobo_setup() # 调用初始化工作
makerobo_loop() # 调用循环函数
4. 测试结果#
按照接线图连接好各个部分并上传代码,顺时针旋转编码器时,计数器的值会增加,而逆时针旋转编码器时,计数器的值会减少,如下图所示:
