...
 
Commits (4)
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
import RPi.GPIO as g import RPi.GPIO as g
import time import time
import threading import threading
import sys
import Adafruit_CharLCD as LCD import Adafruit_CharLCD as LCD
...@@ -36,8 +37,6 @@ lcd_rows = 2 ...@@ -36,8 +37,6 @@ 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) 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() risewait = threading.Event()
fallwait = threading.Event() fallwait = threading.Event()
...@@ -97,7 +96,7 @@ def wait_for_bottle_place(): ...@@ -97,7 +96,7 @@ def wait_for_bottle_place():
def wait_for_bottle_remove(): def wait_for_bottle_remove():
return wait_fall() if test else wait_rise() return wait_fall() if test else wait_rise()
def lcd_info(msg): def lcd_info(msg, last_time):
lcd.clear() lcd.clear()
lcd.home() lcd.home()
lcd.set_cursor(0, 0) lcd.set_cursor(0, 0)
...@@ -109,45 +108,71 @@ def wait_btn(): ...@@ -109,45 +108,71 @@ def wait_btn():
return g.wait_for_edge(btn_pin, g.RISING, bouncetime=500) return g.wait_for_edge(btn_pin, g.RISING, bouncetime=500)
#g.wait_for_edge(btn_pin, g.RISING) #g.wait_for_edge(btn_pin, g.RISING)
class Modes:
button = 0
flask_raise = 1
def main(): def main():
global state, pins global state, pins
last_time = 0
mode = Modes.button if (sys.argv + [False])[1] else Modes.flask_raise
while True: while True:
if state == States.no_hafv: if state == States.no_hafv:
print print
print "Inget Hafv" print "Inget Hafv"
lcd_info("Vilar") lcd_info("Vilar", last_time)
wait_for_bottle_place() wait_for_bottle_place()
state = States.hafv_ready state = States.hafv_ready
elif state == States.hafv_ready: elif state == States.hafv_ready:
print "Hafv redo" print "Hafv redo"
lcd_info("Starta med knapp") if mode == Modes.button:
wait_btn() lcd_info("Starta med knapp", last_time)
wait_btn()
elif mode == Modes.flask_raise:
lcd_info("Starta med lyft", last_time)
wait_for_bottle_remove()
state = States.hafv_active state = States.hafv_active
start_time = time_ms() start_time = time_ms()
elif state == States.hafv_active: elif state == States.hafv_active:
print "currently Hafving" print "currently Hafving"
lcd_info("Klockar") lcd_info("Klockar", last_time)
if not bottle_check(pins):
if mode == Mode.button and not bottle_check(pins):
print "Early start" print "Early start"
lcd_info("Tjuvstart!") lcd_info("Tjuvstart!", last_time)
wait_btn() wait_btn()
state = States.no_hafv state = States.no_hafv
continue continue
print "Raise the bottle" print "Raise the bottle"
wait_for_bottle_remove()
print "BOTTLE RAISED" # TODO we actually don't need this, but it was
# here before so it stays until I refactor this.
if mode == Modes.button:
wait_for_bottle_remove()
print "BOTTLE RAISED"
print "Place back bottle after hafv" print "Place back bottle after hafv"
wait_for_bottle_place()
print "BOTTLE PLACED"
end_time = time_ms() # Wait for bottle placed is in a loop because if the time
# is under 1 secound then we want to wait again. This is
# to prevent a finger or similar from stopping the time.
while True:
wait_for_bottle_place()
print "BOTTLE PLACED"
end_time = time_ms()
t = (end_time - start_time) / 1000.0
if t > 1:
# Allow timing to halt
break
t = (end_time - start_time) / 1000.0
print "Hafvtid: {0} s".format(t) print "Hafvtid: {0} s".format(t)
last_time = t last_time = t
lcd_info("Avvakta") lcd_info("Avvakta", last_time)
state = States.no_hafv state = States.no_hafv
time.sleep(1) time.sleep(1)
......