Som tittelen sier. Hva er forskjellen mellom de to?
analogWrite(pin,0-255)
vs digitalWrite(pin,LOW-HIGH)
Kommentarer
- Jeg ‘ t mener å være uhøflig, men hva var forvirrende om dette i dokumentasjonen på arduino.cc eller inkludert i IDE?
Svar
digitalWrite vil angi den angitte pin til en av to tilstander – HIGH / LOW, som tilsvarer henholdsvis 5v (3,3v på noen tavler) og jord.
analogWrite kan variere etter hvilken type utgang som brukes.
Hvis den brukes på en PWM-pin – vil den sette pin til et periodisk høyt / lavt signal, der prosentandelen av signalet som brukes høyt er proporsjonal med verdien som er skrevet. for eksempel –
analogWrite(PWMpin,255)
Vil være HØY 100% av tiden, mens
analogWrite(PWMpin,127)
Vil være HØY 50% av tiden, og LAV 50% av tiden
Når du bruker analogWrite til en DAC-pin (tilgjengelig på noen tavler, som DUE eller MEGA ) anal ogWrite vil faktisk føre til at den spesifiserte pinnen sender ut et spenningsnivå proporsjonalt med den angitte analoge verdien
For eksempel på Due, med maksimal spenning på 3,3v og en standard analog oppløsning på 8 bits – [0: 255]
analogWrite(DACpin,255)
Vil føre til at den angitte pinnen sender ut 3.3v, og-
analogWrite(DACpin,127)
Vil føre til at den angitte pinnen sender ut 1.35v
Kommentarer
- Nei, det er ingen DAC på Mega.
- du har rett, svar redigert for å gjenspeile dette.
- Flott. Jeg tok meg friheten til å gjøre redigeringen mer kortfattet.
- Jeg tror det er en » maxanalog » definere eller konstant, for å gi bedre kompatibilitet med andre plattformer. Esp8266 har en analog forfatter som kan variere fra 0 til 1024. * Jeg ‘ har riper på noen hår og prøver å finne hvorfor RGB-ledet kontrolleren min ikke ville ‘ t være like lys med samme kode, trodde det skyldtes forskjellen i kraft eller spenning, men jeg brukte en MOSFET med passende (forsterkning?) faktor. Det var ganske enkelt på (1024/256) for tiden.
Svar
analogWrite (): Metoden analogWrite () setter verdien til en PWM-utgangsstift. AnalogWrite () er på en skala fra 0 – 255, slik at analogWrite (255) ber om en 100% driftssyklus (alltid på), og analogWrite (127) er en 50% driftssyklus (på halve tiden).
Syntaks : analogWrite (pin, val)
Where,
pin: PWM output pin number.
val: int-verdi av driftssyklus mellom 0 (alltid av) til 255 (alltid på)
Eksempelkode:
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: Metoden digitalWrite () setter verdien til en digital pin som HIGH eller LOW. Her, 5V (eller 3,3V på 3,3V-kort) for HØY, 0V (jord) for LAV.
Syntaks: digitalWrite (pin, val)
Where,
pin: pin number
val: HIGH or LOW
Eksempelkode:
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 }
Svar
digitalWrite
setter utgangspinnen til LAV eller HØY (der disse spenningene avhenger av V cc for prosessoren. For en Uno eller Mega som ville være 0V eller 5V (eller nær den).
Her er et skjermbilde av digitalWrite (LAV):
Det vil si at utgangspinnen er på 0V.
Nå for digitalWrite (HIGH):
Utgangsspenningen er 5V.
analogWrite
burde egentlig ha fått navnet PWMwrite siden det ble igures prosessorens tidtakere for å sende ut PWM (pulsbreddemodulasjon).
La oss prøve analogWrite (1):
Du kan se at spenningsnivået er 0V mesteparten av tiden, og går til 5V i korte perioder. Du ser også at frekvensen er 490 Hz, noe som referansesiden for analogWrite sier at den vil være.
Zoome inn:
Utgangen er høy for 8 µs, som er nøyaktig 1/256 av 2048 µs, som er tidsperioden for tidtakeren. Så vi har en driftssyklus på 1/256 (0,39%).
La oss prøve analogWrite (127) – halvveis fra 0 til 255:
Nå kan du se at utgangen er HØY nøyaktig halve tiden, og LAV resten av tiden.
La oss prøve analogWrite (254):
Dette er det motsatte av analogWrite (1). Utgangen er HØY hele tiden bortsett fra en kort periode. Zoomer inn:
Nå er utgangen av for 8 µs – sammenlignet med det tidligere bildet der det var på i 8 µs.
analogWrite (0)
er det samme som digitalWrite (LOW)
.
analogWrite (255)
er det samme som digitalWrite (HIGH)
.
Dette er bevist av den aktuelle koden i wiring_analog.c:
if (val == 0) { digitalWrite(pin, LOW); } else if (val == 255) { digitalWrite(pin, HIGH); }
Sammendrag
analogWrite
konfigurerer i utgangspunktet maskinvaretimerne for å sende ut PWM. Når du har gjort det, utløser tidtakermaskinvaren den forespurte driftssyklusen (fra 0 til 255) der 0 alltid er av, 255 er alltid på, og noen verdi i mellom gir deg PWM (pulsert utgang).
For mer informasjon om tidtakerne, se min side om tidtakere .
Svar
digitalWrite setter pinnen til en høy eller lav verdi som forblir nøyaktig den verdien til digitalWrite blir kalt for den pinnen igjen.
analogWrite setter pinnen til å ha en oscillerende verdi som har en pulslengde basert på driftssyklusen som er angitt som den andre parameteren.
Så:
digitalWrite (5, HIGH); // Pin 5 goes high analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
Svar
analogWrite (): Skriver en analog verdi (PWM-bølge) til en pin . Kan brukes til å tenne en LED med varierende lysstyrke eller kjøre motor i forskjellige hastigheter. Etter et anrop til analogWrite()
, vil pinnen generere en jevn firkantbølge av den angitte driftssyklusen til neste samtale til analogWrite()
(eller en ring til digitalRead()
eller digitalWrite()
på samme pin). Frekvensen til PWM-signalet på de fleste pinner er omtrent 490 Hz. På Uno og lignende kort har pinnene 5 og 6 en frekvens på omtrent 980 Hz. Pins 3 og 11 på Leonardo kjører også ved 980 Hz.
For detaljer besøk: https://www.arduino.cc/en/Reference/analogWrite
analogRead (): Leser verdien fra den angitte analoge pinnen. Arduino-kortet inneholder en 6-kanals (8 kanaler på Mini og Nano, 16 på Mega), 10-bit analog til digital omformer. Dette betyr at den vil kartlegge inngangsspenninger mellom 0 og 5 volt til heltall mellom 0 og 1023. Dette gir en oppløsning mellom avlesningene på: 5 volt / 1024 enheter eller, 0,0049 volt (4,9 mV) per enhet. Inndataområdet og oppløsningen kan endres ved hjelp av analogReference()
.
Svar
digitalWrite sett den angitte pin til en av to tilstander – HIGH / LOW
Where, HIGH = 5 V and LOW = 0 V
analogWrite Still inn PWM-verdien til PWM-pinnen
(I Arduino UNO er PWM-pinnene 3, 5, 6, 9, 10, 11)
Den vil sette pinnen til et periodisk høyt / lavt signal.
analogWrite(PWMpin,255)
Vil være HØY 100% av tiden, mens
analogWrite(PWMpin,127)
Blir HØY 50% av tiden og LAV 50% av tiden
Svar
Så hva er forskjellen mellom analogWrite (X, 255) og digitalWrite (X, HIGH)? Sannsynligvis ingenting, bortsett fra kanskje at prosessoren må gjøre noen ekstra ting for å finne ut at den ikke trenger å bruke PWM, og også stil.