GPIO Python Проверка, изменилось ли состояние ввода - PullRequest
0 голосов
/ 30 октября 2018

Добрый вечер всем,

Пожалуйста, смотрите код ниже. Есть ли в любом случае после того, как входы 23 и 24 и выход 4 были активированы, я могу постоянно проверять, не стал ли какой-либо из входов ложным, и если да, отправить на выход 4 высокий уровень?

Любая помощь будет принята с благодарностью.

B.

import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)

GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(18,GPIO.OUT)
GPIO.output(18,0)
GPIO.setup(4,GPIO.OUT)
GPIO.output(4,1)


while True:
    if(GPIO.input(23) ==1):
        print("UP")
        GPIO.output(18, GPIO.LOW)
        time.sleep(2)

    if(GPIO.input(23) ==0):
        print("DOWN")
        GPIO.output(18, GPIO.HIGH)
        time.sleep(2)

    input_state = GPIO.input(24) and GPIO.input(23)
    if input_state == True:
        GPIO.output(4, GPIO.LOW)

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Кажется, это работает до сих пор. Скорее всего, это изменится, когда я добавлю больше оборудования в систему.

import pigpio, time

Debounce = 0.5

Input23 = 23
Input24 = 24

Output18 = 18
Output4 = 4

pi_GPIO = pigpio.pi()

pi_GPIO.set_mode(Input23, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input23 , pigpio.PUD_UP)
pi_GPIO.set_mode(Input24, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input24 , pigpio.PUD_UP)
pi_GPIO.set_mode(Output18, pigpio.OUTPUT)
pi_GPIO.set_mode(Output4, pigpio.OUTPUT)

while True:

    if pi_GPIO.read(Input23):
        pi_GPIO.write(18, 0)
        print("ON")
        time.sleep(Debounce)
    else:
        pi_GPIO.read(Input23)
        pi_GPIO.write(18, 1)
        print("OFF")
        time.sleep(Debounce)

    if pi_GPIO.read(Input24) and pi_GPIO.read(Input23):
        pi_GPIO.write(4, 0)
        print("Green")
        time.sleep(Debounce)
    else:
        pi_GPIO.read(Input24)
        pi_GPIO.write(4, 1)
        print("Red")
        time.sleep(Debounce)
0 голосов
/ 30 октября 2018

Не зная схемы и / или того, что вы пытаетесь сделать со схемой, я не смогу улучшить код. но это должно работать:

import pigpio, time

Debounce = 0.02

Input23 = 23
Input24 = 24

Output18 = 18
Output4 = 4

pi_GPIO = pigpio.pi()

pi_GPIO.set_mode(Input23, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input23 , pigpio.PUD_UP)

pi_GPIO.set_mode(Input24, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input24 , pigpio.PUD_UP)

pi_GPIO.set_mode(Output18, pigpio.OUTPUT)
pi_GPIO.set_pull_up_down(Output18, pigpio.PUD_UP)

pi_GPIO.set_mode(Output4, pigpio.OUTPUT)


def cbf(gpio, level, tick):
    time.sleep(Debounce) # only used if using a button or any mechanical switch. Change value according to the type of switch, see datasheet and/or experimentation
    if pi_GPIO.read(Input23):
        print("Input23 UP")
        pi_GPIO.write(Output18, 0)

    else:
        print("Input23 DOWN")
        pi_GPIO.write(Output18, 0)


cb = pi_GPIO.callback(Input23, pigpio.FALLING_EDGE, cbf)


while True:
    if pi_GPIO.read(Input24) and pi_GPIO.read(Input23):
        time.sleep(Debounce) # only used if using a button or any mechanical switch. Change value according to the type of switch, see datasheet and/or experimentation
        if pi_GPIO.read(Input24) and pi_GPIO.read(Input23):  # only used if using a button or any mechanical switch. Change value according to the type of switch, see datasheet and/or experimentation
            pi_GPIO.write(Output4, 0)

Функция CBF будет вызываться всякий раз, когда происходит изменение значения, независимо от цикла while.

Вам нужно будет установить pigpio, если у вас его еще нет. более полнофункциональная библиотека RPi.GPIO, которая также поддерживает удаленный доступ, если она включена на устройстве pi.

pip install pigpio

Дайте мне знать, если есть какие-либо подробности, которые вы можете предоставить.

...