当我按下关闭开关时,offSwitch 布尔值从 1 变为 0,因此控制器会看到开关,并且 offRelay 应激活。我的逻辑绝对是问题所在,哈哈。这是我在 Pi Pico 上的一个学习项目。
当我在#main 之前进行物理更改并强制关闭Relay(1) 时,继电器会激活吗?所以我的 Pin 图是正确的,我只是不确定我是否以正确的方式处理这个问题。
from machine import Pin
from time import sleep
#var's pinouts
offRelay = Pin(18,Pin.OUT)
offSwitch = Pin(2,Pin.IN, Pin.PULL_UP)
leadRelay = Pin(19,Pin.OUT)
leadFloat = Pin(6, Pin.IN, Pin.PULL_UP)
lagFloat = Pin(10, Pin.IN, Pin.PULL_UP)
lagRelay = Pin(20, Pin.OUT)
hwwFloat = Pin(14, Pin.IN, Pin.PULL_UP)
hwwRelay = Pin(21, Pin.OUT)
offLight = Pin(3, Pin.OUT)
pumpOneLight = Pin(7, Pin.OUT)
pumpTwoLight = Pin(11, Pin.OUT)
hwwLight = Pin(15, Pin.OUT)
#Functions
#main code
while offSwitch == 1:
if offSwitch == 0:
offRelay(1)
if offSwitch(0) and leadFloat(0):
leadRelay(1)
offLight(1)
pumpOneLight(1)
if offSwitch(0) and leadFloat(0) and lagFloat(0):
lagRelay(1)
pumpTwoLight(1)
if hwwFloat == 0:
hwwRelay(1)
hwwLight(1)
#Test activity
print(offSwitch.value(),"off float")
print(offRelay.value(), "off relay")
print(leadFloat.value(), "lead float")
print(leadRelay.value(), "lead relay")
print(offLight.value(), "off float led light")
print(lagFloat.value(), "lag float")
print(lagRelay.value(), "lag relay")
print(pumpTwoLight.value(), "pump 2 led light")
print(hwwFloat.value(), "hww float")
print(hwwRelay.value(), "hww relay")
代码中有一些错误,导致继电器逻辑无法按预期工作。让我们分解一下:
-
条件评估 :正在使用
offSwitch(0)
、leadFloat(0)
等,这 不 会像预期的那样检查引脚的值。在 Python 中,括号用于函数调用。要检查引脚状态,应该使用offSwitch.value() == 0
、leadFloat.value() == 0
,依此类推。 -
while
循环条件 :的while offSwitch == 1:
循环会在offSwitch
的值变为0
时立即退出。这意味着循环内的代码将永远不会执行,因为在它有机会改变任何东西之前条件已经为假。 -
继电器控制 :要切换继电器,应该使用
offRelay.value(1)
而不是offRelay(1)
。
以下是代码的更正版本:
from machine import Pin
from time import sleep
# ...(引脚定义与之前相同)...
# main 代码
while True: # 持续循环
if offSwitch.value() == 0:
offRelay.value(1) # 激活 offRelay
if offSwitch.value() == 0 and leadFloat.value() == 0:
leadRelay.value(1)
offLight.value(1)
pumpOneLight.value(1)
if offSwitch.value() == 0 and leadFloat.value() == 0 and lagFloat.value() == 0:
lagRelay.value(1)
pumpTwoLight.value(1)
if hwwFloat.value() == 0:
hwwRelay.value(1)
hwwLight.value(1)
# ...(其余代码与之前相同)...
在这个更正后的版本中:
-
while True:
循环确保代码持续运行。 -
条件语句现在使用
pin.value() == 0
正确检查引脚状态。 -
继电器控制已更正为
relay.value(1)
。
在实现这些更改后,的继电器逻辑应该按预期工作。请记住,在将代码上传到的设备之前,务必保存更改。
标签:python,raspberry-pi-pico From: 78776248