LED helderheid regelen met PWM via drukknop op Arduino Mega
Onderdelen en benodigdheden
| Arduino Mega 2560 | × | 1 |
| Breadboard | × | 1 |
| Draadjes (jumper wires) | × | 11 |
| LED's (3 stuks, verschillende kleur aanbevolen) | × | 3 |
| Drukknop (12 mm) | × | 1 |
| Weerstanden 330 Ω | × | 4 |
Apps en online diensten
- Arduino IDE
Over dit project
Deze tutorial laat in drie stappen zien hoe je LED's laat faden (dimmen) met een Arduino:
- Fade Lights – basis fading zonder knop
- Fade Lights met Drukknop – cyclus start op knopdruk
- Fade Lights met Drukknop (verbeterde delay) – faden stopt direct bij loslaten knop
1. Fade Lights (basis)
De LED's pulseren achtereen in volgorde: rood → geel → groen → geel (verkeerslicht-stijl).
Schema

LED's aangesloten op PWM-pinnen 3, 6 en 9 (andere PWM-pinnen mogelijk, code aanpassen).
Code
int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;
const int fade = 10; // vertraging in ms
void setup() {
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
}
void loop() {
// Rood faden
for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
// Geel faden
for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
// Groen faden
for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
// Geel faden (terug)
for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
}
De variabele fade maakt het makkelijk de snelheid aan te passen op één plek.
2. Fade Lights met Drukknop
De fading-cyclus start alleen wanneer de knop wordt ingedrukt. Bij loslaten gaat de groene LED aan (standaard).
Schema

Drukknop op pin 7 (met interne pull-down of externe weerstand).
Code
int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;
int button = 7;
const int fade = 10;
void setup() {
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(button, INPUT);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, HIGH); // startstand
}
void loop() {
if (digitalRead(button) == HIGH) {
delay(15); // software debounce
if (digitalRead(button) == HIGH) {
fadeLights();
}
} else {
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, HIGH);
}
}
void fadeLights() {
// Groen uitfaden
for (int i = 255; i >= 0; i--) { analogWrite(ledGreen, i); delay(fade); }
// Geel aan/uit
for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
// Rood aan/uit
for (int i = 0; i <= 255; i++) { analogWrite(ledRed, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledRed, i); delay(fade); }
// Geel aan/uit
for (int i = 0; i <= 255; i++) { analogWrite(ledYellow, i); delay(fade); }
for (int i = 255; i >= 0; i--) { analogWrite(ledYellow, i); delay(fade); }
// Groen aanfaden
for (int i = 0; i <= 255; i++) { analogWrite(ledGreen, i); delay(fade); }
}
3. Fade Lights met Drukknop – Directe stop bij loslaten (verbeterde delay)
Probleem: bij de vorige versie loopt de cyclus door na loslaten van de knop. Oplossing: controleer de knop tussen elke PWM-stap door de delay() te vervangen door een lus die de knop monitort.
Schema
Hetzelfde als versie 2.

Code
int ledRed = 9;
int ledYellow = 6;
int ledGreen = 3;
int button = 7;
// const int fade = 10; // niet meer nodig
void setup() {
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(button, INPUT);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, HIGH);
}
void loop() {
if (digitalRead(button) == HIGH) {
delay(15);
if (digitalRead(button) == HIGH) {
fadeLights();
}
} else {
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, HIGH);
}
}
void fadeLights() {
// Groen uitfaden
for (int i = 255; i >= 0; i--) {
analogWrite(ledGreen, i);
for (int y = 0; y < 1000; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Geel aan
for (int i = 0; i <= 255; i++) {
analogWrite(ledYellow, i);
for (int y = 0; y < 400; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Geel uit
for (int i = 255; i >= 0; i--) {
analogWrite(ledYellow, i);
for (int y = 0; y < 400; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Rood aan
for (int i = 0; i <= 255; i++) {
analogWrite(ledRed, i);
for (int y = 0; y < 1000; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Rood uit
for (int i = 255; i >= 0; i--) {
analogWrite(ledRed, i);
for (int y = 0; y < 1000; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Geel aan
for (int i = 0; i <= 255; i++) {
analogWrite(ledYellow, i);
for (int y = 0; y < 400; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Geel uit
for (int i = 255; i >= 0; i--) {
analogWrite(ledYellow, i);
for (int y = 0; y < 400; y++) {
if (digitalRead(button) == LOW) return;
}
}
// Groen aan
for (int i = 0; i <= 255; i++) {
analogWrite(ledGreen, i);
for (int y = 0; y < 1000; y++) {
if (digitalRead(button) == LOW) return;
}
}
}
Hoe het werkt: De innerlijke for (y...) lus vervangt delay(). Elke iteratie checkt de knop (~10 µs per loop). Bij loslaten (LOW) voert return direct uit de functie, zodat de else in loop() de standaardtoestand (groen aan) herstelt. De telling (1000/400) bepaalt de effectieve fadesnelheid.
Bestanden
- Code: drie versies (zie boven)
- Schema's: twee Fritzing-afbeeldingen
Productieproces
- Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
- Betrouwbaar Arduino RFID Aanwezigheidssysteem Aangedreven door Python
- DHT11 Temperatuur- & Vochtigheidsensor Project met LED-indicatoren en Piezo-luidspreker
- Bouw een Ultrasonische Zweefapparaat met Arduino – Stap-voor-stap Handleiding
- Unopad: Naadloze Arduino MIDI-controller voor Ableton Live
- Arduino-gestuurd automatische plantenwateringssysteem
- Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- De massa van de aarde meten met Arduino: een stapsgewijze DIY-gids
- Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
- 25 kHz 4-pins PWM-ventilatorbesturing met Arduino Uno – Bouw, Code & Test