Avrei bisogno di un aiuto su un programma che ho fatto con Python , questo programma controlla il cambiamento dello stato d'ingresso di un pin del Gpio , ma questo causa l'utilizzo della cpu al 100%, vorrei che questo almeno si riduca al 50% vi allego immagine del top .
questo e il file Python :
Code: Select all
#! /usr/bin/python
##########################################
# #
# gestione DTFM comandi MMDVM #
# 2018 by I3YBD #
# #
##########################################
##########################################
# leggenda codici Tastiera #
# #
# * = 11 # = 12 A = 13 B =14 C = 15 #
# D = 0 0 = 10 #
# #
# A= stop DMR > attivo FUSION #
# B= stop FUSION > attivo DMR #
# #= reset pagina #
# *= Reset totale Raspberry #
# 1 - Digitare la PW ingresso " 1954 " #
# 2 - conferma 3 toni #
# 2 - errata 2 toni #
# 2 - reset pagina 1 tono lungo #
# 3 - digitare funzione #
# funz 1 = OFF TX #
# Funz 2 = Disponibile #
# Funz 3 = usata dal Sistema #
# Funz 4 = usata dal Sistema #
# Digitare A uscire DMR > FUSION #
# Digitare B uscire FUSION > DMR #
# 4 - Digitare # per uscire #
##########################################
import subprocess
import os
import time
import RPi.GPIO as gpio
gpio.setwarnings(False)
# Iingresso scheda DTFM
Q1=5 # gpio05
Q2=22 # gpio22
Q3=27 # gpio27
Q4=17 # gpio17
SQ=4 # gpio04
# uscite
K1=6 # gpio06
K2=12 # gpio12
K3=16 # gpio16
K4=26 # gpio26
# variabili
A=0 # contatore password radio
B=0 # conversione decimale DTMF
T=0 # dato confronto PW
C=0 # contattore passwor codec
PW_radio_ok=0 # reset password
PW_codec_ok=0 # reset password
K1_set=False # controllo rele
K2_set=False # Libero
K3_set=False # usato dal sistema
K4_set=False # usato dal sistema
start_DMR=1 # start DMR
start_FUS=0 # start Fusion
stop_DMR=0
stop_FUS=0
ST_codec=0 # start codec
ST_radio=0 # start radio
# PassWord
PW_radio=19 # password ingresso mmdvm_key "1954 "
PW_codec=36 # password ingresso Codec " 061018 "
DTMF=False
gpio.setmode(gpio.BCM)
gpio.setup(Q1,gpio.IN)
gpio.setup(Q2,gpio.IN)
gpio.setup(Q3,gpio.IN)
gpio.setup(Q4,gpio.IN)
gpio.setup(K1,gpio.OUT, initial=1)
gpio.setup(K2,gpio.OUT, initial=1)
gpio.setup(K3,gpio.OUT, initial=1)
gpio.setup(K4,gpio.OUT, initial=1)
gpio.setup(SQ, gpio.IN, pull_up_down=gpio.PUD_DOWN)
def Dec(cod):
R1=gpio.input(Q1)
R2=gpio.input(Q2)
R3=gpio.input(Q3)
R4=gpio.input(Q4)
B=R1+(R2*2)+(R3*4)+(R4*8)
global A
global T
global C
global PW_radio_ok
global PW_codec_ok
global ST_codec
global K1_set
global K2_set
global K3_set
global K4_set
global start_DMR
global start_FUS
global stop_DMR
global stop_FUS
A=A+1
T=T+B
C=C+1
if PW_radio_ok == 0:
if A == 4:
A=0
# programma ingresso comando DTFM
if T == PW_radio:
PW_radio_ok=1
RX_OK()
T=0
A=0
else:
RX_KO()
A=0
T=0
else:
if B == 12 :
reset()
A=0
T=0
else:
# inizio programma comando rele
if B == 1 and PW_radio_ok == 1:
if K1_set == False:
gpio.output(K1,0) # comando Chiusura
K1_set=True
else:
gpio.output(K1,1) # comando Apertura
K1_set=False
if B == 2 and PW_radio_ok == 1:
if K2_set == False:
gpio.output(K2,0)
K2_set=True
else:
gpio.output(K2,1)
K2_set=False
if B == 12 and PW_radio_ok == 1: # reset totale
reset()
PW_radio_ok=0
T=0
A=0
if B == 13 and PW_radio_ok == 1: # tasto "A" cambio codec
os.system("sudo systemctl stop mmdvmhost_dmr.service")
time.sleep(5)
stop_DMR=0
os.system("sudo systemctl start mmdvmhost_fus.service")
time.sleep(2)
start_FUS=1
if B == 14 and PW_radio_ok == 1: # tasto "B" cambio codec
os.system("sudo systemctl stop mmdvmhost_fus.service")
time.sleep(5)
stop_FUS=0
os.system("sudo systemctl start mmdvmhost_dmr.service")
time.sleep(2)
start_DMR=1
if B == 11 and PW_radio_ok == 1: # tasto "*" reset Raspberry
time.sleep(2)
os.system("sudo reboot")
def RX_OK(): # tre impulsi buono
time.sleep(1)
gpio.output(K3,0)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(.5)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(.5)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(.5)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K3,1)
def RX_KO(): # due impulsi errato
time.sleep(1)
gpio.output(K3,0)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(.5)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(.5)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K3,1)
def reset(): # un impulso lungo
time.sleep(.1)
gpio.output(K3,0)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(2)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K3,1)
def Key(): # due impulsi veloci key pervento
time.sleep(.5)
gpio.output(K3,0)
time.sleep(.5)
gpio.output(K4,0)
time.sleep(.5)
gpio.output(K4,1)
time.sleep(.5)
gpio.output(K3,1)
#Ieriamo un avento che causera la chiamata della funzione "Cambio di stato"
# ogni volta che viene rilevato un fronte di salita sul pin SQ
gpio.add_event_detect(SQ,gpio.RISING, callback=Dec, bouncetime=100)
while 1:
if DTMF:
DTMF=False
else:
DTMF=True