python while for 只循环一次,Python和Raspbery-Pi:如何在while循环中只执行一次操作

用户使用RPi创建了一个简单的监控系统,当杠杆被按下时应发送电子邮件。目前的问题是,首次按下杠杆能成功发送一封邮件,但之后即使杠杆保持按下状态,程序只会每3秒打印已发送邮件而不再发送邮件。松开杠杆后,程序不会重启,需要手动中断并重新启动才能再次发送邮件。用户尝试了调整if循环和清理GPIO通道,但问题依然存在。代码中使用了RPi.GPIO库和pellets_sendmail模块。
摘要由CSDN通过智能技术生成

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

我需要的是,当杠杆不断被按下时,我想发一封电子邮件。当杠杆释放后,我希望程序“重启”,这样当杠杆在未来某个时间再次按下时,另一封邮件就会被发送。在

我已经得到了单独的导入邮件脚本工作和硬件设置似乎正在工作。在

结果是:用sudo python pellets.py启动程序

按住控制杆,1封邮件正在成功发送,但程序每3秒钟打印一次“已发送1封邮件”,直到我松开控制杆

(?). 在

当再次按下操纵杆并保持不动时,不发送邮件(?),

但是程序一直在打印“已发送1封邮件”,直到我发布

杠杆。在

为了让程序再次发送邮件,我需要CTRL+C并中断程序并手动重新启动程序。在

我错过了什么?在为什么程序不发送第二封邮件时,我释放,重新按下并按住

杠杆?在

为什么程序一直打印文本消息而我保留

操纵杆按下?当我设置sent_mail=1时,循环现在不应该结束吗?在

我试着清理if循环中的GPIO通道,但是没有像我想的那样工作。然后文本继续打印,即使在我释放杠杆。但是没有更多的邮件被发送。在

这是我的代码: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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值