Dissipazione e calore

llluca:
anche se vorrei capire cosa fa il pwm con un numero + grande di 255 ma non dovrebbe capitare.

La funzione analogWrite accetta come valore di PWM un tipo di dati "int", quindi 16 bit, ma il registro del timer è configurato ad 8 bit per cui il compilatore effettuerà il casting automatico da int a byte, perciò va visto come un valore di 16 bit viene convertito: potrebbe ad esempio prendere solo il byte più basso.

Per non sbagliare tu fai un controllo prima, per cui se il valore è maggiore di 255 lo imposti manualmente a 255. Oppure usi la funzione map() per riportarlo nel range 0-255 se sei sicuro che possa uscire da questi 2 limiti.