From fb617a5eecb00f6c988a296713f714c285b730c8 Mon Sep 17 00:00:00 2001 From: David Thurstenson Date: Mon, 10 Oct 2022 00:17:52 -0500 Subject: [PATCH] Switch loop direction from count-up to count-down Also: - Let countdown() go negative - Don't update neopixels when time is negative - Print current time to console every update period - Set colormode="fill" as default in colorizer() --- colorbar-fastloop.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/colorbar-fastloop.py b/colorbar-fastloop.py index a140d49..04fbe5b 100644 --- a/colorbar-fastloop.py +++ b/colorbar-fastloop.py @@ -43,7 +43,7 @@ pixels.show() # or red parameters should be set to True. Behavior when # red and yellow are both set to True depends on how the # colormode is configured. -def colorizer(pxnum, colormode, yellow=False, red=False): +def colorizer(pxnum, colormode="fill", yellow=False, red=False): # Every pixel from lowest to currently highest if colormode == "fill": if red: @@ -86,8 +86,8 @@ def countdown( # Init the update interval tracking variable last_update_time = -1 - # Init the elapsed time variable - elapsed_time = 0 + # Init the current time variable + current_time = seconds # This begins what I like to call the "Are We There Yet?" # loop. Instead of making the script wait for an interval @@ -113,11 +113,13 @@ def countdown( # Loop over every pixel ID that should be lit # based on the elapsed time - for pixel in range(round(num_pixels * (elapsed_time / seconds))): + for pixel in range(round(num_pixels * ((seconds - current_time) / seconds))): # Set pixel color stuff - if elapsed_time >= seconds - redtime: + if current_time < 0: + pass + elif current_time <= redtime: colorizer(pixel, colormode, red=True) - elif elapsed_time >= seconds - yellowtime: + elif current_time <= yellowtime: colorizer(pixel, colormode, yellow=True) else: colorizer(pixel, colormode) @@ -126,4 +128,12 @@ def countdown( pixels.show() # Increment the elapsed time variable - elapsed_time += update_interval + current_time -= update_interval + + # Massage the current_time seconds count into human-readable minutes:seconds + display_time = divmod(abs(current_time), 60) + if current_time < 0: + display_time_sign = "-" + else: + display_time_sign = " " + print("current time: " + display_time_sign + str(display_time[0]) + ":" + str(display_time[1]))