Wemos D1 上的 MicroPython esp8266:- TypeError: 无法将 Pin 转换为 int



代码:

from machine import Pin
from machine import ADC
from time import sleep_ms
x = ADC(Pin(4, Pin.IN))
y = ADC(Pin(5, Pin.IN))
x.atten(ADC.ATTN_11DB)
y.atten(ADC.ATTN_11DB)
while True:
x_val = x.read()
y_val = y.read()
print('Current position:{},{}'.format(x_val,y_val))
sleep_ms(300)

错误:

Traceback (most recent call last):
File "<stdin>", line 5, in <module>
TypeError: can't convert Pin to int

我想知道我犯了什么错。

我尝试将str连接到int,并将int连接到str。它不起作用。

TypeError表示您使用的对象(变量)与预期类型不同。错误告诉您,在本例中,在第5行,需要int,但代码中使用了Pin

代码的第5行是:

x = ADC(Pin(4, Pin.IN))

并且它确实包含CCD_ 8。查看machine.ADC类的文档可以发现这应该很好:

class machine.ADC(id, *, sample_ns, atten)

访问与id标识的源关联的ADC。此id可以是整数(通常指定通道号)、Pin对象或底层机器支持的其他值。

但是,库是否一直支持此功能?浏览旧版本的库显示,情况并非总是如此。在1.11版本之前,预计会出现int:

class machine.ADC(id=0, *, bits=12)

创建与给定引脚关联的ADC对象。

所以我假设您使用的是旧版本的库。要解决此问题,您应该将库更新到最新版本(至少v1.12),或者阅读正在使用的版本的文档并相应地更新代码。对于旧版本,您应该编写

x = ADC(4)
y = ADC(5)

最新更新