Stap 6: Code! PT. 1
Het volgende is een basic-programma om te spelen van een lied wanneer het signaal van de lichtbundel IR is gebroken (AKA wanneer u lopen tussen de IR-straal en de IR ontvanger).
Hier is een link naar de github code.
Het nummer van uw keuze op te slaan een gemakkelijk-aan-herinner me-en-type map, in dit voorbeeld gebruikte ik "Mapnaam" aan te wijzen van de titel van de map waarin de mp3 is opgeslagen.
Opmerking: Deze wordt afgedrukt op een bericht op het scherm telkens wanneer die het liedje wordt gespeeld. Zulks gehanteerd voor mijn behoeften, als ik wilde hebben een logboek voor elke tijd muziek wordt gespeeld, maar deze code is natuurlijk gewoon een overzicht van wat er mogelijk is. Aanpassen aan uw behoeften. Ook, houd er rekening mee dat de afstand uitgeschakeld worden kan; Dit is belangrijk in Python dus zorg ervoor dat uw code "tabify" alvorens het in werking en controleer of de afstand consistent is.
#DIY Motion Triggered Music Player
import time
from threading import Thread
import RPi.GPIO as GPIO
import subprocess
class AutoTrigger():
def call_omxplayer(self):
print ("playing " + self.file_path)
pid = subprocess.call(['omxplayer', self.file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
self.is_running = False
def play_song(self):
if not self.is_running:
self.song_thread = Thread(target=self.call_omxplayer, args=())
self.song_thread.start()
self.is_running = True
def __init__(self,pin, file_path):
self.pin = pin
self.file_path = file_path
self.is_running = False
GPIO.setup(pin, GPIO.IN)
'''
This is a hack (the callback) thanks for python closures!
'''
GPIO.add_event_detect(self.pin, GPIO.FALLING, callback=lambda x: self.play_song(), bouncetime=10)
def main(): GPIO.setmode(GPIO.BCM)
AutoTrigger(25, '/home/pi/FolderName/SongName.wav')
AutoTrigger(24, '/home/pi/FolderName/SongName2.mp3')
print ("Ready: !")
try:
while True:
pass
except KeyboardInterrupt:
GPIO.cleanup()
if __name__ == '__main__':
main()