import machine
import neopixel
import time
# Constants
LED_PIN = 12
BUTTON_PIN = 13
LED_COUNT = 16
HOLD_TIME = 2 # Time in seconds to hold the button to skip to the next player
# Player colors (RGB tuples)
player_colors = [
(255, 0, 0), # Red
(0, 255, 0), # Green
(0, 0, 255), # Blue
(255, 255, 0) # Yellow
]
# Setup
np = neopixel.NeoPixel(machine.Pin(LED_PIN), LED_COUNT)
button = machine.Pin(BUTTON_PIN, machine.Pin.IN, machine.Pin.PULL_UP)
current_player = 0
timer_active = False
start_time = 0
elapsed_time = 0
last_button_press_time = 0
def show_player_color(player_index, leds_on):
color = player_colors[player_index]
for i in range(leds_on):
np[i] = color
for i in range(leds_on, LED_COUNT):
np[i] = (0, 0, 0)
np.write()
def update_timer():
global elapsed_time, timer_active
if timer_active:
current_time = time.time()
elapsed_time = current_time - start_time
leds_on = int((1 - elapsed_time / 20) * LED_COUNT)
show_player_color(current_player, leds_on)
if elapsed_time >= 20:
timer_active = False
skip_to_next_player()
def skip_to_next_player():
global current_player, start_time, elapsed_time
current_player = (current_player + 1) % len(player_colors)
start_time = time.time()
elapsed_time = 0
show_player_color(current_player, LED_COUNT)
def check_button():
global last_button_press_time, timer_active, start_time, elapsed_time
if not button.value(): # Button is pressed
if last_button_press_time == 0:
last_button_press_time = time.time()
else:
if last_button_press_time > 0:
press_duration = time.time() - last_button_press_time
last_button_press_time = 0
if press_duration >= HOLD_TIME:
skip_to_next_player()
else:
if timer_active:
timer_active = False
elapsed_time = time.time() - start_time
else:
timer_active = True
start_time = time.time() - elapsed_time
def main():
show_player_color(current_player, LED_COUNT)
while True:
check_button()
update_timer()
time.sleep(0.1)
if __name__ == "__main__":
main()