TheMask ha scritto:Postare l'intero FW mi viene difficile perché sono 20 moduli compreso il main
Con git non penso potresti avere problemi visto che si condividono miliardi di righe di codice, dalle librerie QT al kernel linux

Poi come vuoi, meno codice si controlla e meno suggerimenti ricevi.
Comunque per quanto riguarda lo scheduler se vuoi avviare un task ogni certo tempo devi salvare i millisecondi prima di avviare il task, infatti così ti perdi un tempo di esecuzione task ogni volta. Potrebbe comunque non essere importante.
TheMask ha scritto:Le temperature vanno da 22°C a 30°C perché?
Sono le temperature dell'acqua di un acquario? La campioni ogni 3 secondi? Quanto è il

TheMask ha scritto:se sbaglia il 100ms a contare mi sballa gli step e arriva o prima o dopo al duty=10%
Il metodo non mi piace. Hai l'orario no? Scrivi una funzione che dato l'orario fornisce immediatamente il duty cycle da restituire. Anche perché non credo che in 6 secondi puoi notare la differenza di illuminazione (la funzione è sicuramente a lenta variazione). Se l'aggiornamento della luminosità non è costante nel tempo non dovresti notare differenze purché sia fornito ogni volta il valore corretto da impostare.
Altra cosa, ma questa è una chicca, non mi risulta l'ATmega328 supporti il calcolo float. Quindi ogni volta che usi un float il calcolo viene simulato con degli interi. Può essere molto esoso quindi in funzioni con molte operazioni matematiche usa gli interi, devi farti un conto sulle cifre significative utili e poi tronchi alla fine.