Как собрать два скрипта Python Pi3 Gpio - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужна помощь в написании кода на Python.

У меня Raspberry Pi3.У меня есть два сценария, которые выполняют разные функции, но я хочу, чтобы они работали вместе.

Первый из них управляет датчиком pir со светодиодом в качестве выхода.Когда Пир поднимается высоко, он начинает обратный отсчет, давая достаточно времени, чтобы снова обнаружить человека.В течение этого времени, если он ничего не обнаруживает, светодиод гаснет.

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

Главный вопрос заключается в том, как соединить эти два сценария, чтобы заставить датчик pir ждать, пока он не станет темным (значение из LDR), чтобы начать движение.Светодиод для включения или выключения, когда он обнаруживает / не обнаруживает человека.Это просто для выключения датчика pir, чтобы не включать светодиод при дневном освещении.

Кстати, у меня только один датчик pir и один светодиод в этой отдельной конфигурации, но я хочу использовать только одинКод Python с одним LDR в качестве глобального датчика освещенности для управления 4-мя датчиками и 4 светодиодами.Например, все датчики pir будут ждать, пока станет темно, чтобы начать работу в качестве входа, а когда темно, каждый датчик pir может управлять определенным светодиодом

pir1 = led1, pir2 = led2, pir3 = led3, pir4 = led4

вот код для датчика pir и светодиода:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21, GPIO.IN) #pir sensor put as input
GPIO.setup(25, GPIO.OUT) # led put as output
GPIO.output(25, GPIO.LOW)

delay = 10 # set number of seconds delay before light turns off

while True:
#wait for pir to trigger.
print "waiting "
while GPIO.input(21) == 0:
time.sleep (0.5)

print "turn light on here"
GPIO.output(25, GPIO.HIGH)
count = 0

#start count down to turn off
print "count down started "
while count < delay:
count = count + 1

# here if the input goes high again we reset the counter to 0
if GPIO.input(21) == 1:
count = 0

print "count down now ", (delay - count)
time.sleep(1)

print "Turn light off"
GPIO.output(25, GPIO.LOW)

где код для датчика ldr и светодиода:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
delayt = .1
value = 0 # this variable will be used to store the ldr value
ldr = 12 #ldr is connected with pin number 12
led = 25 #led is connected with pin number 25

GPIO.output(led, False) # keep led off by default
def rc_time (ldr):
count = 0

#Output on the pin for
GPIO.setup(ldr, GPIO.OUT)
GPIO.output(ldr, False)
time.sleep(delayt)

#Change the pin back to input
GPIO.setup(ldr, GPIO.IN)

#Count until the pin goes high
while (GPIO.input(ldr) == 0):
count += 1

return count

#Catch when script is interrupted, cleanup correctly
try:
# Main loop
while True:
print("Ldr Value:")
value = rc_time(ldr)
print(value)
if ( value >= 70):
print("It is dark turn on led")
GPIO.output(led, True)
if (value < 69):
print("It is light turn off led")
GPIO.output(led, False)

except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()

Любая помощь высоко ценится.Помните, я действительно Нуб с Python кодирования.Вся моя работа - методом проб и ошибок.

1 Ответ

0 голосов
/ 20 февраля 2019

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

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21, GPIO.IN) #pir sensor put as input
GPIO.setup(25, GPIO.OUT) # led put as output
GPIO.setup(12, GPIO.OUT)
GPIO.output(12, False)
GPIO.output(25, False) # keep led off by default

delayt = .1
ldr = 12 #ldr is connected with pin number 12
led = 25 #led is connected with pin number 25
delay = 10 # set number of seconds delay before light turns off

def is_dark():
  global ldr, led, delayt

  count = 0
  #Output on the pin for
  GPIO.setup(ldr, GPIO.OUT)
  GPIO.output(ldr, False)
  time.sleep(delayt)

  #Change the pin back to input
  GPIO.setup(ldr, GPIO.IN)

  #Count until the pin goes high
  while (GPIO.input(ldr) == 0):
    count += 1

  if count >= 70:
    return True

  return False

def has_someone():
  if GPIO.input(21) == 1:
    return True

  return False


def main():
  global delay

  while True:
    if has_someone() and is_dark():
      print "turn light on here"
      GPIO.output(25, GPIO.HIGH)
      count = 0
      while count < delay:
        count = count + 1

        # here if the input goes high again we reset the counter to 0
        if has_someone() == 1:
          count = 0

        print "count down now ", (delay - count)
        time.sleep(1)

      print "Turn light off"
      GPIO.output(25, GPIO.LOW)


if __name__ == "__main__":
  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    GPIO.cleanup()


...