diff --git a/machine.py b/machine.py index 4e0791bc901f91cd04cde99099d87892baed1131..f25fb3c7155da424b60d6103d85b4e8fe8542a51 100644 --- a/machine.py +++ b/machine.py @@ -4,6 +4,8 @@ import RPi.GPIO as g import time import threading +import Adafruit_CharLCD as LCD + # For lazer array # if no bottle present then all are high # if bottle at least one low @@ -14,26 +16,51 @@ import threading g.setmode(g.BCM) -pins = [ 17 ] -btn_pin = 22 +pins = [ 17, 27, 22, 10, 9, 11, 5, 6, 13, 19 ] +btn_pin = 4 + +test = False + +lcd_rs = 12 +lcd_en = 7 +lcd_d4 = 8 +lcd_d5 = 25 +lcd_d6 = 24 +lcd_d7 = 23 + +lcd_backlight = 2 + +# Define LCD column and row size for 16x2 LCD. +lcd_columns = 16 +lcd_rows = 2 + +lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight) + +last_time = 0 + +risewait = threading.Event() +fallwait = threading.Event() def callback(pin): state = g.input(pin) if state == g.LOW: + print "falling edge" fallwait.set() else: + print "rising edge" risewait.set() g.setup(btn_pin, g.IN, pull_up_down=g.PUD_DOWN) +g.setup(3, g.IN, pull_up_down=g.PUD_DOWN) for pin in pins: g.setup(pin, g.IN, pull_up_down=g.PUD_DOWN) g.add_event_detect(pin, g.BOTH, callback=callback) -risewait = threading.Event() -fallwait = threading.Event() - def bottle_check(pins): - return not all([g.input(pin) for pin in pins]) + if test: + return any([g.input(pin) for pin in pins]) + else: + return not all([g.input(pin) for pin in pins]) class States: no_hafv = 0 @@ -65,42 +92,60 @@ def wait_fall(): # should these be the other way around? def wait_for_bottle_place(): - #return wait_rise() - return wait_fall() + return wait_rise() if test else wait_fall() def wait_for_bottle_remove(): - #return wait_fall() - return wait_rise() - -while True: - if state == States.no_hafv: - print - print "Inget Hafv" - wait_for_bottle_place() - state = States.hafv_ready - - elif state == States.hafv_ready: - print "Hafv redo" - out = g.wait_for_edge(btn_pin, g.RISING) - state = States.hafv_active - start_time = time_ms() - - elif state == States.hafv_active: - print "currently Hafving" - if not bottle_check(pins): - print "Early start" + return wait_fall() if test else wait_rise() + +def lcd_info(msg): + lcd.clear() + lcd.home() + lcd.set_cursor(0, 0) + lcd.message("Tid: {0} s".format(last_time)) + lcd.set_cursor(0, 1) + lcd.message(msg) + +def wait_btn(): + return g.wait_for_edge(btn_pin, g.RISING, bouncetime=500) + #g.wait_for_edge(btn_pin, g.RISING) + +if __name__ == "__main__": + while True: + if state == States.no_hafv: + print + print "Inget Hafv" + lcd_info("Vilar") + wait_for_bottle_place() + state = States.hafv_ready + + elif state == States.hafv_ready: + print "Hafv redo" + lcd_info("Starta med knapp") + wait_btn() + state = States.hafv_active + start_time = time_ms() + + elif state == States.hafv_active: + print "currently Hafving" + lcd_info("Klockar") + if not bottle_check(pins): + print "Early start" + lcd_info("Tjuvstart!") + wait_btn() + state = States.no_hafv + continue + print "Raise the bottle" + wait_for_bottle_remove() + print "BOTTLE RAISED" + print "Place back bottle after hafv" + wait_for_bottle_place() + print "BOTTLE PLACED" + + end_time = time_ms() + + t = (end_time - start_time) / 1000.0 + print "Hafvtid: {0} s".format(t) + last_time = t + lcd_info("Avvakta") state = States.no_hafv - continue - print "Raise the bottle" - wait_for_bottle_remove() - print "BOTTLE RAISED" - print "Place back bottle after hafv" - wait_for_bottle_place() - print "BOTTLE PLACED" - - end_time = time_ms() - - t = (end_time - start_time) / 1000.0 - print "Hafvtid: {0} s".format(t) - state = States.no_hafv - time.sleep(1) + time.sleep(1)