Antworten:
digitalWrite setzt den angegebenen Pin auf einen von zwei Zuständen - HIGH / LOW, was 5 V (3,3 V auf einigen Karten) bzw. Masse entspricht.
analogWrite kann je nach Art der verwendeten Ausgabe variieren.
Bei Anwendung auf einen PWM-Pin wird der Pin auf ein periodisches High / Low-Signal gesetzt, wobei der Prozentsatz des hoch ausgegebenen Signals proportional zum geschriebenen Wert ist. beispielsweise -
analogWrite(PWMpin,255)
Wird 100% der Zeit HOCH sein, während
analogWrite(PWMpin,127)
Wird in 50% der Fälle HOCH und in 50% der Fälle NIEDRIG sein
Wenn Sie analogWrite auf einen DAC-Pin anwenden (auf einigen Karten wie DUE oder MEGA verfügbar), bewirkt analogWrite, dass der angegebene Pin tatsächlich einen Spannungspegel ausgibt, der proportional zum angegebenen Analogwert ist
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
analogWrite (): Die analogWrite () -Methode 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% (in der Hälfte der Zeit) anfordert.
Syntax : analogWrite (Pin, Val)
Wo,
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, Val)
Wo,
Pin: Die Pin-Nummer
val: HOCH oder NIEDRIG
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
}
digitalWrite
Setzt den Ausgangspin entweder auf LOW oder HIGH (wobei diese Spannungen von der V cc des Prozessors abhängen . Bei einem Uno oder Mega wären das 0 V oder 5 V (oder nahe daran).
Hier ist ein Screenshot von digitalWrite (LOW):
Das heißt, der Ausgangspin liegt bei 0V.
Jetzt zu digitalWrite (HIGH):
Die Ausgangsspannung beträgt 5V.
analogWrite
sollte eigentlich PWMwrite heißen, da es die Prozessor-Timer für die Ausgabe von PWM (Pulsweitenmodulation) konfiguriert.
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 auf 5 V ansteigt. Sie sehen auch, dass die Frequenz 490 Hz beträgt, wie auf der Referenzseite für analogWrite angegeben .
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 ein Tastverhältnis 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 HOCH und den Rest der Zeit NIEDRIG 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 der Ausgang ausgeschaltet für 8 us - im Vergleich zu dem früheren Bild , wo es für 8 us war.
analogWrite (0)
ist das gleiche wie digitalWrite (LOW)
.
analogWrite (255)
ist das gleiche wie 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);
}
analogWrite
Grundsätzlich werden die Hardware-Timer für die Ausgabe von PWM konfiguriert. Sobald Sie dies tun, gibt die Timer-Hardware das angeforderte Tastverhältnis (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 auf meiner Seite zu Timern .
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, dessen Impulslänge auf dem als zweiten Parameter angegebenen Arbeitszyklus basiert.
Damit:
digitalWrite (5, HIGH); // Pin 5 goes high
analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
analogWrite ():
Schreibt einen analogen Wert (PWM-Welle) auf einen Pin. Kann verwendet werden, um eine LED mit unterschiedlichen Helligkeiten zu beleuchten oder einen Motor mit verschiedenen Geschwindigkeiten anzutreiben. Nach einem Anruf bei analogWrite()
erzeugt der Pin eine stetige Rechteckwelle des angegebenen Arbeitszyklus bis zum nächsten Anruf bei analogWrite()
(oder einem Anruf bei digitalRead()
oderdigitalWrite()
auf demselben Pin). 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 geändert werden analogReference()
.
Weitere Informationen finden Sie unter: https://www.arduino.cc/en/Reference/analogRead
digitalWrite setzt 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)
Dadurch wird der Pin auf ein periodisches High / Low-Signal gesetzt.
analogWrite(PWMpin,255)
Wird 100% der Zeit HOCH sein, während
analogWrite(PWMpin,127)
Wird in 50% der Fälle HOCH und in 50% der Fälle NIEDRIG sein
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 und auch keinen Stil verwenden muss.