1. import RPi.GPIO as GPIO
  2. import threading
  3. import subprocess
  4. GPIO.setmode(GPIO.BOARD)
  5. GPIO.setwarnings(False)
  6. pins = [ ['prev', 13], ['pause', 12], ['next', 11] ]
  7. threads = []
  8. for i in pins:
  9. GPIO.setup(i, GPIO.IN, pull_up_down=GPIO.PUD_UP)
  10. def mpcctl(fn):
  11. cmd = [ 'mpc', '-h', '192.168.0.2' ]
  12. if fn == 'prev' or fn == 'next':
  13. arg = str(fn)
  14. elif fn == 'pause':
  15. if 'playing' in subprocess.check_output(cmd.split()):
  16. arg = 'pause'
  17. elif 'paused' in subprocess.check_output(cmd.split()):
  18. arg += 'play'
  19. cmd.append(arg)
  20. subprocess.call(cmd)
  21. def pinchk(pin):
  22. while true:
  23. GPIO.wait_for_edge(int(pin[1]), GPIO.FALLING)
  24. #mpcctl(str(pin[0]))
  25. # test:
  26. print('pin',pin,'has fallen')
  27. for i in range(3):
  28. threads.append(threading.Thread(name=' '.join(pins[i]), target=pinchk, args=(pins[i])))
  29. threads[i].start()