from machine import Pin, ADC, PWM
import utime
ldr = ADC(Pin(26))
# Kreiramo listu PWM objekata za pinove GP0 do GP7
leds = [PWM(Pin(i)) for i in range(8)]
# Podešavanje frekvencije za sve LED
for led in leds:
led.freq(1000)
# EKSPERIMENTALNE GRANICE (Izmjeriš u simulatoru/ploči)
SVJETLO_ADC = 512 # Očitavanje pri max svjetlu
MRAK_ADC = 65007 # Očitavanje pri totalnom mraku
while True:
# 1. Čitanje senzora
sirovo = ldr.read_u16()
print(sirovo)
# 2. Skaliranje ulaza na opseg 0.0 - 1.0 (Normalizacija)
# nivo_mraka će biti 0.0 na svjetlu, a 1.0 u mraku
procenat_mraka = (sirovo - SVJETLO_ADC) / (MRAK_ADC - SVJETLO_ADC)
# 3. Ukupni intenzitet za 8 dioda (opseg 0.0 do 8.0)
ukupno = procenat_mraka * 8.0
# 4. Raspoređivanje intenziteta na svaku LED
for i in range(8):
# Izračunamo koliko "ostaje" za i-tu diodu
intenzitet = ukupno - i
# Ograničavamo na opseg [0, 1]
if intenzitet > 1.0:
intenzitet = 1.0
elif intenzitet < 0.0:
intenzitet = 0.0
# Uslov: LED0 minimalno svijetli na početku (npr. 2% snage)
if i == 0 and intenzitet < 0.02:
intenzitet = 0.02
# Slanje na PWM (kvantizacija na 16 bita: 0 - 65535)
leds[i].duty_u16(int(intenzitet * 65535))
utime.sleep_ms(20)