import tm1637
from machine import Pin
from utime import sleep
#pin setup
timer_LCD = tm1637.TM1637(clk=Pin(2), dio=Pin(3))
credits_LCD = tm1637.TM1637(clk=Pin(0), dio=Pin(1))
coin_one_btn = Pin(4, Pin.IN)
coin_five_btn = Pin(5, Pin.IN)
coin_ten_btn = Pin(6, Pin.IN)
shampoo_btn_menu = Pin(7, Pin.IN)
water_btn_menu = Pin(8, Pin.IN)
shampoo_led_menu = Pin(9, Pin.OUT)
water_led_menu = Pin(10, Pin.OUT)
shampoo_sprayer_btn = Pin(11, Pin.IN)
shampoo_sprayer_relay = Pin(12, Pin.OUT)
water_sprayer_btn = Pin(13, Pin.IN)
water_sprayer_relay = Pin(14, Pin.OUT)
#initialized components
timer_LCD.number(0)
credits_LCD.number(0)
shampoo_led_menu.off()
water_led_menu.off()
shampoo_sprayer_relay.off()
water_sprayer_relay.off()
#global variables
credits_counter = 0
total_credits = 0
sales_value = 5
shampoo_time_duration = 5
water_time_duration = 10
timer_display_duration = 0
is_water_selected = False
is_shampoo_selected = False
def readCoinValue():
global credits_counter
global total_credits
if coin_one_btn.value() == 1:
credits_counter +=1
total_credits = credits_counter
credits_LCD.number(total_credits)
sleep(0.2)
if coin_five_btn.value() == 1:
credits_counter +=5
total_credits = credits_counter
credits_LCD.number(total_credits)
sleep(0.2)
if coin_ten_btn.value() == 1:
credits_counter +=10
total_credits = credits_counter
credits_LCD.number(total_credits)
sleep(0.2)
def readTotalCredits():
is_shampoo_selected_btn = shampoo_btn_menu.value() == 1
is_water_selected_btn = water_btn_menu.value() == 1
global total_credits
global credits_counter
global timer_display_duration
global is_shampoo_selected
global is_water_selected
if total_credits >= sales_value:
shampoo_led_menu.on()
water_led_menu.on()
if is_shampoo_selected_btn:
is_shampoo_selected = True;
total_credits -= sales_value
credits_counter -= sales_value
timer_display_duration = shampoo_time_duration
creditsEvaluator()
creditsDisplay();
sprayer();
if is_water_selected_btn:
is_water_selected = True
total_credits -= sales_value
credits_counter -= sales_value
timer_display_duration = water_time_duration
creditsEvaluator()
creditsDisplay();
sprayer();
else:
shampoo_led_menu.off()
water_led_menu.off()
def sprayer():
timer_LCD.number(timer_display_duration)
while is_water_selected or is_shampoo_selected:
if shampoo_sprayer_btn.value() == 1 and is_shampoo_selected:
shampoo_sprayer_relay.on()
countDownTimer()
if water_sprayer_btn.value() == 1 and is_water_selected:
water_sprayer_relay.on()
countDownTimer()
def countDownTimer():
counter = 0
global timer_display_duration
global is_water_selected
global is_shampoo_selected
for counter in range(timer_display_duration,-1,-1):
if counter == 0:
water_sprayer_relay.off()
shampoo_sprayer_relay.off()
is_water_selected = False
is_shampoo_selected = False
timer_display_duration = 0
if shampoo_sprayer_btn.value() == 0 and is_shampoo_selected:
timer_display_duration = counter
water_sprayer_relay.off()
shampoo_sprayer_relay.off()
break
if water_sprayer_btn.value() == 0 and is_water_selected:
timer_display_duration = counter
water_sprayer_relay.off()
shampoo_sprayer_relay.off()
break
timer_LCD.number(counter)
sleep(1)
def creditsDisplay():
credits_LCD.number(total_credits)
def creditsEvaluator():
if total_credits < sales_value:
shampoo_led_menu.off()
water_led_menu.off()
def main():
while True:
readCoinValue()
readTotalCredits()
if __name__ == "__main__":
main()