PWM & RGB

Från HIGH/LOW till mjuka övergångar. analogWrite, duty cycle och RGB-färgblandning — alla färger av bara tre.

Vad du lärde dig

Träff 2 i konkreta byggstenar:

analogWrite — talen mellan HIGH och LOW 0–255 styr en pinne istället för bara av/på. Endast PWM-pinnarna (~ markerade: 3, 5, 6, 9, 10, 11).
Duty cycle & PWM Arduinon kan inte göra "halv spänning" — den blinkar istället jättesnabbt (~490 Hz på de flesta pinnar, 980 Hz på 5 och 6). Ögat ser ett medelvärde.
RGB-LED:ens fyra ben Tre färger + en gemensam katod. Tre 220 Ω-resistorer, tre PWM-pins, en GND.
Additiv färgblandning Röd + grön = gul. Röd + blå = magenta. Alla tre = vit. Med 256 nivåer per kanal: 16 miljoner kombinationer.
Fade-mönstret En for-loop som räknar 0–255 + en delay — och en LED som tonas in mjukt istället för att klicka av/på.

Vad är PWM?

Pulse Width Modulation — pinnen är fortfarande bara HIGH eller LOW, men Arduinon blinkar den så snabbt att ögat ser ett medelvärde. analogWrite(pin, 128) betyder "vara HIGH halva tiden, LOW andra halvan" — och LED:en ser ut att lysa halvt.

Tre oscilloskop-vågformer vid 5%, 50% och 90% duty cycle.
Duty cycle: andelen tid pinnen är HIGH. 0% = släckt, 100% = full styrka.
Tre överlappande färgcirklar — röd, grön och blå — som bildar gul, cyan, magenta och vit där de möts.
Additiv färgblandning: tre cirklar, alla färger.
Fritzing-koppling av RGB-LED med tre 220-ohm-resistorer till PWM-pins D3, D5, D6.
Kopplingen: R → D6, G → D5, B → D3, katod → GND.

Fade — mjuk övergång

Det första steget bortom HIGH/LOW: en for-loop som räknar upp värdet på pinnen en grad i taget. Resultat: LED:en tonas in och ut istället för att klicka.

pwm-fade.ino Ladda ner ↓
const int ledPin = 6;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // Fade upp: 0 → 255
  for (int v = 0; v <= 255; v++) {
    analogWrite(ledPin, v);
    delay(5);
  }
  // Fade ner: 255 → 0
  for (int v = 255; v >= 0; v--) {
    analogWrite(ledPin, v);
    delay(5);
  }
}
Varför pin 6 just här? Bara pinnar märkta med tilde (~) på Arduino-kortet stödjer analogWrite: 3, 5, 6, 9, 10 och 11. Skickar du analogWrite på pin 7 så får du bara HIGH (≥128) eller LOW (<128).

RGB — alla färger av tre

Tre LED:er i samma paket: röd, grön och blå. Varje styrs av sin egen PWM-pin. Med 256 nivåer per kanal får du 256³ ≈ 16,7 miljoner kombinationer.

rgb-cycle.ino Ladda ner ↓
const int ledR = 6;
const int ledG = 5;
const int ledB = 3;

void setup() {
  pinMode(ledR, OUTPUT);
  pinMode(ledG, OUTPUT);
  pinMode(ledB, OUTPUT);
}

void loop() {
  // Lila: röd + blå
  analogWrite(ledR, 200);
  analogWrite(ledG,   0);
  analogWrite(ledB, 200);
  delay(1000);

  // Gult: röd + grön
  analogWrite(ledR, 255);
  analogWrite(ledG, 180);
  analogWrite(ledB,   0);
  delay(1000);

  // Cyan: grön + blå
  analogWrite(ledR,   0);
  analogWrite(ledG, 200);
  analogWrite(ledB, 200);
  delay(1000);

  // Vit: alla tre på samma nivå
  analogWrite(ledR, 150);
  analogWrite(ledG, 150);
  analogWrite(ledB, 150);
  delay(1000);
}
Experimentera: Värdena är pedagogiskt valda, inte heliga. Skruva på dem — höj röd lite, sänk blå — och se vad du får. Det är så du lär dig vad varje kanal gör. Sista blocket (150/150/150) ger en mjukare vit än 255/255/255 — pröva båda och se skillnaden.
Nästa
Träff 3 — Digital input

Knapp, buzzer och if/else. Arduinon börjar lyssna.

Träff 3 →