Jak uvádí název. Jaký je rozdíl mezi těmito dvěma?
analogWrite(pin,0-255)
vs digitalWrite(pin,LOW-HIGH)
Komentáře
- Nechci ‚ být hrubý, ale co v tom bylo matoucí v dokumentaci na arduino.cc nebo zahrnuto v IDE?
Answer
digitalWrite nastaví zadaný pin na jeden ze dvou stavů – HIGH / LOW, který odpovídá 5 V (3,3 V na některých deskách) a zemi. na periodický vysoký / nízký signál, kde procento signálu utraceného na vysoké úrovni je úměrné zapsané hodnotě. například –
analogWrite(PWMpin,255)
Bude VYSOKÝ 100% času, zatímco
analogWrite(PWMpin,127)
Bude VYSOKÝCH 50% času a NÍZKÝCH 50% času
Při použití analogWrite na pin DAC (k dispozici na některých deskách, jako je DUE nebo MEGA ) anál ogWrite ve skutečnosti způsobí, že zadaný pin vydá napěťovou hladinu úměrnou zadané analogové hodnotě.
Například v rámci Due s maximálním napětím 3,3 v a výchozím analogovým rozlišením 8 bitů – [0: 255]
analogWrite(DACpin,255)
Způsobí, že zadaný kolík bude mít výstup 3,3 V, a-
analogWrite(DACpin,127)
Způsobí, že zadaný pin bude mít výstup 1,35v
Komentáře
- Ne, na Mega není žádný DAC.
- máte pravdu, odpověď upravte tak, aby to odrážela.
- Skvělé. Dovolil jsem si provést stručnější úpravy.
- Věřím, že existuje “ maxanalog “ definovat nebo konstantní, aby byla zajištěna lepší kompatibilita s jinými platformami. Server esp8266 má analogový zápis, který se může pohybovat od 0 do 1024. * I ‚ jsem poškrábal některé chloupky a snažil se zjistit, proč by můj řadič s LED diodami ‚ t být stejně jasný se stejným kódem, myslel jsem, že je to kvůli rozdílu v síle nebo napětí, ale použil jsem MOSFET s vhodným (ziskovým) faktorem. Bylo to prostě zapnuto (1024/256) času.
Odpověď
analogWrite (): Metoda analogWrite () nastavuje hodnotu výstupního pinu PWM. Analogový zápis () je na stupnici od 0 do 255, takže analogový zápis (255) požaduje 100% pracovní cyklus (vždy zapnutý) a analogový zápis (127) je 50% pracovní cyklus (v poloviční době).
Syntaxe : analogWrite (pin, val)
Kde,
pin: číslo výstupního pinu PWM.
val: int hodnota pracovního cyklu mezi 0 (vždy vypnuto) až 255 (vždy zapnuto)
Příklad kódu:
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: Metoda digitalWrite () nastavuje hodnotu digitálního kolíku na VYSOKÝ nebo NÍZKÝ. Zde 5 V (nebo 3,3 V na deskách 3,3 V) pro VYSOKÉ, 0 V (zem) pro NÍZKÉ.
Syntax: digitalWrite (pin, val)
Kde,
pin: číslo PIN
val: HIGH nebo LOW
Příklad kódu:
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 }
Odpověď
digitalWrite
nastaví výstupní kolík na LOW nebo HIGH (kde tato napětí závisí na V cc procesoru. Pro Uno nebo Mega, které by bylo 0 V nebo 5 V (nebo blízké).
Zde je snímek obrazovky digitalWrite (LOW):
To znamená, že výstupní pin je na 0 V.
Nyní pro digitalWrite (HIGH):
Výstupní napětí je 5V.
analogWrite
měl být skutečně pojmenován PWMwrite, protože určuje časovače procesoru na výstup PWM (modulace šířky pulzu).
Zkusme analogWrite (1):
Vidíte, že úroveň napětí je většinou 0 V a krátkodobě bude 5 V. Také vidíte, že frekvence je 490 Hz, což referenční stránka pro analogWrite říká, že bude.
Přiblížení:
Výstup je vysoký po dobu 8 µs, což je přesně 1/256 z 2048 µs, což je doba časovače. Takže máme pracovní cyklus 1/256 (0,39%).
Zkusme analogWrite (127) – na půli cesty od 0 do 255:
Nyní vidíte, že výstup je VYSOKÝ přesně v polovině času a NÍZKÝ po zbytek času.
Pojďme vyzkoušet analogWrite (254):
Toto je opak analogWrite (1). Výstup je po celou dobu až na krátkou dobu VYSOKÝ. Přiblížení:
Nyní je výstup vypnutý na 8 µs – ve srovnání s předchozím obrázkem, kde byl zapnutý na 8 µs.
analogWrite (0)
je stejné jako digitalWrite (LOW)
.
analogWrite (255)
je stejný jako digitalWrite (HIGH)
.
To dokazuje příslušný kód v souboru wiring_analog.c:
if (val == 0) { digitalWrite(pin, LOW); } else if (val == 255) { digitalWrite(pin, HIGH); }
Souhrn
analogWrite
v zásadě konfiguruje hardwarové časovače pro výstup PWM. Jakmile to uděláte, hardware časovače vydá požadovaný pracovní cyklus (od 0 do 255), kde 0 je vždy vypnuto, 255 je vždy zapnuto a určitá hodnota mezi nimi vám poskytne PWM (pulzní výstup).
Další informace o časovačích najdete na mé stránce o časovačích .
Odpověď
digitalWrite nastaví kolík na vysokou nebo nízkou hodnotu, která zůstane přesně na této hodnotě, dokud se pro tento kolík znovu nevyvolá digitalWrite.
analogWrite nastaví kolík tak, aby měl oscilační hodnotu, která má délka impulsu na základě pracovního cyklu zadaného jako druhý parametr.
Takže:
digitalWrite (5, HIGH); // Pin 5 goes high analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
Odpověď
analogWrite (): Zapíše analogovou hodnotu (vlna PWM) na pin . Může být použit k rozsvícení LED při různých jasech nebo k řízení motoru různými rychlostmi. Po volání analogWrite()
bude kolík generovat ustálenou čtvercovou vlnu zadaného pracovního cyklu až do dalšího volání analogWrite()
(nebo volání digitalRead()
nebo digitalWrite()
na stejném kolíku). Frekvence signálu PWM na většině pinů je přibližně 490 Hz. Na deskách Uno a podobných deskách mají piny 5 a 6 frekvenci přibližně 980 Hz. Kolíky 3 a 11 na Leonardu také běží na 980 Hz.
Podrobnosti najdete na: https://www.arduino.cc/en/Reference/analogWrite
analogRead (): Přečte hodnotu ze zadaného analogového kolíku. Deska Arduino obsahuje 6kanálový (8 kanálů u Mini a Nano, 16 u Mega), 10bitový analogově-digitální převodník. To znamená, že bude mapovat vstupní napětí mezi 0 a 5 volty na celočíselné hodnoty mezi 0 a 1023. Tím se získá rozlišení mezi odečty: 5 voltů / 1024 jednotek nebo 0,0049 voltů (4,9 mV) na jednotku. Vstupní rozsah a rozlišení lze změnit pomocí analogReference()
.
Podrobnosti naleznete na: https://www.arduino.cc/en/Reference/analogRead
Odpověď
digitalWrite nastavit zadaný pin na jeden ze dvou stavů – VYSOKÝ / NÍZKÝ
Kde, VYSOKÝ = 5 V a LOW = 0 V
analogWrite Nastavte hodnotu PWM pinu PWM
(V Arduino UNO jsou piny PWM 3, 5, 6, 9, 10, 11)
Nastaví pin na periodický vysoký / nízký signál.
analogWrite(PWMpin,255)
Bude VYSOKÝ 100% času, zatímco
analogWrite(PWMpin,127)
Bude VYSOKÝCH 50% času a NÍZKÝCH 50% času
Odpověď
Takže Jaký je rozdíl mezi analogWrite (X, 255) a digitalWrite (X, HIGH)? Pravděpodobně nic, snad kromě toho, že procesor musí udělat nějaké další věci, aby zjistil, že nepotřebuje používat PWM a také styl.