2016-05-29 113 views
0

我創建了一個Android移動應用程序,它通過PubNub發送一個BPM變量(0到160之間)。用PubNub編程節拍器Python腳本,用於樹莓派

我的目標是根據BPM值在每個節拍上使我的Raspberry Pi(GPIO 18)上的LED閃爍。正如你在代碼中看到的那樣。但是,當我啓動我的腳本。似乎沒有任何事情發生。 LED保持關閉。 當我嘗試打印我的變量的數據(例如BPM值) - 查看是否有任何事情發生。我的樹莓派沒有彈出

我不知道什麼可能會丟失或與我的腳本錯誤,因爲它不給我任何錯誤消息。 我也已驗證我的應用程序通過PubNub發送數據。

這是到目前爲止我的腳本:

#!/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) 

回答

0

我已經找到了解決方案,它現在的作品。 我會在這裏分享。由於「while:True」,我仍然有一個問題,它陷入循環。一旦新的BPM值發送到Pi,我無法找到退出循環的方法。所以我每次想要獲得不同的節奏時都必須重新運行腳本。

#!/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)