Wie der Titel schon sagt. Was ist der Unterschied zwischen den beiden?
analogWrite(pin,0-255)
vs digitalWrite(pin,LOW-HIGH)
Kommentare
- Ich ‚ möchte nicht unhöflich sein, aber was war daran verwirrend in der Dokumentation auf arduino.cc oder im Lieferumfang des IDE?
Antwort
digitalWrite setzt den angegebenen Pin auf einen von zwei Zuständen – HIGH / LOW Dies entspricht 5 V (3,3 V auf einigen Karten) bzw. Masse.
analogWrite kann je nach Art des verwendeten Ausgangs variieren.
Wenn es an einen PWM-Pin angelegt wird, wird der Pin gesetzt zu einem periodischen High / Low-Signal, bei dem der Prozentsatz des hoch ausgegebenen Signals proportional zum geschriebenen Wert ist. Beispiel:
analogWrite(PWMpin,255)
ist HIGH 100%. der Zeit, während
analogWrite(PWMpin,127)
in 50% der Fälle HOCH und in 50% der Fälle NIEDRIG ist
Bei Anwendung von analogWrite an einen DAC-Pin (verfügbar auf einigen Boards, wie dem DUE oder MEGA ) anal ogWrite bewirkt tatsächlich, dass der angegebene Pin einen Spannungspegel proportional zum angegebenen Analogwert ausgibt.
Zum Beispiel auf dem Due mit einer maximalen Spannung von 3,3 V und einer analogen Standardauflösung von 8 Bit – [0: 255]
analogWrite(DACpin,255)
bewirkt, dass der angegebene Pin 3,3 V ausgibt, und
analogWrite(DACpin,127)
Bewirkt, dass der angegebene Pin 1,35 V ausgibt.
Kommentare
- Nein, es gibt keinen DAC auf dem Mega.
- Sie haben Recht, die Antwort wurde bearbeitet, um dies widerzuspiegeln.
- Großartig. Ich habe mir erlaubt, die Bearbeitung präziser zu gestalten.
- Ich glaube, es gibt ein “ maxanalog “ definieren oder konstant, um eine bessere Kompatibilität mit anderen Plattformen zu gewährleisten. Der esp8266 verfügt über ein Analogschreiben, das von 0 bis 1024 reichen kann. * Ich ‚ habe einige Haare herausgekratzt, um herauszufinden, warum mein RGB-LED-Controller nicht ‚ nicht so hell mit dem gleichen Code, dachte, es lag an der Differenz in Leistung oder Spannung, aber ich habe einen MOSFET mit geeignetem (Gain?) Faktor verwendet. Es war einfach für (1024/256) der Zeit eingeschaltet.
Antwort
analogWrite (): Die Methode analogWrite () legt den Wert eines PWM-Ausgangspins fest. AnalogWrite () liegt auf einer Skala von 0 bis 255, sodass analogWrite (255) ein Tastverhältnis von 100% (immer eingeschaltet) und analogWrite (127) ein Tastverhältnis von 50% (zur Hälfte der Zeit) anfordert.
Syntax : analogWrite (Pin, Wert)
Wobei
Pin: die PWM-Ausgangs-Pin-Nummer.
val: int Wert des Arbeitszyklus zwischen 0 (immer aus) und 255 (immer ein)
Beispielcode:
int outLed = 10; //LED connected to digital pin 10 int value = 0; //variable to store the read value int analogIN = 3; //input pin void setup() { pinMode(outLed, OUTPUT); // set the PWM pin as OUTPUT } void loop() { value = analogRead(analogIN); // read the value of analogIN (values between from 0 to 1023) analogWrite(outLed, value/4); // sets the read value on outLed (values between from 0 to 255) }
digitalWrite: Die Methode digitalWrite () setzt den Wert eines digitalen Pins auf HIGH oder LOW. Hier 5 V (oder 3,3 V auf 3,3 V-Karten) für HIGH, 0 V (Masse) für LOW.
Syntax: digitalWrite (Pin, Wert)
Wobei
Pin: die Pin-Nummer
Wert: HIGH oder LOW
Beispielcode:
int ledPin = 13; // LED connected to digital pin 13 void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin as output } void loop() { digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); // waits for a second }
Antwort
digitalWrite
setzt den Ausgangspin entweder auf LOW oder HIGH (wobei diese Spannungen von Vc abhängen) des Prozessors. Für ein Uno oder Mega, das 0 V oder 5 V (oder nahe daran) wäre.
Hier ist ein Screenshot von digitalWrite (LOW):
Das heißt, der Ausgangspin liegt bei 0 V.
Jetzt für digitalWrite (HIGH):
Die Ausgangsspannung beträgt 5 V.
analogWrite
sollte eigentlich PWMwrite heißen, da es conf Konfiguriert die Prozessor-Timer für die Ausgabe von PWM (Pulsweitenmodulation).
Versuchen wir es mit analogWrite (1):
Sie können sehen, dass der Spannungspegel die meiste Zeit 0 V beträgt und für kurze Zeit 5 V beträgt. Sie sehen auch, dass die Frequenz 490 Hz beträgt, was auf der Referenzseite für analogWrite angibt.
Vergrößern:
Die Ausgabe ist für 8 µs hoch, was genau 1/256 von 2048 µs entspricht, was der Periode des Timers entspricht. Wir haben also einen Arbeitszyklus von 1/256 (0,39%).
Versuchen wir es mit analogWrite (127) – auf halbem Weg von 0 bis 255:
Jetzt können Sie sehen, dass die Ausgabe genau die Hälfte der Zeit HIGH und den Rest der Zeit LOW ist.
Versuchen wir es mit analogWrite (254):
Dies ist das Gegenteil von analogWrite (1). Der Ausgang ist bis auf einen kurzen Zeitraum immer HIGH. Vergrößern:
Jetzt ist die Ausgabe für 8 µs aus – verglichen mit dem früheren Bild, in dem sie für 8 µs eingeschaltet war.
analogWrite (0)
ist dasselbe wie digitalWrite (LOW)
.
analogWrite (255)
entspricht digitalWrite (HIGH)
.
Dies wird durch den entsprechenden Code in wiring_analog.c belegt:
if (val == 0) { digitalWrite(pin, LOW); } else if (val == 255) { digitalWrite(pin, HIGH); }
Zusammenfassung
analogWrite
konfiguriert grundsätzlich die Hardware-Timer für die Ausgabe von PWM. Sobald Sie dies getan haben, gibt die Timer-Hardware den angeforderten Arbeitszyklus (von 0 bis 255) aus, wobei 0 immer ausgeschaltet ist, 255 immer eingeschaltet ist und ein Wert dazwischen Ihnen PWM (gepulste Ausgabe) gibt.
Weitere Informationen zu den Timern finden Sie unter auf meiner Seite zu Timern .
Antwort
digitalWrite setzt den Pin auf einen hohen oder niedrigen Wert, der genau auf diesem Wert bleibt, bis digitalWrite erneut für diesen Pin aufgerufen wird.
analogWrite setzt den Pin auf einen oszillierenden Wert mit a Pulslänge basierend auf dem als zweiten Parameter angegebenen Arbeitszyklus.
Also:
digitalWrite (5, HIGH); // Pin 5 goes high analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
Antwort
analogWrite (): Schreibt einen Analogwert (PWM-Welle) in einen Pin . Kann verwendet werden, um eine LED mit unterschiedlichen Helligkeiten zu beleuchten oder einen Motor mit verschiedenen Geschwindigkeiten anzutreiben. Nach einem Aufruf von analogWrite()
erzeugt der Pin eine stetige Rechteckwelle des angegebenen Arbeitszyklus bis zum nächsten Aufruf von analogWrite()
(oder a Rufen Sie digitalRead()
oder digitalWrite()
am selben Pin auf. Die Frequenz des PWM-Signals an den meisten Pins beträgt ungefähr 490 Hz. Auf der Uno-Karte und ähnlichen Karten haben die Pins 5 und 6 eine Frequenz von ungefähr 980 Hz. Die Pins 3 und 11 des Leonardo laufen ebenfalls mit 980 Hz.
Weitere Informationen finden Sie unter: https://www.arduino.cc/en/Reference/analogWrite
analogRead (): Liest den Wert vom angegebenen analogen Pin. Die Arduino-Karte enthält einen 10-Bit-Analog-Digital-Wandler mit 6 Kanälen (8 Kanäle beim Mini und Nano, 16 beim Mega). Dies bedeutet, dass Eingangsspannungen zwischen 0 und 5 Volt auf ganzzahlige Werte zwischen 0 und 1023 abgebildet werden. Dies ergibt eine Auflösung zwischen Messwerten von: 5 Volt / 1024 Einheiten oder 0,0049 Volt (4,9 mV) pro Einheit. Der Eingabebereich und die Auflösung können mit analogReference()
geändert werden.
Weitere Informationen finden Sie unter: https://www.arduino.cc/en/Reference/analogRead
Antwort
digitalWrite Setzen Sie den angegebenen Pin auf einen von zwei Zuständen – HIGH / LOW
Wobei HIGH = 5 V und LOW = 0 V
analogWrite Stellen Sie den PWM-Wert des PWM-Pins ein.
(In Arduino UNO sind die PWM-Pins 3, 5, 6, 9, 10, 11)
Der Pin wird gesetzt zu einem periodischen High / Low-Signal.
analogWrite(PWMpin,255)
wird 100% der Zeit HIGH sein, während
analogWrite(PWMpin,127)
ist in 50% der Fälle HOCH und in 50% der Fälle NIEDRIG
Antwort
Also Was ist der Unterschied zwischen analogWrite (X, 255) und digitalWrite (X, HIGH)? Wahrscheinlich nichts, außer vielleicht muss der Prozessor einige zusätzliche Dinge tun, um herauszufinden, dass er kein PWM verwenden muss, und auch keinen Stil.