首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和Raspbery :如何在一个while循环中只执行一次操作

Python和Raspbery :如何在一个while循环中只执行一次操作
EN

Stack Overflow用户
提问于 2015-02-12 12:31:02
回答 1查看 186关注 0票数 0

第一次来这里。我不是一个程序员,我试图用我的RPi创建一个简单的监控系统,但是遇到了一些问题。希望有人能在我的路上帮我?

我几乎完全按照这里所示的设置(除了按钮是一个杠杆/开关):http://razzpisampler.oreilly.com/ch07.html#SEC11.1,并在这里遵循了一些关于GPIO清理的建议:XdIC0

我需要的是,当杠杆被不断地按下,我想发一封电子邮件。当杠杆释放,我希望程序“重新启动”,以便当杠杆再次按住在未来的某个时候,另一封邮件被发送。

我已经使单独导入的邮件脚本工作,硬件设置似乎正在工作。

所发生的是:

  1. sudo python pellets.py启动程序
  2. 按下并按住杠杆,一封邮件被成功发送,但程序继续每3秒打印“发送一封邮件”,直到我释放杠杆(?)。
  3. 当杠杆被按下并举行第二次,没有邮件发送(?),但程序一直打印“发送1邮件”,直到我释放杠杆。

对于程序再次发送邮件,我需要CTRL+C和中断程序和重新启动程序手动。

我遗漏了什么?

  • 为什么程序不发送第二封邮件时,我释放,重压和握住杠杆?
  • 为什么当我按下杠杆时,程序会一直打印文本信息?当我设置sent_mail=1时,循环不是已经结束了吗?

我试图清除if-循环中的GPIO通道,但这不像我想的那样有效。然后,文本继续打印,即使在我释放杠杆。然而,没有更多的邮件被发送。

这是我的代码:

代码语言:javascript
复制
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

GPIO.setup(GPIO.IN, pull_up_down=GPIO.PUD_UP)

mail_sent = 0

try:
    while True:
        input_state = GPIO.input(12)
        if input_state == 0 and mail_sent == 0:
            import pellets_sendmail
            print ('SENT 1 MAIL')
            mail_sent = 1
            time.sleep(3)
        else:
            mail_sent = 0
except KeyboardInterrupt:
    GPIO.cleanup(12)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-12 12:42:21

你的问题其实是两个问题。

首先,它将连续打印“发送1封邮件”,因为whether子句将重置您的mail_sent,不管杠杆是打开还是mail_sent不是0。您可能需要指定,在mail_sent可以重置之前,杠杆应该是向上的:

代码语言:javascript
复制
    if input_state == 0 and mail_sent == 0:
        ...
    elif input_state == 1: # Whatever your "up" state is
        mail_sent = 0

其次,您只能导入另一个python模块一次。我想pellets_sendmail.py会发送您的邮件信息。第一次导入该文件时,该文件将正常运行,但之后不会再次执行该文件。我建议在pellets_sendmail.py中创建一个发送消息的函数,而不是让脚本直接发送消息。

代码语言:javascript
复制
import pellets_sendmail    # put this at the top of your script
...
     if input_state == 0 and mail_sent == 0:
        pellets_sendmail.sendmail()
     ...

下面是关于编写函数的教程,如果你不知道该怎么做的话。只需将用于发送邮件的任何代码移动到它自己的离散函数中(我在我的示例中称它为sendmail(),但您可以任意命名它)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28477542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档