首页 > 解决方案 > 在按钮按下时运行并在按钮按下时中断

问题描述

我正在设置一个脚本,以便在循环中以随机顺序触发 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 的时间和支持,非常感谢!

标签: pythonraspberry-pi3

解决方案


推荐阅读