Puls­wei­ten­mo­du­la­ti­on

Lese­zeit: 3 Minu­ten

Ein ana­lo­ges Signal kann von 0% bis 100% regu­liert wer­den. Digi­ta­le Signa­le ken­nen aber nur zwei Zustän­de: an (HIGH) oder aus (LOW).
Bei der Puls­wei­ten­mo­du­la­ti­on (PWM) wird das digi­ta­le Signal in bestimm­ten Abstän­den immer wie­der ein- und aus­ge­schal­tet, um ähn­li­che Ergeb­nis­se wie die eines nor­ma­len ana­lo­gen Signals zu erhal­ten. Der Ein-Aus-Wech­sel simu­liert die Span­nung zwi­schen 0 und 5 Volt. Der Dau­er des Ein-Zustan­des ist die Puls­wei­te.
Nur die digi­ta­len Pins, die mit einem ~ gekenn­zeich­net sind, kön­nen mit der PWM ange­spro­chen werden.

Quel­le:  🔗https://​www​.ardui​no​.cc/​e​n​/​T​u​t​o​r​i​a​l​/​F​o​u​n​d​a​t​i​o​n​s​/​PWM (eige­ne Bear­bei­tung, abge­ru­fen am 25.02.23)

PWM-Pins am UNO R3

Bei­spiel:

Die LED an Pin 7 wird in 10er-Schrit­ten lang­sam hel­ler und anschlie­ßend in 10-Schrit­ten wie­der dunkel.

So sieht es aus:

int LED = 6; 

void setup()
{ 
  // bei analogWrite ist kein setup notwendig 
}

void loop()  
{
  // heller
  for (int i = 0; i < 250; i += 10)  
  { 
    analogWrite(LED, i);  
    delay(200);   
  }
  
  // dunkler
  for (int i = 250; i > 0; i -= 10)  
  { 
    analogWrite(LED, i);  
    delay(200);   
  }
}

Alter­na­ti­ve:

int LED = 6; 

int Schritte = 5;  
int Helligkeit = 0;  

void setup()
{
  // bei analogWrite ist kein setup notwendig
  Serial.begin(9600);
}

void loop() 
{
  analogWrite(LED, Helligkeit);
  Helligkeit = Helligkeit + Schritte;  
  delay(50);
  
  /*
    Wenn die Helligkeit den Wert 0 oder (||) 255 erreicht hat, 
    verändert sich der Wert für Schritte:
    aus 5 wird -5, wenn Schritte den Wert 255 erreicht hat -> rückwärts zählen
    Wird beim Rückwärtszählen der Wert 0 erreicht, wird aus -5 +5 -> vorwärts zählen
  */
  if (Helligkeit == 0 || Helligkeit == 255) 
  {
    Schritte = -Schritte;  
  }
} 

analogRead() ana­logRead() for for