Что не так с моим следующим светодиодным кодом для Raspberry Pi3? - PullRequest
0 голосов
/ 30 марта 2019

Итак, я реализовал базовую связь клиент-сервер, мой компьютер - клиент, а raspberry pi3 - сервер.
Я пытаюсь запустить код, в котором по умолчанию светофор светится в красно-желто-зеленом порядке.в цикле, пока мой компьютер не запускает код Python, который отправляет сигнал на мой Raspberry Pi, который будет прослушивать общий порт, при получении сигнала код должен светиться только зеленым светом, в то время как другие два становятся низкими, и если естьдальнейших сигналов нет, тогда следует вернуться к выполнению красно-желто-зеленого в цикле до следующего прерывания.

Я пробовал много вещей, но общая тема - либо код не перемещается, пока c, addr = s.accept() выполняется или цикл if, состоящий из выполнения по умолчанию красно-желто-зеленого в цикле, никогда не запускается, но по прерыванию выполняется цикл else.Также попытался иметь if (c, addr = s.accept()) в одной строке, но я всегда получал синтаксическую ошибку.EDITED: эта точная версия кода не может выполнить цикл if, но успешно выполняет цикл else.

import socket
import RPi.GPIO as GPIO
import time
s = socket.socket()
host = '' #ip of raspberry pi
port = 12345
s.bind((host, port))
#while True:
while True:

    c=0
    s.listen(5)
    c, addr = s.accept()       
    if c==0:
        import RPi.GPIO as GPIO
        import time
        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(18, GPIO.OUT)
        GPIO.setup(23, GPIO.OUT)
        GPIO.setup(24, GPIO.OUT)
            # Red
        GPIO.output(18,GPIO.HIGH)
        time.sleep(2)
                # yellow
        GPIO.output(18,GPIO.LOW)
        GPIO.output(23,GPIO.HIGH)

        time.sleep(1)
                # Green
        GPIO.output(18,GPIO.LOW)
        GPIO.output(23,GPIO.LOW)
        GPIO.output(24,GPIO.HIGH)
        time.sleep(2)

        GPIO.output(24,GPIO.LOW)       

    else:
        print ('Got connection from',addr)
        import RPi.GPIO as GPIO
        import time
        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(24,GPIO.OUT)
        GPIO.setup(18, GPIO.OUT)
        GPIO.setup(23, GPIO.OUT)
        print ("Green LED on")
        GPIO.output(24,GPIO.HIGH)
        GPIO.output(18,GPIO.LOW)
        GPIO.output(23,GPIO.LOW)
        c.send('Ambulance was detected')
        time.sleep(1)
        print ("LED off")
        GPIO.output(24,GPIO.LOW)
        c.close()

Ожидается: по умолчанию красно-желто-зеленый светится один за другим, но при получении сигнала этоследует сразу только загореться зеленым, а затем возобновить в том же цикле ryg.Фактический результат: невозможно запустить ryg в цикле, но я могу загореться зеленым светодиодом при прерывании.Любое решение?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...