Diese Seite ist auch in 2 anderen Sprachen verfügbar.
Sprache wechseln  

analogWrite()

[Analog I/O]

Beschreibung

Schreibt einen Analogwert (PWM-Welle) auf einen Pin. Kann z.B. benutzt werden, um eine LED mit verschiedener Helligkeit leuchten zu lassen oder einen Motor mit unterschiedlicher Geschwindigkeit laufen zu lassen. Nach Aufruf von analogWrite() generiert die Funktion eine stetige Rechteckwelle mit angegebenem Zyklus, bis der nächste Aufruf von analogWrite() (oder digitalRead() oder digitalWrite()) auf dem gleichen Pin erfolgt.

Board PWM-Pins PWM-Frequenz

Uno, Nano, Mini

3, 5, 6, 9, 10, 11

490 Hz (Pins 5 und 6: 980 Hz)

Mega

2 - 13, 44 - 46

490 Hz (Pins 4 und 13: 980 Hz)

Leonardo, Micro, Yún

3, 5, 6, 9, 10, 11, 13

490 Hz (Pins 3 und 11: 980 Hz)

Uno WiFi Rev.2, Nano Every

3, 5, 6, 9, 10

976 Hz

MKR boards *

0 - 8, 10, A3 (18), A4 (19)

732 Hz

MKR1000 WiFi *

0 - 8, 10, 11, A3 (18), A4 (19)

732 Hz

Zero *

3 - 13, A0 (14), A1 (15)

732 Hz

Nano 33 IoT *

2, 3, 5, 6, 9 - 12, A2, A3, A5

732 Hz

Nano 33 BLE/BLE Sense

1 - 13, A0 - A7

500 Hz

Due **

2-13

1000 Hz

101

3, 5, 6, 9

Pins 3 und 9: 490 Hz, Pins 5 und 6: 980 Hz

* Zusätzlich zu den oben erwähnten PWM-Funktionen für die Pins verfügen die MKR- und Zero-Boards über einen echten Analogausgang, wenn analogWrite() auf dem DAC0 (A0)-Pin benutzt wird.
** Zusätzlich zu den oben erwähnten PWM-Funktionen für die Pins verfügt das Due-Board über einen echten Analogausgang, wenn analogWrite() auf den DAC0 und DAC1-Pins benutzt wird.

Du musst einen Pin nicht explizit als Ausgabepin über pinMode() festlegen,
bevor du analogWrite() nutzt. Die analogWrite()-Funktion hat nichts mit analogen Pins oder der analogRead-Funktion zu tun.

Syntax

analogWrite(pin, value)

Parameter

pin: Der Arduino-Pin auf den geschrieben werden soll. Erlaubte Datentypen: int.
value: Die Zykluszeit. Werte zwischen 0 (immer aus) und 255 (immer an). Erlaubte Datentypen: int.

Rückgabewert

Nichts.

Beispielcode

Setzt die Ausgabe auf dem LED-Pin proportional zu dem Wert, der von einem Potentiometer gelesen wird.

int ledPin = 9; // LED auf Digitalpin 9 verbunden
int analogPin = 3; // Potentiometer auf Pin 3 verbunden
int val = 0; // Variable, um den gelesenen Wert zu speichern

void setup() {
  pinMode(ledPin, OUTPUT); // Setzt den Pin als output.
}

void loop() {
  val = analogRead(analogPin); // Liest den Wert vom Pin ein
  analogWrite(ledPin, val / 4); // analogRead: Werte von 0 bis 1023, analogWrite: Werte von 0 bis 255
}

Anmerkungen und Warnungen

Die PWM-Ausgaben auf Pins 5 und 6 werden höhere Zyklen als erwartet haben. Dies passiert, weil die Funktionen millis() und delay() den gleichen internen Timer nutzen, um diese PWM-Ausgaben zu generieren. In kleinen Zyklen (z.B. 0 bis 10) ist der Effekt am stärksten und kann dazu führen, dass der Wert 0 die Spannung auf Pin 5 und 6 nicht komplett wegnimmt, d.h. dass z.B. bei Wert 0 die LED trotzdem leuchtet.

Siehe auch

  • DEFINITION PWM