from machine import Pin
from time import sleep
# kreiranje objekata R, G i B za postavljanje vrijednosti
# odgovarajucih digitalnih izlaza GP14, GP12 i GP13
R = Pin(14, Pin.OUT)
G = Pin(12, Pin.OUT)
B = Pin(13, Pin.OUT)
# niz sa svim mogucim kombinacijama emitovanih svjetlosti
# u nizu je izostavljen slucaj ugasene RGB diode (tj. 000)
colors = ["001", "010", "011", "100", "101", "110", "111"]
# segment [0.1, 1.0] je bolje posmatrati kao [1, 10]
# jer su na prvobitnom segmentu samo 0.5 i 1.0 tacno zapisani u racunarskoj memoriji
# a zelimo izbjeci gresku nastalu nagomilavanjem manjih gresaka
sleepTime = 1
step = 1
while True:
# prolazak kroz sve moguce kombinacije emitovanih svjetlosti
for lights in colors:
# postavljanje odgovarajucih vrijednosti digitalnih izlaza GP12-14
R.value(int(lights[2]))
G.value(int(lights[1]))
B.value(int(lights[0]))
# postavljanje broja sekundi zaustavljanja
# dijeljenje s 10 zbog inicijalnog prelaska na segment [1, 10]
sleep(sleepTime / 10)
# povecanje/smanjenje "usporavanja" (sleep) u ovisnosti od varijable step
# ako je step = 1, usporavanje se povecava do 10 (tj. do 1.0s)
# ako je step = -1, usporavanje se smanjuje do 1 (tj. do 0.1s)
sleepTime = sleepTime + step
# ako je vrijeme postalo 10 (tj. 1.0s) uzlaznom putanjom (tj. step = 1) ili
# ako je vrijeme postalo 1 (tj. 0.1s) silaznom putanjom (tj. step = -1)
# potrebno je promijeniti znak koraka (step)
if (sleepTime == 10 and step > 0) or (sleepTime == 1 and step < 0):
step = -1 * step