电位器是一种可变电阻器,旋转或滑动改变电阻值,从而把机械位置变成电压信号。
3V3 和 GND,中间脚(抽头)接 ADCGP26 / GP27 / GP28 三个 ADC 脚[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
3V3GNDGP26(ADC0)GP26 / GP27 / GP28,其它脚不能当模拟输入# ============ 接线 ============
# 电位器左脚 → Pico 3V3
# 电位器右脚 → Pico GND
# 电位器中间脚(抽头)→ Pico GP26(ADC0)
# ADC 引脚只能用 GP26 / GP27 / GP28
# =============================
from machine import ADC, Pin
import time
adc = ADC(Pin(26)) # GP26 即 ADC0
print('开始读取电位器...')
while True:
value = adc.read_u16() # 读 16 位值(0-65535)
voltage = value * 3.3 / 65535 # 换算成电压(参考电压 3.3V)
percent = value / 65535 * 100 # 换算成百分比
print(f'值: {value:5d}, 电压: {voltage:.2f}V, 百分比: {percent:.1f}%')
time.sleep(0.5)
# ============ 接线 ============
# 电位器左脚 → Pico 3V3
# 电位器右脚 → Pico GND
# 电位器中间脚 → Pico GP26(ADC0)
# =============================
from machine import ADC, Pin
import time
adc = ADC(Pin(26))
# 多次采样取平均,减少抖动
def read_smoothed(samples=10):
total = 0
for _ in range(samples):
total += adc.read_u16()
time.sleep_ms(10)
return total / samples
print('带平滑滤波的电位器读取')
while True:
smooth = read_smoothed()
voltage = smooth * 3.3 / 65535
percent = smooth / 65535 * 100
print(f'平滑值: {smooth:.0f}, 电压: {voltage:.2f}V, 百分比: {percent:.1f}%')
time.sleep(0.5)
# ============ 接线 ============
# 电位器:左脚 → 3V3,右脚 → GND,中间脚 → GP26(ADC0)
# 板载 LED 在 GP25,直接用 PWM 调亮度(不用外接)
# =============================
from machine import ADC, Pin, PWM
import time
adc = ADC(Pin(26))
pwm = PWM(Pin(25)) # GP25 = 板载 LED
pwm.freq(1000)
print('用电位器调节 LED 亮度')
while True:
value = adc.read_u16()
pwm.duty_u16(value) # 直接用 ADC 值当占空比(0-65535)
percent = value / 65535 * 100
print(f'亮度: {percent:.1f}%')
time.sleep(0.1)
GP26 / GP27 / GP28(对应 ADC0/1/2)能读模拟量,数字脚读不到电压read_u16() 返回 0–65535,对应 0–3.3V;超过 3.3V 会饱和且可能伤脚3V3 和 GND,抽头电压就不会超过 3.3V,安全Q: 电位器读数一直是 0 或一直是 65535? A: 多半中间脚没接到 ADC 脚,或两脚接成了 3V3 和中间脚。确认中间脚接 GP26,两端分别接 3V3 和 GND。
Q: 读数抖动厉害怎么办? A: 用进阶示例的多次平均滤波,或在抽头到地并一个小电容(如 0.1µF)。
Q: 想用两个电位器?
A: 再接一个到 GP27(ADC1),新建 ADC(Pin(27)) 即可,三脚接法相同。