ADC(模数转换)用于将模拟信号转换为数字信号。
# ============ 接线 ============
# 模拟器件(如电位器抽头)→ GP26(ADC0)
# Pico 上只有 GP26 / GP27 / GP28 这三个脚能接模拟量
# =============================
from machine import ADC, Pin
# 创建 ADC 对象
adc = ADC(Pin(26)) # GP26 即 ADC0
# 读取 16 位值(0-65535)
value = adc.read_u16()
print(value)
# 读取原始值(12 位,0-4095)
# 注意:不同板子可能有不同实现
# value_12bit = adc.read()
# 参考电压(通常为 3.3V)
VREF = 3.3
# 计算电压
value = adc.read_u16()
voltage = value * VREF / 65535
print(f'电压: {voltage:.2f}V')
# 假设电池通过分压电路连接到 ADC
# 例如:10kΩ + 10kΩ 分压,测量点在中间
adc = ADC(Pin(26))
# 计算电池电压(分压后)
def read_battery():
value = adc.read_u16()
voltage_divided = value * 3.3 / 65535
battery_voltage = voltage_divided * 2 # 分压比 1:2
return battery_voltage
print(f'电池电压: {read_battery():.2f}V')
# ============ 接线 ============
# 电位器左端脚 → 3V3 | 右端脚 → GND | 中间脚 → GP26(ADC0)
# =============================
from machine import ADC, Pin
import time
adc = ADC(Pin(26))
while True:
value = adc.read_u16()
voltage = value * 3.3 / 65535
percent = value / 65535 * 100
print(f'值: {value}, 电压: {voltage:.2f}V, 百分比: {percent:.1f}%')
time.sleep(0.5)
# ============ 接线 ============
# 不用接任何器件 —— 传感器在芯片内部(通道 4)
# =============================
from machine import ADC, Pin
import time
# 使用 Pico 内置温度传感器(RP2040 芯片内部)
# 注意:不同板子的实现可能不同
temp_sensor = ADC(4) # 通道 4 = 芯片内部温度传感器,不对应任何 GPIO
# 温度转换函数
def read_temperature():
# 参考:RP2040 数据手册
value = temp_sensor.read_u16()
voltage = value * 3.3 / 65535
# 温度公式:T = 27 - (V - 0.706)/0.001721
temperature = 27 - (voltage - 0.706) / 0.001721
return temperature
while True:
temp = read_temperature()
print(f'温度: {temp:.1f}°C')
time.sleep(1)
# ============ 接线 ============
# 光敏电阻与固定电阻分压,分压点 → GP26(ADC0)
# =============================
from machine import ADC, Pin
import time
# 假设使用光敏电阻 + 固定电阻的分压电路
adc = ADC(Pin(26))
while True:
value = adc.read_u16()
# 值越小,光线越强
light_level = 100 - (value / 65535 * 100)
print(f'光线强度: {light_level:.1f}%')
time.sleep(1)
# ============ 接线 ============
# 模拟器件 → GP26(ADC0),接法与「读取电位器」相同
# =============================
from machine import ADC, Pin
import time
adc = ADC(Pin(26))
# 移动平均滤波
def read_smoothed(samples=10):
values = []
for _ in range(samples):
values.append(adc.read_u16())
time.sleep_ms(10)
return sum(values) / len(values)
while True:
smooth_value = read_smoothed()
voltage = smooth_value * 3.3 / 65535
print(f'平滑值: {smooth_value:.0f}, 电压: {voltage:.2f}V')
time.sleep(0.5)
read_u16() 返回 16 位值(高位补零)