from machine import Pin, I2C,PWM
import ssd1306
import time
#引脚定义
clk=Pin(25,Pin.IN,Pin.PULL_UP)
dt=Pin(26,Pin.IN,Pin.PULL_UP)
sw=Pin(27,Pin.IN,Pin.PULL_UP)
led_red=Pin(14,Pin.IN,Pin.PULL_UP)
LDE_geel=Pin(32,Pin.IN,Pin.PULL_UP)
#定义变量
bz_jishu=0 #用于定义菜单数标志
bz_jiemian=0 #用于界面标志
bz_jiemian1=0
bz_jishu1=0
dj_pinlv=0 #电机的频率设置
dj_maichong=0
dj_zhuangtai=0
dj_setmaichong=0
set_ml=0
bz_jishu2=0
#定义菜单列表
meun_one=['Frequency','MPulse','Start up','Return']
meun_two=['pulses:','Save ']
meun_three=['Mpulse:','Svae ']
meun_four=['F:','M:','QUIT']
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, Wokwi!', 10, 10)
oled.show()
#定义显示函数
def display_oen(one):
global bz_jiemian
global bz_jishu
global dj_pinlv
global dj_maichong
global set_ml
global bz_jishu1
global bz_jishu2
oled.fill(0)
oled.text('Welcome',15,0)
oled.text('-'*20,0,10)
if bz_jiemian==0: #用于编码器的正转加1或减1,来显示每条信息的位置
for i in range(len(meun_one)):
if i==bz_jishu:
oled.text('> '+meun_one[i],0,20+i*10)
else:
oled.text(meun_one[i],0,20+i*10)
elif bz_jiemian==1:
oled.text('-'*20,0,10)
oled.text(str(dj_pinlv),65,20)
for a in range(len(meun_two)):
if a==bz_jishu1:
oled.text('>'+meun_two[a],0,20+a*10)
else:
oled.text(meun_two[a],0,20+a*10)
elif bz_jiemian==2:
oled.text('-'*20,0,10)
oled.text(str(set_ml),65,20)
for b in range(len(meun_three)):
if b==bz_jishu2:
oled.text('>'+meun_three[b],0,20+b*10)# 影响的在什么位置显示变量值
else:
oled.text(meun_three[b],0,20+b*10)
elif bz_jiemian==3:
oled.text('F:'+str(dj_pinlv),10,20)
oled.text('M:'+str(set_ml),10,30)
oled.text('> EXTEX',10,50)
oled.show()
#定义编码器函数
def clk_pul(clk):#注意传入参数为菜单列表的数量
global bz_jishu
global bz_jiemian
global set_ml
global dj_pinlv
global bz_jishu1
if bz_jiemian==0:
if dt.value()==1:#用于采集编码器的加1还是减1.
bz_jishu=bz_jishu+1
if bz_jishu==4:
bz_jishu=0
print(bz_jishu)
else:
bz_jishu=bz_jishu-1
if bz_jishu<0:
bz_jishu=3
print(bz_jishu)
elif bz_jiemian==1: #频率设置
if bz_jishu1==0:
if dt.value()==1:
dj_pinlv=dj_pinlv+1
else:
dj_pinlv=dj_pinlv-1
elif bz_jiemian==2:
if bz_jishu2==0:
if dt.value()==1:
set_ml=set_ml+1
else:
set_ml=set_ml-1
display_oen(bz_jishu)
#定义编码器按键函数
def sw_pull(sww):
global bz_jishu
global bz_jiemian
global bz_jiemian1
global bz_jishu1
global bz_jishu2
lingshi=0
if bz_jiemian==0:
if bz_jishu==0:
bz_jiemian=1
display_oen(bz_jishu)
print('按键启动1')
print(bz_jiemian)
bz_jishu1=0
elif bz_jishu==1:
bz_jiemian=2
display_oen(bz_jishu)
bz_jishu2=0
elif bz_jishu==2:
bz_jiemian=3
display_oen(bz_jishu)
elif bz_jishu==3:
pass
elif bz_jiemian==1:
if bz_jishu1==1:
bz_jiemian=0
else:
bz_jishu1=1
display_oen(bz_jishu)
elif bz_jiemian==2:
if bz_jishu2==1:
bz_jiemian=0
else:
bz_jishu2=1
elif bz_jiemian==3:
bz_jiemian=0
display_oen(bz_jishu)
clk.irq(clk_pul,Pin.IRQ_FALLING) #编码器转动中断
sw.irq(sw_pull,Pin.IRQ_FALLING) #编码器按键