Светодиод будет гореть только при нажатии кнопки?

Я пытаюсь включить светодиод с помощью кнопки, но он остается включенным только при нажатии кнопки. Как я могу это исправить ?

ниже код, который я использую:

# Import the required module. 
import RPi.GPIO as GPIO
# Set the mode of numbering the pins. 
GPIO.setmode(GPIO.BCM)
#GPIO pin 10 is the output. 
GPIO.setup(13, GPIO.OUT)
#GPIO pin 8 is the input. 
GPIO.setup(6, GPIO.IN)
#Initialise GPIO13 to low (False) so that the LED is off. 
GPIO.output(13, False)
while 1:
    if GPIO.input(6):
        GPIO.output( 13, True)
    else:
        GPIO.output( 13, False)
#keep LED on till the button pressed again then it turns off?

[Edit] Когда я запускаю код, светодиод загорается (как я и хочу), затем при нажатии кнопки светодиод включается, но горит только пока кнопка удерживается нажатой. Я хочу, чтобы одно нажатие включало светодиод, и он оставался включенным до тех пор, пока кнопка не будет нажата снова.


person George Traynor    schedule 04.05.2016    source источник
comment
Строка 9: не будет ли False выключаться светодиод?   -  person interesting-name-here    schedule 04.05.2016
comment
когда я запускаю код, светодиод загорается (как я и хочу), затем при нажатии кнопки светодиод включается, но он остается включенным только до тех пор, пока кнопка удерживается нажатой. Я хочу, чтобы одно нажатие включало светодиод, и он оставался включенным до тех пор, пока кнопка не будет нажата снова.   -  person George Traynor    schedule 04.05.2016


Ответы (3)


Попробуй это:

isPressed = False
isOn = False
while 1:
    if GPIO.input(6):
        isPressed = True
    elif isPressed:
        isOn = not isOn
        GPIO.output( 13, isOn)
        isPressed = False

Это включает отпускание кнопки (поведение кнопки по умолчанию в большинстве ОС). Наоборот:

isPressed = False
isOn = False
while 1:
    if GPIO.input(6):
        if not isPressed:
            isPressed = True
            isOn = not isOn
            GPIO.output( 13, isOn)
    else:
        isPressed = False
person Aconcagua    schedule 04.05.2016

Ваш код удерживает светодиод один, пока нажимается кнопка.

Вы можете реализовать механизм переключения, сохраняя в переменной состояние светодиода.

...
ledState = False
buttonPressed = False;

 ...

 if GPIO.input(6): 
     if not buttonPressed: 
        buttonPressed = True
        ledState = not ledState
        GPIO.output(13, ledState)
 else 
     buttonPressed = False
person Luci    schedule 04.05.2016
comment
если GPIO.input(6) ^ SyntaxError: неверный синтаксис - person George Traynor; 04.05.2016

Если вы используете gpiozero для светодиода и кнопки,

Это код, который я написал. Не лучший код, но он может вам помочь.

def onLight():
garageLed = LED(21)  # Yellow LED lights up when the user is authorised
button = Button(13, pull_up=False)
reading = True;
while reading:
    if (garageLed.is_lit == False): 
        button.wait_for_press()  
        button.when_pressed = ledON() 
        button.wait_for_release()
        button.when_released = ledON()
    elif (garageLed.is_lit == True): 
        button.wait_for_press()
        button.when_pressed = ledOFF()
        button.wait_for_release()
        button.when_released = ledOFF()
person LiveaLearn    schedule 18.06.2018