Come afferma il titolo. Qual è la differenza tra i due?
analogWrite(pin,0-255)
vs digitalWrite(pin,LOW-HIGH)
Commenti
- Non ‘ intendo essere scortese, ma cosa cera di confuso su questo nella documentazione su arduino.cc o incluso con il IDE?
Answer
digitalWrite imposterà il pin specificato su uno dei due stati: HIGH / LOW, che equivale a 5 V (3,3 V su alcune schede) e massa rispettivamente.
analogWrite può variare in base al tipo di uscita utilizzata.
Se applicato a un pin PWM, imposterà il pin a un segnale periodico alto / basso, dove la percentuale del segnale speso alto è proporzionale al valore scritto. ad esempio –
analogWrite(PWMpin,255)
Sarà ALTA 100% del tempo, mentre
analogWrite(PWMpin,127)
sarà ALTO il 50% delle volte e BASSO il 50% delle volte
Quando si applica analogWrite a un pin DAC (disponibile su alcune schede, come DUE o MEGA ) anal ogWrite farà effettivamente in modo che il pin specificato emetta un livello di tensione proporzionale al valore analogico specificato
Ad esempio, su Due, con una tensione massima di 3,3 V e una risoluzione analogica predefinita di 8 bit – [0: 255]
analogWrite(DACpin,255)
Provocherà luscita del pin specificato 3.3v e-
analogWrite(DACpin,127)
Provocherà loutput del pin specificato 1.35v
Commenti
- No, non cè nessun DAC sul Mega.
- hai ragione, risposta modificata per riflettere questo.
- Ottimo. Mi sono preso la libertà di rendere la modifica più concisa.
- Credo che ci sia un ” maxanalog ” definire o costante, per fornire una migliore compatibilità con altre piattaforme. Lesp8266 ha una scrittura analogica che può variare da 0 a 1024. * ‘ mi sono grattato qualche capello cercando di capire perché il mio controller a led RGB non ‘ t essere brillante con lo stesso codice, pensavo fosse dovuto alla differenza di potenza o tensione, ma ho usato un MOSFET con un fattore (guadagno?) adatto. Era semplicemente acceso per il (1024/256) del tempo.
Risposta
analogWrite (): Il metodo analogWrite () imposta il valore di un pin di uscita PWM. AnalogWrite () è su una scala da 0 a 255, in modo tale che analogWrite (255) richiede un duty cycle del 100% (sempre attivo) e analogWrite (127) è un duty cycle del 50% (metà del tempo).
Sintassi : analogWrite (pin, val)
Dove,
pin: il numero del pin di uscita PWM.
val: int valore del duty cycle compreso tra 0 (sempre disattivato) e 255 (sempre attivo)
Codice di esempio:
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: Il metodo digitalWrite () imposta il valore di un pin digitale come HIGH o LOW. Qui, 5 V (o 3,3 V su schede 3,3 V) per HIGH, 0 V (terra) per LOW.
Sintassi: digitalWrite (pin, val)
Where,
pin: il numero pin
val: HIGH o LOW
Codice di esempio:
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 }
Risposta
digitalWrite
imposta il pin di uscita su BASSO o ALTO (dove queste tensioni dipendono dalla V cc del processore. Per Uno o Mega sarebbe 0V o 5V (o vicino ad esso).
Ecco “uno screenshot di digitalWrite (LOW):
Ovvero, il pin di uscita è a 0V.
Ora per digitalWrite (HIGH):
La tensione di uscita è 5V.
analogWrite
avrebbe dovuto chiamarsi PWMwrite poiché conf igura i timer del processore per emettere PWM (modulazione di larghezza di impulso).
Proviamo analogWrite (1):
Puoi vedere che il livello di tensione è di 0 V la maggior parte del tempo e va a 5 V per brevi periodi. Vedi anche che la frequenza è 490 Hz, che è ciò che la pagina di riferimento per analogWrite dice che sarà.
Ingrandimento:
Loutput è alto per 8 µs, che è esattamente 1/256 di 2048 µs che è il periodo del timer. Quindi, abbiamo un ciclo di lavoro di 1/256 (0,39%).
Proviamo analogWrite (127) – a metà strada da 0 a 255:
Ora puoi vedere che loutput è ALTO esattamente la metà del tempo e BASSO il resto del tempo.
Proviamo analogWrite (254):
Questo è lopposto di analogWrite (1). Luscita è sempre ALTA tranne che per un breve periodo. Ingrandimento:
Ora loutput è disattivato per 8 µs, rispetto allimmagine precedente in cui era attivo per 8 µs.
analogWrite (0)
è uguale a digitalWrite (LOW)
.
analogWrite (255)
è uguale a digitalWrite (HIGH)
.
Ciò è dimostrato dal codice pertinente in wiring_analog.c:
if (val == 0) { digitalWrite(pin, LOW); } else if (val == 255) { digitalWrite(pin, HIGH); }
Riepilogo
analogWrite
fondamentalmente configura i timer hardware per loutput PWM. Una volta fatto ciò, lhardware del timer emette il ciclo di lavoro richiesto (da 0 a 255) dove 0 è sempre spento, 255 è sempre acceso e un valore intermedio fornisce PWM (uscita pulsata).
Per ulteriori informazioni sui timer, vedere la mia pagina sui timer .
Risposta
digitalWrite imposta il pin su un valore alto o basso che rimane esattamente a quel valore finché digitalWrite non viene chiamato di nuovo per quel pin.
analogWrite imposta il pin in modo che abbia un valore oscillante che ha un lunghezza dellimpulso basata sul ciclo di lavoro specificato come secondo parametro.
Quindi:
digitalWrite (5, HIGH); // Pin 5 goes high analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
Risposta
analogWrite (): scrive un valore analogico (onda PWM) su un pin . Può essere utilizzato per accendere un LED a luminosità variabile o azionare un motore a varie velocità. Dopo una chiamata a analogWrite()
, il pin genererà unonda quadra costante del ciclo di lavoro specificato fino alla chiamata successiva a analogWrite()
(o un chiamata a digitalRead()
o digitalWrite()
sullo stesso pin). La frequenza del segnale PWM sulla maggior parte dei pin è di circa 490 Hz. Sulle schede Uno e simili, i pin 5 e 6 hanno una frequenza di circa 980 Hz. Anche i pin 3 e 11 sul Leonardo funzionano a 980 Hz.
Per i dettagli, visita: https://www.arduino.cc/en/Reference/analogWrite
analogRead (): Legge il valore dal pin analogico specificato. La scheda Arduino contiene un convertitore analogico-digitale a 6 canali (8 canali su Mini e Nano, 16 su Mega), 10 bit. Ciò significa che mapperà le tensioni di ingresso tra 0 e 5 volt in valori interi compresi tra 0 e 1023. Ciò produce una risoluzione tra le letture di: 5 volt / 1024 unità o 0,0049 volt (4,9 mV) per unità. Lintervallo di input e la risoluzione possono essere modificati utilizzando analogReference()
.
Per i dettagli, visita: https://www.arduino.cc/en/Reference/analogRead
Risposta
digitalWrite imposta il pin specificato su uno dei due stati – HIGH / LOW
Dove, HIGH = 5 V e LOW = 0 V
analogWrite Imposta il valore PWM del pin PWM
(In Arduino UNO, i pin PWM sono 3, 5, 6, 9, 10, 11)
Imposta il pin a un segnale periodico alto / basso.
analogWrite(PWMpin,255)
Sarà ALTO il 100% delle volte, mentre
analogWrite(PWMpin,127)
Sarà ALTO il 50% delle volte e BASSO il 50% delle volte
Risposta
Quindi qual è la differenza tra analogWrite (X, 255) e digitalWrite (X, HIGH)? Probabilmente niente, tranne forse il processore deve fare alcune cose extra per capire che non ha bisogno di usare PWM, e anche lo stile.