from machine import ADC, Pin
from time import sleep
# 初始化ADC
x_pin = ADC(Pin(26))
y_pin = ADC(Pin(27))
# 初始化SEL按钮
sel_button = Pin(25, Pin.IN, Pin.PULL_UP)
#上拉电阻 (Pin.PULL_UP):当按钮或开关在连接时将引脚拉到地(GND),采用上拉电阻。未连接时,它会保持高电平。
#稳定性:未设置上拉或下拉电阻的引脚在悬空时可能会读取到随机的高低电平,因为它受到环境电噪声的影响,读取的结果是不稳定的。
# 设置ADC宽度和衰减
x_pin.width(ADC.WIDTH_10BIT)#ADC宽度(width)
y_pin.width(ADC.WIDTH_10BIT)#ADC.WIDTH_10BIT:将电压转换为0到1023的数字值(10位分辨率)。
x_pin.atten(ADC.ATTN_11DB)#ADC衰减(attenuation)
y_pin.atten(ADC.ATTN_11DB)#ADC.ATTN_11DB:测量范围约为0到3.9V。
def read_joystick():
# 读取X和Y的原始值
#read() 用于ADC对象
x_val = x_pin.read()
y_val = y_pin.read()
if x_val>512:
x_move='左'
elif x_val<512:
x_move='右'
else:
x_move=''
if y_val>512:
y_move='上'
elif y_val<512:
y_move='下'
else:
y_move=''
# 读取SEL按钮的状态
#value() 用于数字输入
sel_pressed = not sel_button.value()
# 打印读取的值
print(f'X: {x_move}, Y: {y_move}, M: {"点击" if sel_pressed else ""}')
while True:
read_joystick()
sleep(0.1) # 每0.1秒读取一次