|
import itertools
|
|
import sys
|
|
|
|
import RPIO
|
|
|
|
from bfcslib.seven_seg import SevenSegmentDisplay
|
|
from bfcslib.status_led import LED
|
|
from bfcslib.tmp512 import TMP512
|
|
|
|
|
|
NUM_SENSORS = 4
|
|
sensor_iterator = itertools.cycle(range(0, NUM_SENSORS))
|
|
CURRENT_IDX = sensor_iterator.next()
|
|
SENSORS = None
|
|
|
|
def button_isr(gpio_id, val):
|
|
global CURRENT_IDX
|
|
global SENSORS
|
|
|
|
# Turn off previous LED
|
|
SENSORS[CURRENT_IDX]['led'].off()
|
|
|
|
# Update current index
|
|
# print 'CURRENT_IDX: %s' % CURRENT_IDX
|
|
CURRENT_IDX = sensor_iterator.next()
|
|
|
|
# Turn on new LED
|
|
SENSORS[CURRENT_IDX]['led'].on()
|
|
|
|
def main():
|
|
global CURRENT_IDX
|
|
global SENSORS
|
|
|
|
print 'Beer Fermentation Control System - RPI Client'
|
|
|
|
# Setup the sensor status LEDs
|
|
sensor1_led = LED(24)
|
|
sensor2_led = LED(25)
|
|
sensor3_led = LED(8)
|
|
sensor4_led = LED(7)
|
|
|
|
# Setup both TMP512's
|
|
tmp512_1 = TMP512(0x5d)
|
|
tmp512_2 = TMP512(0x5c)
|
|
|
|
SENSORS = [{'led': sensor1_led, 'temp': tmp512_1.temp_sensor2},
|
|
{'led': sensor2_led, 'temp': tmp512_1.temp_sensor1},
|
|
{'led': sensor3_led, 'temp': tmp512_2.temp_sensor2},
|
|
{'led': sensor4_led, 'temp': tmp512_2.temp_sensor1}]
|
|
|
|
# Turn on initial sensor LED
|
|
SENSORS[CURRENT_IDX]['led'].on()
|
|
|
|
# Setup 7 seg display
|
|
ssdisplay = SevenSegmentDisplay()
|
|
|
|
# Setup pushbutton
|
|
# Use the BCM addressing scheme
|
|
RPIO.setmode(RPIO.BCM)
|
|
|
|
# Setup input
|
|
RPIO.setup(22, RPIO.IN)
|
|
|
|
# Setup switch interrupt with debounce
|
|
RPIO.add_interrupt_callback(22, button_isr, edge='rising',
|
|
pull_up_down=RPIO.PUD_DOWN, threaded_callback=True,
|
|
debounce_timeout_ms=150)
|
|
|
|
# Wait for interrupts in a non-blocking fashion
|
|
RPIO.wait_for_interrupts(threaded=True)
|
|
|
|
# Main loop
|
|
while True:
|
|
|
|
# Iterate over all temperature sensors and read their temp
|
|
for idx in xrange(NUM_SENSORS):
|
|
temp = SENSORS[idx]['temp']()
|
|
if idx == CURRENT_IDX:
|
|
ssdisplay.display_number(temp)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|