私は Raspberry Pi で python スクリプトを実行しています。4 つの gpio ピンを使用しています。3 つを出力として、1 つを入力として使用しています。入力が低く設定されると、出力がすべて異なる時間にオン/オフされ、pygame.mixer を使用して効果音が再生されるという手順がアクティブになります。入力によって手順がアクティブにならなくなるという問題が発生し始めました。さらに調べてみると、120回しか機能しないことがわかり、入力によって手順がアクティブ化されなくなり、エラーメッセージが表示されなくなりました。私はPythonでのコーディングの専門家ではないので、私のコードはおそらく面倒です。これがコードです。
import RPi.GPIO as GPIO
import sys
import time
import pygame
import os
from array import *
print "loading program"
GPIO.setmode(GPIO.BCM)
GpioPinsOut=[4,17,27]
for a in range (0, len(GpioPinsOut)):
GPIO.setup(GpioPinsOut[a], GPIO.OUT)
GpioPinsIn=[7,]
for y in range (0, len(GpioPinsIn)):
GPIO.setup(GpioPinsIn[y], GPIO.IN)
start=0
prevTriggered=0
triggered=0
elapsed=0
vars=[0,]
inVars=[0]
prevInVars=[5,5]
sceneNames=["Night"]
onoffVar= [1, 0]
onoffVar2= ["On", "Off"]
outputNamesFinal=['output1','output2','output3']
outputNames= [[['output1','output2','output3'],['output1','output2','output3','reset']]]
outputs= [[[4 ,17 ,27 ],[4 ,17 ,27 ,'reset']]]
times= [[[0.0 ,0.0 ,0.0 ],[11.7 ,18.0 ,18.0 ,18.0 ]]]
printGpioVar=[[[0 ,0 ,0 ],[0 ,0 ,0 ,0 ]]]
outputsAlwaysOn=[[]]
for va in range (0, len(GpioPinsOut)):
GPIO.output(GpioPinsOut[va], False)
for za in range (0, len(outputsAlwaysOn[0])):
GPIO.output(outputsAlwaysOn[0][za], True)
effects=[[],[]]
effectslocations=[['/root/audio/soundeffect.wav']]
pygame.mixer.init(44100, -16, 2, 2048)
for ba in range (0, len(effectslocations)):
for bb in range (0, len(effectslocations[ba])):
effectsVar = pygame.mixer.Sound(effectslocations[ba][bb])
effects[ba].append(effectsVar)
effectsNumbers=[[0 ]]
effectsTimes= [[0.0]]
sfxVAR = 0
numberOfTimes=0
print "program ready"
try:
while True:
for z in range (0, len(GpioPinsIn)):
if GPIO.input(GpioPinsIn[z]) == False:
inVars[z]=0
else:
inVars[z]=1
if inVars[0] == 0:
triggered = 1
if triggered == 1:
if prevTriggered != triggered:
print "Trigger Activated"
if start == 0:
print "Start Time Activated"
numberOfTimes+=1
print numberOfTimes
start = time.clock()
elapsed = time.clock() - start
for g in range(0, len(effectsTimes[0])):
if elapsed >= effectsTimes[0][g]:
if sfxVAR == 0:
effects[0][effectsNumbers[0][g]].play()
sfxVAR = 1
for c in range (0, len(times[0])):
for d in range (0, len(times[0][c])):
if elapsed >= times[0][c][d]:
if outputs[0][c][d] == "reset":
print "done with %s procedures"%sceneNames[0]
for e in range (0, len(printGpioVar[0])):
for f in range (0, len(printGpioVar[0][e])):
printGpioVar[0][e][f]=0
start=0
prevTriggered=0
sfxVAR=0
triggered=0
else:
if printGpioVar[0][c][d]==0:
GPIO.output(outputs[0][c][d], onoffVar[c])
print "Turned %s %s"%(onoffVar2[c], outputNames[0][c][d])
printGpioVar[0][c][d]=1
prevTriggered = triggered
for g in range (0, len(inVars)):
prevInVars[g]=inVars[g]
except KeyboardInterrupt:
GPIO.cleanup()
sys.exit()