import machine
import neopixel
import time
import random
#notes:
#smeni cvetowete, polzvai 0, 0, 0 za background (cherno irl)
#NEVER use full 255, 255, 255 na vsichki pixeli ednovremenno
n = 60 # Number of LEDs in your matrix
p = 15 # GPIO pin connected to Din
np = neopixel.NeoPixel(machine.Pin(p), n)
# Define the GPIO pins for the buttons
button_pins = [12, 13, 14, 26, 27]
# Initialize the button pins as pull-up inputs
for btn_pin in button_pins:
machine.Pin(btn_pin, machine.Pin.IN, machine.Pin.PULL_UP)
def set_led_color(color):
for x in range(n):
np[x] = color
np.write()
def flashled(color1, delay):
time.sleep(1)
set_led_color(color1)
np.write()
time.sleep(delay)
set_led_color((0,0,0))
np.write()
time.sleep(delay)
set_led_color(color1)
np.write()
time.sleep(delay)
set_led_color((0,0,0))
np.write()
time.sleep(delay)
set_led_color(color1)
np.write()
def spinLed(x, y):
for i in range(x):
np[i] = ((255,0,255))
time.sleep(y)
np.write()
if i % 2 == 0:
np[i] = ((255,0,0))
else:
np[i] = ((25,25,25))
np[7] = ((0,255,0))
np[37] = ((0,255,0))
rainbow = [
(126 , 1 , 0),(114 , 13 , 0),(102 , 25 , 0),(90 , 37 , 0),(78 , 49 , 0),(66 , 61 , 0),(54 , 73 , 0),(42 , 85 , 0),
(30 , 97 , 0),(18 , 109 , 0),(6 , 121 , 0),(0 , 122 , 5),(0 , 110 , 17),(0 , 98 , 29),(0 , 86 , 41),(0 , 74 , 53),
(0 , 62 , 65),(0 , 50 , 77),(0 , 38 , 89),(0 , 26 , 101),(0 , 14 , 113),(0 , 2 , 125),(9 , 0 , 118),(21 , 0 , 106),
(33 , 0 , 94),(45 , 0 , 82),(57 , 0 , 70),(69 , 0 , 58),(81 , 0 , 46),(93 , 0 , 34),(105 , 0 , 22),(117 , 0 , 10),
(126 , 1 , 0),(114 , 13 , 0),(102 , 25 , 0),(90 , 37 , 0),(78 , 49 , 0),(66 , 61 , 0),(54 , 73 , 0),(42 , 85 , 0),
(30 , 97 , 0),(18 , 109 , 0),(6 , 121 , 0),(0 , 122 , 5),(0 , 110 , 17),(0 , 98 , 29),(0 , 86 , 41),(0 , 74 , 53),
(0 , 62 , 65),(0 , 50 , 77),(0 , 38 , 89),(0 , 26 , 101),(0 , 14 , 113),(0 , 2 , 125),(9 , 0 , 118),(21 , 0 , 106),
(33 , 0 , 94),(45 , 0 , 82),(57 , 0 , 70),(69 , 0 , 58),(81 , 0 , 46),(93 , 0 , 34),(105 , 0 , 22),(117 , 0 , 10)]
while True:
# Read button states
btn1_state = machine.Pin(12).value()
btn2_state = machine.Pin(13).value()
btn3_state = machine.Pin(14).value()
btn4_state = machine.Pin(26).value()
btn5_state = machine.Pin(27).value()
rainbow_checker = True
# Set LED color based on button states
# -- RAINBOW --
if btn1_state == 0: # Button 1 pressed
while rainbow_checker:
rainbow = rainbow[-1:] + rainbow[:-1]
for i in range(60):
np[i] = rainbow[i]
np.write()
btn1_state = machine.Pin(12).value()
if btn1_state == 0:
rainbow_checker = False
set_led_color((255, 255, 255))
time.sleep(3)
btn1_state = 1
# -- CLOCK --
elif btn2_state == 0: # Button 2 pressed
for i in range(60):
if i in [2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57]:
np[i] = ((255,255,255))
else:
np[i] = ((255,0,255))
np.write()
second = 0
hsecond = 0
np[7] = (255,0,0)
np.write()
time.sleep(1)
holding_time = 0
while True:
second += 1
hsecond += 1
if hsecond >= 216000:
hsecond = hsecond // 216000
if second % 60 == 0 and second >= 3180: #towa e samo za poslednite 7 minuti
print("minute: " + str(second) + " aka: " + str(second // 60))
np[((second - 3180) // 60) - 1] = (255,0,0)
if ((second - 3180) // 60) - 2 in [2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57]:
np[((second - 3180) // 60) - 2] = ((255,255,255))
else:
np[((second - 3180) // 60) - 2] = ((255,0,255))
np[((hsecond- 190800) // 3600 )] = ((0,0,255)) # towa e za da ne bara chasa, toi e vinagi on top
np.write()
elif (second % 60 == 0):
print("minute: " + str(second) + " aka: " + str(second // 60))
np[(second // 60) - 1 + 7] = (255,0,0)
if (second // 60) - 2 + 7 in [2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57]:
np[(second // 60) - 2 + 7] = ((255,255,255))
else:
np[(second // 60) - 2 + 7] = ((255,0,255))
np[(hsecond // 3600) + 7] = ((0,0,255)) # towa e za da ne bara chasa, toi e vinagi on top
np.write()
if second >= 3600:
second = second // 3600
if (hsecond % 3600 == 0) and hsecond >= 190800:
print("hour: " + str(hsecond) + " aka: " + str(hsecond // 36) )
np[((hsecond - 190800) // 3600)] = (0,0,255)
if ((hsecond - 190800) // 3600) - 1 in [2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57]:
np[((hsecond -190800) // 3600) - 1] = ((255,255,255))
else:
np[((hsecond - 190800) // 3600) - 1] = ((255,0,255))
if second % 60 == 0:
np[(second // 60) - 1] = (255,0,0) #towa e za da ne ebawa minutite (i give up)
np.write()
if hsecond % 3600 == 0:
print("hour: " + str(hsecond) + " aka: " + str(hsecond // 36) )
np[(hsecond // 3600) + 7] = (0,0,255)
if (hsecond // 3600) - 1 + 7 in [2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57]:
np[(hsecond // 3600) - 1 + 7] = ((255,255,255))
else:
np[(hsecond // 3600) - 1 + 7] = ((255,0,255))
if second % 60 == 0:
np[(second // 60) - 1 + 7] = (255,0,0) #towa e za da ne ebawa minutite (i give up)
np.write()
#tuk zadawash kolko wreme e edna sekunda
btn2_state = machine.Pin(13).value()
if btn2_state == 0:
if holding_time >= 300:
time.sleep (0.0005)
elif holding_time >= 50:
time.sleep (0.01)
elif holding_time >= 10:
time.sleep (0.075)
else:
time.sleep (0.1)
holding_time += 1
else:
time.sleep (1)
holding_time = 0
print(hsecond)
#basi shibaniq chasovnik eban
#fr
# -- ROULETTE --
elif btn3_state == 0: # Button 3 pressed
for i in range(60):
if i % 2 == 0:
np[i] = ((255,0,0))
else:
np[i] = ((25,25,25))
np[7] = ((0,255,0))
np[37] = ((0,255,0))
np.write()
time.sleep(1)
rnum = random.randint(0, 60)
print(rnum)
spinLed(60, 0.014)
if(rnum > 30):
spinLed(rnum, 0.05)
else:
spinLed(rnum, 0.15)
if (rnum - 1) in [7, 37]:
flashled((0,255,0), 0.1)
if (rnum - 1) % 2 == 0:
flashled((255,0,0), 0.1)
if (rnum - 1) % 2 != 0:
flashled((25,25,25), 0.1)
# -- COLOR CHANGE --
elif btn4_state == 0:
set_led_color((125,255,255))
elif btn5_state == 0:
set_led_color((255,125,125))
time.sleep(0.1)
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
rgb1:VDD
rgb1:DOUT
rgb1:VSS
rgb1:DIN
rgb2:VDD
rgb2:DOUT
rgb2:VSS
rgb2:DIN
rgb3:VDD
rgb3:DOUT
rgb3:VSS
rgb3:DIN
rgb4:VDD
rgb4:DOUT
rgb4:VSS
rgb4:DIN
rgb5:VDD
rgb5:DOUT
rgb5:VSS
rgb5:DIN
rgb6:VDD
rgb6:DOUT
rgb6:VSS
rgb6:DIN
rgb7:VDD
rgb7:DOUT
rgb7:VSS
rgb7:DIN
rgb8:VDD
rgb8:DOUT
rgb8:VSS
rgb8:DIN
rgb9:VDD
rgb9:DOUT
rgb9:VSS
rgb9:DIN
rgb10:VDD
rgb10:DOUT
rgb10:VSS
rgb10:DIN
rgb11:VDD
rgb11:DOUT
rgb11:VSS
rgb11:DIN
rgb12:VDD
rgb12:DOUT
rgb12:VSS
rgb12:DIN
rgb13:VDD
rgb13:DOUT
rgb13:VSS
rgb13:DIN
rgb14:VDD
rgb14:DOUT
rgb14:VSS
rgb14:DIN
rgb15:VDD
rgb15:DOUT
rgb15:VSS
rgb15:DIN
rgb16:VDD
rgb16:DOUT
rgb16:VSS
rgb16:DIN
rgb17:VDD
rgb17:DOUT
rgb17:VSS
rgb17:DIN
rgb18:VDD
rgb18:DOUT
rgb18:VSS
rgb18:DIN
rgb19:VDD
rgb19:DOUT
rgb19:VSS
rgb19:DIN
rgb20:VDD
rgb20:DOUT
rgb20:VSS
rgb20:DIN
rgb21:VDD
rgb21:DOUT
rgb21:VSS
rgb21:DIN
rgb22:VDD
rgb22:DOUT
rgb22:VSS
rgb22:DIN
rgb23:VDD
rgb23:DOUT
rgb23:VSS
rgb23:DIN
rgb24:VDD
rgb24:DOUT
rgb24:VSS
rgb24:DIN
rgb25:VDD
rgb25:DOUT
rgb25:VSS
rgb25:DIN
rgb26:VDD
rgb26:DOUT
rgb26:VSS
rgb26:DIN
rgb27:VDD
rgb27:DOUT
rgb27:VSS
rgb27:DIN
rgb28:VDD
rgb28:DOUT
rgb28:VSS
rgb28:DIN
rgb29:VDD
rgb29:DOUT
rgb29:VSS
rgb29:DIN
rgb30:VDD
rgb30:DOUT
rgb30:VSS
rgb30:DIN
rgb31:VDD
rgb31:DOUT
rgb31:VSS
rgb31:DIN
rgb32:VDD
rgb32:DOUT
rgb32:VSS
rgb32:DIN
rgb33:VDD
rgb33:DOUT
rgb33:VSS
rgb33:DIN
rgb34:VDD
rgb34:DOUT
rgb34:VSS
rgb34:DIN
rgb35:VDD
rgb35:DOUT
rgb35:VSS
rgb35:DIN
rgb36:VDD
rgb36:DOUT
rgb36:VSS
rgb36:DIN
rgb37:VDD
rgb37:DOUT
rgb37:VSS
rgb37:DIN
rgb38:VDD
rgb38:DOUT
rgb38:VSS
rgb38:DIN
rgb39:VDD
rgb39:DOUT
rgb39:VSS
rgb39:DIN
rgb40:VDD
rgb40:DOUT
rgb40:VSS
rgb40:DIN
rgb41:VDD
rgb41:DOUT
rgb41:VSS
rgb41:DIN
rgb42:VDD
rgb42:DOUT
rgb42:VSS
rgb42:DIN
rgb43:VDD
rgb43:DOUT
rgb43:VSS
rgb43:DIN
rgb44:VDD
rgb44:DOUT
rgb44:VSS
rgb44:DIN
rgb45:VDD
rgb45:DOUT
rgb45:VSS
rgb45:DIN
rgb46:VDD
rgb46:DOUT
rgb46:VSS
rgb46:DIN
rgb47:VDD
rgb47:DOUT
rgb47:VSS
rgb47:DIN
rgb48:VDD
rgb48:DOUT
rgb48:VSS
rgb48:DIN
rgb49:VDD
rgb49:DOUT
rgb49:VSS
rgb49:DIN
rgb50:VDD
rgb50:DOUT
rgb50:VSS
rgb50:DIN
rgb51:VDD
rgb51:DOUT
rgb51:VSS
rgb51:DIN
rgb52:VDD
rgb52:DOUT
rgb52:VSS
rgb52:DIN
rgb53:VDD
rgb53:DOUT
rgb53:VSS
rgb53:DIN
rgb54:VDD
rgb54:DOUT
rgb54:VSS
rgb54:DIN
rgb55:VDD
rgb55:DOUT
rgb55:VSS
rgb55:DIN
rgb56:VDD
rgb56:DOUT
rgb56:VSS
rgb56:DIN
rgb57:VDD
rgb57:DOUT
rgb57:VSS
rgb57:DIN
rgb58:VDD
rgb58:DOUT
rgb58:VSS
rgb58:DIN
rgb59:VDD
rgb59:DOUT
rgb59:VSS
rgb59:DIN
rgb60:VDD
rgb60:DOUT
rgb60:VSS
rgb60:DIN
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r