70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
#! env/bin/python3
|
|
|
|
import RPi.GPIO as GPIO
|
|
import time
|
|
|
|
from input import get_pin_input
|
|
from state_trans import check_state
|
|
from output import write_pin_output
|
|
|
|
if __name__ == "__main__":
|
|
|
|
GPIO.setmode(GPIO.BCM)
|
|
GPIO.setwarnings(False)
|
|
|
|
# Pin Assignments
|
|
PB1_BCM = 4 # Green
|
|
PB2_BCM = 27 # Yellow
|
|
PB3_BCM = 13 # Blue
|
|
RELAY1_PIN = 26 # Water Pump
|
|
RELAY2_PIN = 20 # Unassigned
|
|
RELAY3_PIN = 21 # Lamp
|
|
|
|
# Setup the Inputs to use the internal pull-down.
|
|
GPIO.setup(PB1_BCM, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
|
GPIO.setup(PB2_BCM, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
|
GPIO.setup(PB3_BCM, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
|
|
|
# Setup the Outputs.
|
|
GPIO.setup(RELAY1_PIN, GPIO.OUT)
|
|
GPIO.setup(RELAY2_PIN, GPIO.OUT)
|
|
GPIO.setup(RELAY3_PIN, GPIO.OUT)
|
|
|
|
try:
|
|
|
|
auto_mode = False
|
|
|
|
while True:
|
|
|
|
# Detect user input.
|
|
inputs = get_pin_input()
|
|
|
|
# Activate auto mode if the Green PB is pressed.
|
|
if auto_mode or inputs['green_button'] == True:
|
|
|
|
inputs['mode'] = "AUTO"
|
|
auto_mode = True
|
|
|
|
# Activate manual mode if the Yellow or Blue PB's are pressed.
|
|
if not auto_mode or inputs['yellow_button'] == True or inputs['blue_button'] == True:
|
|
|
|
inputs['mode'] = "MANUAL"
|
|
auto_mode = False
|
|
|
|
# Make any transitions based on mode and inputs.
|
|
outputs = check_state(inputs)
|
|
|
|
# Write the outputs which correspond to the desired state.
|
|
write_pin_output(outputs)
|
|
|
|
# Avoid maxxing out a single thread.
|
|
time.sleep(0.1)
|
|
|
|
# Cleanup on Exit.
|
|
finally:
|
|
GPIO.output(RELAY1_PIN, False)
|
|
GPIO.output(RELAY2_PIN, False)
|
|
GPIO.output(RELAY3_PIN, False)
|
|
GPIO.cleanup()
|
|
|