2017-02-02 43 views
0

所以,我正在使用python進行編程。通過一個cwiid庫,我連接了我的wii控制器。這工作正常。GPIO引腳在我的程序中途無法工作

但是,我的Wii控制器連接槽藍牙後,突然LED不能工作。 連接之前,相同的代碼行可以工作,但連接後不再工作。這怎麼可能?

我的完整代碼:

if __name__ == '__main__': 
from sys import path 

path.append("..") 


import RPi.GPIO as GPIO 
from time import sleep 
import os 
import cwiid 
from MotorPwm2 import MotorPwm 
from GPIOFuckUp import GPIOFuckUp 
from Basis import Basis 

GPIOFuckUp() 

GPIO.setmode(GPIO.BCM) 
GPIO.setwarnings(False) 

motor = MotorPwm([10, 9, 8, 7]) 
basis = Basis() 
startbool = False 

running = True 

left_light = 21 
right_light = 20 
left_siren = 16 
right_siren = 26 

GPIO.setup(left_light, GPIO.OUT) 
GPIO.setup(right_light, GPIO.OUT) 
GPIO.setup(left_siren, GPIO.OUT) 
GPIO.setup(right_siren, GPIO.OUT) 

left_pin = GPIO.PWM(left_light, 1000) 
right_pin = GPIO.PWM(right_light, 1000) 
left_pin_s = GPIO.PWM(left_siren, 1000) 
right_pin_s = GPIO.PWM(right_siren, 1000) 

left_pin.start(100) 
right_pin.start(100) 
left_pin_s.start(0) 
right_pin_s.start(0) 

# Code above works. Leds turn on, with no problems. 

def turn_on_left(): 
    dim_left(100) 

def turn_on_right(): 
    dim_right(100) 

def turn_on_lefts(): 
    dim_lefts(100) 

def turn_on_rights(): 
    dim_rights(100) 

def turn_on(): 
    print 'aan' 
    dim_left(100) 
    dim_right(100) 

def turn_off_lefts(): 
    dim_lefts(0) 

def turn_off_rights(): 
    dim_rights(0) 

def turn_off_left(): 
    dim_left(0) 

def turn_off_right(): 
    dim_right(0) 

def turn_off(): 
    dim_left(0) 
    dim_right(0) 

def dim(percentage): 
    dim_left(percentage) 
    dim_right(percentage) 

def dim_left(percentage): 
    left_pin.ChangeDutyCycle(percentage) 
    print 'left' 

def dim_right(percentage): 
    right_pin.ChangeDutyCycle(percentage) 
    print 'right' 

def dim_lefts(percentage): 
    left_pin_s.ChangeDutyCycle(percentage) 

def dim_rights(percentage): 
    right_pin_s.ChangeDutyCycle(percentage) 

def siren_loop(): 
    while running: 
     dim_lefts(100) 
     dim_rights(100) 
     sleep(0.05) 

     turn_off_lefts() 
     turn_off_rights() 
     sleep(0.05) 

     dim_rights(100) 
     sleep(0.05) 

     turn_on_rights() 
     sleep(0.05) 

     dim_lefts(100) 
     sleep(0.05) 

     dim_lefts(0) 
     sleep(0.05) 

# Def things above also work. Copied the code in another file just to try 
the leds, and that also worked. 


button_delay = 0.1 

print 'Press 1 + 2 on your Wii Remote now ...' 

# Here the controller is connecting. After it is connected the leds turn of 
# Before the following print lines are printed. 

# Connect to the Wii Remote. If it times out 
# then quit. 
try: 
    wii = cwiid.Wiimote() 
    #GPIO.output(PIN_LED, 0) 

except RuntimeError: 
    print "Error opening wiimote connection" 
    #GPIO.output(PIN_LED, 0) 
    # Uncomment this line to shutdown the Pi if pairing fails 
    os.system("sudo reboot") 
    quit() 

print 'Wii Remote connected...\n' 
print 'Press some buttons!\n' 
print 'Press PLUS and MINUS together to disconnect and quit.\n' 


wii.rpt_mode = cwiid.RPT_BTN 


while True: 
    buttons = wii.state['buttons'] 

    # If Plus and Minus buttons pressed 
    # together then rumble and quit. 
    if (buttons - cwiid.BTN_PLUS - cwiid.BTN_MINUS == 0): 
     print '\nClosing connection ...' 
     wii.rumble = 1 
     #GPIO.output(PIN_LED, 1) 
     sleep(1) 
     wii.rumble = 0 
     #GPIO.output(PIN_LED, 0) 
     os.system("sudo reboot") 
     exit(wii) 


    # Button presses below work and print the correct lines. Just no leds :(

    if (buttons & cwiid.BTN_LEFT): 
     print 'Left pressed' 
     motor.left_forward(50) 
     sleep(button_delay) 

    elif (buttons & cwiid.BTN_RIGHT): 
     print 'Right pressed' 
     motor.right_forward(50) 
     sleep(button_delay) 

    elif (buttons & cwiid.BTN_UP): 
     print 'Up pressed' 
     motor.forward(100) 
     sleep(button_delay) 

    elif (buttons & cwiid.BTN_DOWN): 
     print 'Down pressed' 
     motor.backward(100) 
     sleep(button_delay) 

    elif (buttons & cwiid.BTN_A): 
     print 'A' 
     if startbool == False: 
      print 'start aan' 
      startbool = True 
      sleep(0.5) 
     else: 
      print 'start uit' 
      startbool = False 
      sleep(0.5) 

    elif (buttons & cwiid.BTN_1): 
     if running: 
      turn_on() 
      sleep(5) 
     print '1' 
     print 'Licht 5 sec aan' 

    elif (buttons & cwiid.BTN_2): 
     print '2' 
     print 'sirene 5 sec aan' 
     siren_loop() 
     sleep(5) 


    else: 
     GPIO.cleanup() 

因此,例如,開始轉值,當我運行程序上的LED。發生這種情況,LED燈亮起。但是,然後,在wii遙控器連接之後,它們關閉並且不可能再次打開。

+0

可否請你增加了一些評論您的代碼行,使之更容易理解這部分壞了?謝謝, –

+0

更新了一些評論。 – Noralie

+0

難道是初始連接失敗?我看到你有一個運行時異常子句重啓pi。暫時,您可以將其更改爲打印語句以節省時間。只要打印出「連接失敗」,而不是重新啓動。如果你看到這個文本,這意味着你的覆盆子pi正在重新啓動,這就是程序停止的原因。請讓我知道發生了什麼,謝謝。 –

回答

0

再次嘗試了幾個小時後,我終於找到了問題。

最後一行說:

else: 
    GPIO.cleanup() 

其中重置了所有的引腳,因此他們沒有工作。刪除其他的東西使所有的東西再次運作。

現在我知道這個問題似乎很簡單的xD

相關問題