Определить состояние вывода при запуске и разрешить продолжить после выхода из скрипта

Я пытаюсь получить скрипт, который я запускаю через cron, чтобы повернуть булавку на низкую и высокую точку в зависимости от температуры, однако... У меня возникла пара проблем.

1 - Когда скрипт запускается и устанавливает вывод GPIO, он будет тянуть вывод вверх или вниз (в зависимости от параметра) - кажется, нет способа сказать ему не изменять текущее состояние вывода.

Это проблема, потому что если реле высокое, а состояние по умолчанию низкое, то реле будет установлено на низкое значение, а затем может очень быстро изменить его на высокое после - делать это каждую минуту довольно сложно для управления выводом (то же самое относится если состояние по умолчанию высокое).

2 - При выходе из скрипта он очищает контакты GPIO и меняет состояние моего вывода. В идеале, если скрипт поворачивает булавку высоко, тогда, когда он выходит, я хочу, чтобы булавка оставалась высокой. Если я уберу функцию очистки, то при следующем запуске скрипта будет сказано, что пин-код уже используется (проблема?).

Так что скрипт, который запускается каждую минуту, выглядит следующим образом.

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import random
from temp import Temp # custom object to handle the temp sensor.

def main():
    random.seed()
    GPIO.setmode(GPIO.BCM)

    PUMP_ON_TEMP = 38
    PUMP_OFF_TEMP = 30
    GPIO_PIN = 18

    try:
        t = Temp('28-00000168c492')
        GPIO.setup(GPIO_PIN, GPIO.OUT)

        current_temp = t.getTemp()
        print current_temp

        if current_temp > PUMP_ON_TEMP:
            GPIO.output(GPIO_PIN,  1)
            print "Turning the pump on! %s" % current_temp

        if current_temp < PUMP_OFF_TEMP:
                GPIO.output(GPIO_PIN,  0)
                print "Turning the pump off! %s" % current_temp

    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()

if __name__ == '__main__':
    main()

Это запускается каждую минуту через cron. Я не хочу использовать петлю.

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

0 ответов

Другие вопросы по тегам