es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“GPIO Event Detect provoca la activación del evento incorrecto.”

Estoy construyendo un sistema de botón de ayuda en Raspberry PI que reproduce un archivo wav sobre el sistema de megafonía cuando se presiona un botón.
He copiado un poco de código de aquí: https://stackoverflow.com/questions/34208951/raspberry-pi-with-gpio-input-buttons que funciona bastante bien excepto lo siguiente. Si presiono el botón 1, se reproduce el sonido 1 como se espera. Cuando presiono el botón 2, se reproduce el sonido 1.
Si, al iniciar el programa, presiono primero el botón 2, entonces sí se reproduce el sonido 2, pero si presiono el botón 1, se reproduce el sonido 2.
Aquí está el código:

#!/usr/bin/env python
#coding: utf8

import time
from time import sleep
import os
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24, GPIO.IN)

try:
vtc1 = 7 # Tiempo del archivo de audio 1
vtc2 = 6 # Tiempo del archivo de audio 2

vtc = 0         # Tiempo actual del archivo de audio
started_t = 0   # Tiempo de inicio

while True:     
    if GPIO.input(23) and time.time() - started_t > vtc:
        vtc = vtc1
        started_t = time.time()
        print("Botón 1 presionado")
        os.system('omxplayer -o local /audio_project/sound_1.WAV &')
    time.sleep(0.200)

    if GPIO.input(24) and time.time() - started_t > vtc:
        vtc = vtc2
        started_t = time.time()
        print("Botón 2 presionado")
        os.system('omxplayer -o local /audio_project/sound_2.WAV &')
    time.sleep(0.200)

except:
print(“¡Ocurrió otro error o excepción!”)
finally:
GPIO.cleanup() # esto asegura una salida limpia

¿Cómo puedo hacer que se reproduzca el archivo correcto al presionar el segundo botón?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que la variable started_t no se reinicia cuando se presiona el segundo botón. Para solucionar esto, puede agregar una línea de código para reiniciar started_t al tiempo actual cuando se presiona el segundo botón:

    if GPIO.input(24) and time.time() - started_t > vtc:
        vtc = vtc2
        started_t = time.time()  # Agregue esta línea
        print("Botón 2 presionado")
        os.system('omxplayer -o local /audio_project/sound_2.WAV &')
    time.sleep(0.200)
    

Comments are closed.