Drej på potmeteret (A0) og justér LED-lyset i realtid via PWM på en ~-pin (D9). Først en simpel direkte mapping, derefter en glat version med let filtrering og “gamma”.
Potentiometer → A0 (spændingsdeler), LED → D9 via modstand til GND.
Drej mod 5V-siden ⇒ højere A0-værdi ⇒ højere PWM ⇒ lysere LED.
analogRead(A0) giver 0…1023 (0…Vref ≈ 5 V).analogWrite(9, x) forventer 0…255 (PWM duty cycle).Nem, responsiv – god som første version.
const int POT_PIN = A0; // potentiometer (wiper)
const int LED_PIN = 9; // PWM-pin (~)
void setup(){
pinMode(LED_PIN, OUTPUT);
}
void loop(){
int raw = analogRead(POT_PIN); // 0..1023
int pwm = raw / 4; // 0..255 (hurtig mapping)
analogWrite(LED_PIN, pwm);
}
map(): int pwm = map(raw,0,1023,0,255); (husk at map() ikke klamper automatisk).Reducerer småhop og gør den nederste del af skalaen mere brugbar (øjet er ikke lineært).
const int POT_PIN = A0;
const int LED_PIN = 9;
// Low-pass filter (0..1). Mindre alpha = mere udglatning, langsommere respons.
const float ALPHA = 0.15f;
// Perceptuel “gamma” (1.8–2.4 er typisk). 1.0 = slået fra.
const float GAMMA = 2.2f;
float filtered = 0.0f; // 0..1
void setup(){
pinMode(LED_PIN, OUTPUT);
}
void loop(){
// Læs og normalisér 0..1023 -> 0..1
int raw = analogRead(POT_PIN);
float x = raw / 1023.0f;
// Enkel low-pass: ny = ny*ALPHA + (1-ALPHA)*gammel
filtered = ALPHA * x + (1.0f - ALPHA) * filtered;
// Gamma-korrektion for jævnere lysfornemmelse
float perceptual = pow(filtered, GAMMA);
// Skaler til PWM 0..255
int pwm = (int)(perceptual * 255.0f + 0.5f);
if (pwm < 0) pwm = 0; else if (pwm > 255) pwm = 255;
analogWrite(LED_PIN, pwm);
}
ALPHA. Ønsker du mere “følsomhed” i lavt lys? Øg GAMMA en smule.Nogle pots rammer ikke helt 0 og 1023. Her kan du klampe og re-mappe dit brugbare område.
const int POT_PIN = A0;
const int LED_PIN = 9;
int rawMin = 50; // mål dine faktiske min/max i Serial Monitor
int rawMax = 980;
void setup(){ pinMode(LED_PIN, OUTPUT); Serial.begin(115200); }
void loop(){
int raw = analogRead(POT_PIN);
raw = constrain(raw, rawMin, rawMax);
int pwm = map(raw, rawMin, rawMax, 0, 255);
analogWrite(LED_PIN, pwm);
// valgfrit debug:
// Serial.print("raw="); Serial.print(raw);
// Serial.print("\tpwm="); Serial.println(pwm);
}
analogRead(A0) mens du drejer hele vejen – læs minimum og maksimum og indsæt dem ovenfor.