首页 > 编程问答 >蟒蛇逻辑?满足条件时继电器不激活

蟒蛇逻辑?满足条件时继电器不激活

时间:2024-07-22 09:29:59浏览次数:5  
标签:python raspberry-pi-pico

当我按下关闭开关时,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")


代码中有一些错误,导致继电器逻辑无法按预期工作。让我们分解一下:

  1. 条件评估 :正在使用 offSwitch(0) leadFloat(0) 等,这 会像预期的那样检查引脚的值。在 Python 中,括号用于函数调用。要检查引脚状态,应该使用 offSwitch.value() == 0 leadFloat.value() == 0 ,依此类推。

  2. while 循环条件 :的 while offSwitch == 1: 循环会在 offSwitch 的值变为 0 时立即退出。这意味着循环内的代码将永远不会执行,因为在它有机会改变任何东西之前条件已经为假。

  3. 继电器控制 :要切换继电器,应该使用 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

相关文章

  • 一天一点点,第四天Python基础
    第一天:一天一点点。Python基础-CSDN博客第二天:一天一点点,接上章Python基础-CSDN博客第三天:一天一点点,第三天Python基础(循环语句)-CSDN博客推导式推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。推导式是一种强大且简洁的语法,适用于生......
  • Python - for循环不使用正则表达式附加数组
    以下代码从URL获取版本号,然后对于每个版本号,转到该版本号的页面并使用文件名的特定模式填充数组。生成的数组应包含每个版本号的文件名列表,但它似乎只包含早期版本(2.6)。使用print语句,我可以看到代码的工作原理是它获取sha256sums.asc文件-所有这些文件,所有版本。我猜......
  • 使用 callable_iterator (re.finditer) 导致 Python 冻结
    我有一个为文本的每一行调用的函数。deftokenize_line(line:str,cmd=''):matches=re.finditer(Patterns.SUPPORTED_TOKENS,line)tokens_found,not_found,start_idx=[],[],0print(matches)formatchinmatches:pass#Rest......
  • Python 的 time.sleep - 永远不会醒来
    我认为这将是那些简单的问题之一,但它让我感到困惑。[停止媒体:我是对的。找到了解决方案。查看答案。]我正在使用Python的单元测试框架来测试多线程应用程序。很好而且很直接-我有5个左右的工作线程监视一个公共队列,以及一个为它们制作工作项的生产者线程......
  • python中使用mitmproxy的http模块出错
    我有一个使用mitmproxyhttp函数的代码,它在这里惨败:defmain(stdscr):try:parser=argparse.ArgumentParser(description='NetSourNetworkAnalyzer')parser.add_argument('--proxy',action='store_true',help='EnableH......
  • 使用python图像去噪没有获得所需的重建图像
    我是python机器学习的初学者,我正在编写一个程序,使图像变得嘈杂,然后我的程序输出重建的图像。我正在使用加性高斯白噪声并使用前馈神经网络。我的程序显示真实图像、噪声图像和重建图像。这些是我通常得到的结果。有人知道如何解决这样的问题吗?这是我的代码:ap......
  • 使用 pip 22.3.1 和 python 3.11.0 安装 MetaTrader5 错误
    我正在尝试使用pip在Windows上安装MetaTrader5。python--versionPython3.11.0pip--versionpip22.3.1pipinstallMetaTrader5ERROR:CouldnotfindaversionthatsatisfiestherequirementMetaTrader5(fromversions:none)ERROR:Nomatchingdistribu......
  • 在 Python 中溶解线条
    我有一个包含多行的形状文件。我正在寻找一种方法来消除所有的接触线。这在ArcMap中是可能的,但似乎在Python和QGIS中都无法做到:之前:所需的输出:这需要在多行上完成,因此像QGIS合并一样手动执行不是一个选项。在ArcMap中,我曾经使用“溶解”......
  • 一个简单的问题(python、串行通信和arduinos)
    只是一个关于小脚本的快速问题,由于某种原因无法工作我运行了这个脚本:importserialimporttimeimportturtledefserialreading():serialPort=serial.Serial(port="COM5",baudrate=9600,bytesize=8,timeout=2,stopbits=serial.STOPBITS_ONE......
  • 我在 Windows 10 上运行 Python 代码后控制台立​​即关闭
    虽然我在代码末尾使用input(),但在Windows10(IDLE之外)的窗口中输入名称后,控制台仍然立即关闭,并且我看不到结果。我该怎么做才能阻止控制台关闭?#!python3name=input('Enteryourname:')print('Hello'+name)input('pressEntertoexit:')你在代码末尾......