analogWrite()

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 [1] 0 - 8, 10, A3 (18), A4 (19) 732 Hz
MKR1000 WiFi [1] 0 - 8, 10, 11, A3 (18), A4 (19) 732 Hz
Zero [1] 3 - 13, A0 (14), A1 (15) 732 Hz
Nano 33 IoT [1] 2, 3, 5, 6, 9 - 12, A2, A3, A5 732 Hz
Nano 33 BLE/BLE Sense 1 - 13, A0 - A7 500 Hz
Due [2] 2-13 1000 Hz
101 3, 5, 6, 9 Pins 3 und 9: 490 Hz, Pins 5 und 6: 980 Hz
  • [1]: 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.
  • [2]: 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.

Hardware Required

1×Arduino UNO or Genuino UNO
1×Potentiometer
1×LED
1×220 ohm resistor
1×Breadboard
5×Jumper Wires
Bitte Beachten: Dies sind Partnerschaftslinks. Wenn Sie die Komponenten über diese Links Kaufen, können wir eine Provision erhalten, ohne weitere Kosten für Sie. Wir Schätzen es.

Wiring Diagram

Arduino Rotary Potentiometer LED Wiring Diagram

Image is developed using Fritzing. Click to enlarge image

Arduino Code

int ledPin = 3; // LED auf Digitalpin 3 verbunden int analogPin = A0; // Potentiometer auf Pin A0 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 }

For more detailed instruction, see Arduino - Potentiometer fade LED

※ 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.
  • The analogRead() and analogWrite() functions do NOT read and write the same thing. analogRead() function reads the analog value which is converted from the voltage. analogWrite() function writes PWM signal. If you use the analogWrite() function first, and then use analogRead() function to read the value on the same pin, the read value is diferent from the wrote value. In other word, analogRead() function uses ADC (Analog to Digital) converter, but analogWrite() function does NOT use DAC (Digital to Analog) converter.
  • The analog input pins can be used as digital pins, referred to as A0, A1, etc. The exception is the Arduino Nano, Pro Mini, and Mini's A6 and A7 pins, which can only be used as analog inputs.
void setup() { pinMode(A5, OUTPUT); // sets the pin as output } void loop() { for(int i = 0; i < 255; i++) { analogWrite(A5, i); delay(50); } }

Siehe Auch

※ UNSERE BOTSCHAFTEN