Beter is het gebruik te maken van Pulsbreedtemodulatie. De Arduino Uno beschikt over een aantal digitale outputs die geschikt zijn voor pulsbreedtemodulatie (PWM). Daarmee kan de gemiddelde stroom door de LED worden geregeld. De onderstaande sketch zorgt ervoor dat de aangesloten LED langzaam sterker en zwakker gaat branden.
Een andere oplossing is het gebruik van een zogenaamde voorschakelweerstand.Een weerstand van 1kΩ is een veilige keuze bij een spanning tot 20V. Het uitrekenen van de juiste waarde van de weerstand is eenvoudig:
(Voedingsspanning - Junctiespanning) / Gewenste stroom.
Bijvoorbeeld als we een Arduino output gebruiken is de voedingsspanning 5V. Uitgaande van een LED met een junctiespanning van 1,2V en een gewenste stroom van 5mA, moet de weerstand een waarde hebben van (5 - 1,2) / 0,005 = 760Ω. In de E-12 reeks is de dichtstbijzijnde waarde 820Ω. Let er wel op dat de junctiespanning van LEDs met verschillende kleuren sterk kan variëeren.Het nadeel van deze oplossing is dat we de volledige stroom die nodig is voor de LED laten leveren door een digitale output. Dat kunnen we ondervangen door een transistor als schakelaar te gebruiken. De digitale output gebruiken we om de transistor in en uit te schakelen en die hoeft daarvoor maar een heel kleine stroom te leveren. Onderstaand schema laat zien hoe een LED aangesloten kan worden zonder dat alle stroom door de Arduino geleverd moet worden. Voor R1 kan een waarde van 10kΩ gebruikt worden en voor R2 een waarde tussen de 470Ω en 1kΩ. Een prima transistor voor een redelijke prijs is de BC549C.