我一直在尝试使用带有 Smbus 库的 I2C 总线将命令从 Raspberry PI 3 发送到 Arduino。 编写代码以便您可以将 PWM 值从树莓派发送到 arduino 以驱动电机,同时 arduino 返回有关电机速度的变量。 检测工作正常,程序运行几个时期,直到它崩溃并抛出错误 121 远程 I/O。 在网上进行了大量搜索后,我尝试应用修复程序来解决该问题,但似乎没有任何效果。
Python 代码抛出错误
bus.write_i2c_block_data(0x13, 0, data) # Error 121 after a random runtime
block = bus.read_i2c_block_data(0x13, 0, numBytes) # Error 121 after a random runtime
我正在探索下一个解决方案:
当电机发生变化(速度、方向)时,连接似乎变得不稳定,电路上可能存在来自这些电荷的噪声。
是否可以忽略错误,刷新总线以获取额外信息并重新启动进程?
非常感谢您的帮助。
答案 0 :(得分:0)
经过更多研究,我发现了一篇关于 raspberry stackexchange 的帖子,指出了我面临的问题。
while True:
<all your code>
if <some error occurs>:
time.sleep(10)
continue
正确的说法是使用try and except IOError调用continue on error
while True:
try:
bus.write_byte()
except IOError:
continue
这会忽略总线通信错误并继续运行程序。在下一个时期,该函数将再次运行。
正在寻找一种方法来清除带有剩余数据的总线。