Определить состояние вывода при запуске и разрешить продолжить после выхода из скрипта
Я пытаюсь получить скрипт, который я запускаю через 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. Я не хочу использовать петлю.
Я попытался сначала прочитать вывод в качестве входа, чтобы получить текущее состояние высоты / низкой отметки, но это выдает ошибку, говоря, что вывод должен быть настроен в первую очередь....