Я настраиваю скрипт для запуска устройств 433 МГц в случайном порядке в цикле. Я должен написать сценарий, чтобы сделать это отсортированным, однако мне нужны две кнопки, одна для запуска сценария и одна для его прерывания, если что-то пойдет не так.
Я довольно новичок в 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 за его время и поддержку, этоочень ценится!