2016-05-29 8 views
0

Ich habe eine Android Mobile App erstellt, die eine BPM Variable (zwischen 0 und 160) über PubNub sendet.Programmierung von Metronome Python Skript mit PubNub für Raspberry Pi

Mein Ziel ist es, eine LED auf meinem Raspberry Pi (GPIO 18) auf jedem Beat basierend auf dem BPM-Wert blinken zu lassen. Wie Sie im Code sehen können. Allerdings, wenn ich mein Skript starte. Nichts scheint zu passieren. Die LED bleibt ausgeschaltet. Wenn ich versuche, Daten meiner Variablen (zum Beispiel den BPM-Wert) zu drucken - um zu sehen, ob etwas passiert. Nichts erscheint auf meinem Raspberry Pi

Ich habe keine Ahnung, was könnte fehlen oder falsch mit meinem Skript, da es auch keine Fehlermeldungen gibt. Ich habe auch überprüft, dass meine App die Daten über PubNub sendet.

Hier ist mein Skript so weit:

#!/usr/bin/python 
import RPi.GPIO as GPIO 
import time 
import timeit 
from threading import Thread 
from pubnub import Pubnub 
GPIO.setwarnings(False) 


GPIO.setmode(GPIO.BOARD) 
GPIO.setup(18, GPIO.OUT) 

global BlinkLED = 160 

pubnub = Pubnub(publish_key = 'cencored', 
subscribe_key = 'cencored') 
channel = 'metronoom' 

def _callback(msg, n): 

    def BlinkLED(BPM): 
     BeatsPerSecond = BPM/60 
     while true: 
      strStatus = "LED is turned on" 
      GPIO.output(18,False); time.sleep(BeatsPerSecond) 
      GPIO.output(18,True) 
      strStatus = "LED is turned off" 
      print (strStatus) 
    BlinkLED(msg['BPM'])  


def _error(m): 
    print(m) 

pubnub.subscribe(channels=channel, callback=_callback, error=_error) 

Antwort

0

Ich habe die Lösung gefunden und es jetzt funktioniert. Ich werde es hier teilen. Ich habe immer noch ein Problem, dass es wegen des "while: True" in einer Schleife stecken bleibt. Ich kann keine Möglichkeit finden, die Schleife zu verlassen, sobald ein neuer BPM-Wert an das Pi gesendet wurde. Also muss ich das Skript jedes Mal neu starten, wenn ich ein anderes Tempo bekommen möchte.

#!/usr/bin/python 
import RPi.GPIO as GPIO 
import time 
import timeit 
from pubnub import Pubnub 


pubnub = Pubnub(publish_key = 'pub-c-b03db6ec-221e-483a-9582-9875ca362260', 
subscribe_key = 'sub-c-13c8a43a-df92-11e5-aff5-02ee2ddab7fe') 
channel = 'metronoom' 

global BPM 
global Divider 
Divider = 60.000000 
Divider2 = 2.000000 
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(18, GPIO.OUT) 
def BlinkLED(BPM): 
    while True: 
     GPIO.setwarnings(False) 
     format(BPM, '.6f') 
     GPIO.setmode(GPIO.BCM) 
     GPIO.setup(18, GPIO.OUT) 
     BeatsPerSecond = Divider/BPM 
     Interval = BeatsPerSecond/Divider2 
     print(BPM) 
     print(BeatsPerSecond) 
     GPIO.output(18,True) 
     GPIO.output(18,False) 
     time.sleep(BeatsPerSecond) 

def _callback(msg, n): 
    print(msg) 
    BlinkLED(msg["BPM"]) 

def _error(m): 
    print(m) 

pubnub.subscribe(channels=channel, callback=_callback, error=_error)