GPIO 引脚在我的程序进行到一半时不再工作



所以,我在我的pi上用python编程。通过一个cwiid库,我正在连接我的wii控制器。这工作正常。

但是,在我的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遥控器连接后,它们会关闭并且无法再次打开。

又尝试了几个小时后,我终于找到了问题所在。

最后一行说:

else:
    GPIO.cleanup()

这重置了所有引脚,因此它们不起作用。删除其他使一切再次工作。

现在我知道问题似乎很简单 xD

相关内容

  • 没有找到相关文章

最新更新