python - 在按钮按下时运行并在按钮按下时中断
问题描述
我正在设置一个脚本,以便在循环中以随机顺序触发 433MHz 设备。我必须编写脚本才能进行排序,但是我希望有两个按钮,一个用于启动脚本,一个用于在出现任何问题时中断它。
我对 python 还很陌生,如果你们能提供任何帮助,我将不胜感激。
from time import sleep
import random
from rpi_rf import RFDevice
rfdevice = RFDevice(17)
for c in range(0,15):
#Randomly Choose 1st Trap
trap = random.randint(1,3)
#Randomly Choose Interval Time
wait_for_next = random.uniform(2,5)
sleep(wait_for_next)
if trap == 1:
#Code for calling trap 1 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE1-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 2:
#Code for calling trap 2 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE2-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 3:
#Code for calling trap 3 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE3-REDACTED>, 1, 353)
rfdevice.disable_tx()
#Randomly Choose 2nd Trap
trap = random.randint(1,3)
#Randomly Choose Interval Time
wait_for_next = random.uniform(2,5)
sleep(wait_for_next)
if trap == 1:
#Code for calling trap 1 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE1-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 2:
#Code for calling trap 2 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE2-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 3:
#Code for calling trap 3 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE3-REDACTED>, 1, 353)
rfdevice.disable_tx()
#Randomly Choose Interval Time for Reload
wait_for_next = random.uniform(7,9)
sleep(wait_for_next)
列出的脚本总共可以触发两个设备 30 次,但是最后一个盒子没有键盘或鼠标,所以我希望使用一个按钮来启动脚本,并在出现任何问题时使用一个按钮来中断它。
感谢任何看到这个的人,我期待着出现的任何建议。
!!!编辑!!!
这是我更新的脚本
import RPi.GPIO as GPIO
import time
import os
import subprocess
from time import sleep
import random
from rpi_rf import RFDevice
rfdevice = RFDevice(17)
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
input_state = GPIO.input(23)
if input_state == False:
print('Execute')
for c in range(0,1):
#Randomly Choose Trap
trap = random.randint(1,3)
#Randomly Choose Interval Time
wait_for_next = random.uniform(2,5)
sleep(wait_for_next)
if trap == 1:
#Code for calling trap 1 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE1-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 2:
#Code for calling trap 2 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE2-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 3:
#Code for calling trap 3 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE3-REDACTED>, 1, 353)
rfdevice.disable_tx()
#Randomly Choose 2nd Trap
trap = random.randint(1,3)
#Randomly Choose Interval Time
wait_for_next = random.uniform(2,5)
sleep(wait_for_next)
if trap == 1:
#Code for calling trap 1 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE1-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 2:
#Code for calling trap 2 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE2-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 3:
#Code for calling trap 3 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE3-REDACTED>, 1, 353)
rfdevice.disable_tx()
time.sleep(0.2)
该脚本在按钮按下时执行,现在我需要它在不同的按钮(GPIO 24)上中止。
!!!编辑2!!!
想我已经做到了,如果按下并按住按钮,下面的脚本可以工作
import RPi.GPIO as GPIO
import time
import os
import subprocess
from time import sleep
import random
from rpi_rf import RFDevice
rfdevice = RFDevice(17)
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
input_state = GPIO.input(23)
if input_state == False:
print('Execute')
for c in range(0,1):
#Randomly Choose Trap
trap = random.randint(1,3)
#Randomly Choose Interval Time
wait_for_next = random.uniform(2,5)
input_state = GPIO.input(24)
if input_state == False:
print('Abort')
break
sleep(wait_for_next)
input_state = GPIO.input(24)
if input_state == False:
print('Abort')
break
if trap == 1:
#Code for calling trap 1 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE1-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 2:
#Code for calling trap 2 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE2-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 3:
#Code for calling trap 3 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE3-REDACTED>, 1, 353)
rfdevice.disable_tx()
#Randomly Choose 2nd Trap
trap = random.randint(1,3)
#Randomly Choose Interval Time
wait_for_next = random.uniform(2,5)
input_state = GPIO.input(24)
if input_state == False:
print('Abort')
break
sleep(wait_for_next)
input_state = GPIO.input(24)
if input_state == False:
print('Abort')
break
if trap == 1:
#Code for calling trap 1 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE1-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 2:
#Code for calling trap 2 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE2-REDACTED>, 1, 353)
rfdevice.disable_tx()
elif trap == 3:
#Code for calling trap 3 - Number xx
rfdevice.enable_tx()
rfdevice.tx_code(<CODE3-REDACTED>, 1, 353)
rfdevice.disable_tx()
print('Complete')
time.sleep(0.2)
非常感谢@furas 的时间和支持,非常感谢!
解决方案
推荐阅读
- gatsby - 如何在 gatsby 源插件上加载本地图像?
- python - AttributeError:“NoneType”对象在 Keras 中没有属性“_inbound_nodes”
- node.js - 无法从 nginx 反向代理后面的 node.js docker 容器访问静态 css 和 js 文件
- reactjs - 使用 firebase 在 React js 中工作:TypeError: Cannot read property 'uid' of null
- java - 如何用Java逐块解析大型XML文件
- javascript - 节点逐行从文件中读取数据...处理它并将其保存回问题
- java - 设置所有活动操作栏文本
- css - 桌面和手机的 css 文件之间的反应生产混乱
- angular - 主题类型上不存在专有“地图”
' - scala - 高阶函数的元组模式匹配