Som titlen siger. Hvad er forskellen mellem de to?
analogWrite(pin,0-255)
vs digitalWrite(pin,LOW-HIGH)
Kommentarer
- Jeg ‘ t betyder at være uhøflige, men hvad var forvirrende ved dette i dokumentationen på arduino.cc eller inkluderet i IDE?
Svar
digitalWrite indstiller den angivne pin til en af to tilstande – HIGH / LOW, hvilket svarer til henholdsvis 5v (3,3v på nogle kort) og jord.
analogWrite kan variere efter den anvendte type output.
Hvis den anvendes på en PWM-pin – indstiller den pin til et periodisk høj / lavt signal, hvor procentdelen af signalet brugt højt er proportional med den skrevne værdi. for eksempel –
analogWrite(PWMpin,255)
Vil være HØJ 100% af tiden, mens
analogWrite(PWMpin,127)
vil være HØJ 50% af tiden og LAV 50% af tiden
Når du anvender analogWrite til en DAC-pin (tilgængelig på nogle kort, som DUE eller MEGA ) anal ogWrite vil faktisk få den angivne pin til at udsende et spændingsniveau, der er proportionalt med den specificerede analoge værdi
For eksempel på Due med maksimal spænding på 3,3 v og en standard analog opløsning på 8 bit – [0: 255]
analogWrite(DACpin,255)
Vil medføre, at den angivne pin output 3.3v, og-
analogWrite(DACpin,127)
Vil få den angivne pin til at udgive 1,35v
Kommentarer
- Nej, der er ingen DAC på Mega.
- du har ret, svar redigeret for at afspejle dette.
- Fantastisk. Jeg tillod mig at gøre redigeringen mere kortfattet.
- Jeg mener, at der er en ” maxanalog ” definerer eller konstant for at give bedre kompatibilitet med andre platforme. Esp8266 har en analogforfatter, der kan variere fra 0 til 1024. * Jeg ‘ har ridset nogle hår ud og forsøger at finde ud af, hvorfor min RGB-ledede controller ikke ville ‘ t være så lys med den samme kode, troede det skyldtes forskellen i effekt eller spænding, men jeg brugte en MOSFET med en passende (forstærkning?) faktor. Det var simpelthen tændt for (1024/256) for tiden.
Svar
analogWrite (): AnalogWrite () -metoden indstiller værdien for en PWM-udgangsstift. AnalogWrite () er på en skala fra 0 – 255, således at analogWrite (255) anmoder om en 100% -cyklus (altid tændt), og analogWrite (127) er en 50% -cyklus (på halve tiden). p>
Syntaks : analogWrite (pin, val)
Hvor,
pin: PWM output pin nummer.
val: int-værdi af driftscyklus mellem 0 (altid fra) til 255 (altid tændt)
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 () indstiller værdien af en digital pin som HIGH eller LOW. Her, 5V (eller 3,3V på 3,3V-kort) til HIGH, 0V (jord) til LOW.
Syntaks: digitalWrite (pin, val)
Hvor,
pin: pin nummer
val: HIGH eller 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
indstiller udgangsstiften til enten LAV eller HØJ (hvor disse spændinger afhænger af V cc for processoren. For en Uno eller Mega, der ville være 0V eller 5V (eller tæt på den).
Her er et skærmbillede af digitalWrite (LOW):
Det vil sige, udgangsstiften er ved 0V.
Nu for digitalWrite (HIGH):
Udgangsspændingen er 5V.
analogWrite
burde virkelig have fået navnet PWMwrite, da det conf iguer processortimerne til output PWM (pulsbreddemodulation).
Lad os prøve analogWrite (1):
Du kan se, at spændingsniveauet er 0V det meste af tiden og går til 5V i korte perioder. Du ser også, at frekvensen er 490 Hz, hvilket er, hvad referencesiden til analogWrite siger, at den vil være.
Zoomer ind:
Outputtet er højt for 8 µs, hvilket er nøjagtigt 1/256 af 2048 µs, hvilket er timeren. Så vi har en toldcyklus på 1/256 (0,39%).
Lad os prøve analogWrite (127) – halvvejs fra 0 til 255:
Nu kan du se, at output er HØJ nøjagtigt halvdelen af tiden og LAV resten af tiden.
Lad os prøve analogWrite (254):
Dette er det modsatte af analogWrite (1). Outputtet er HØJ hele tiden undtagen i en kort periode. Zoomer ind:
Nu er output off for 8 µs – sammenlignet med det tidligere billede, hvor det var tændt for 8 µs.
analogWrite (0)
er det samme som digitalWrite (LOW)
.
analogWrite (255)
er det samme som digitalWrite (HIGH)
.
Dette er bevist af den relevante kode i wiring_analog.c:
if (val == 0) { digitalWrite(pin, LOW); } else if (val == 255) { digitalWrite(pin, HIGH); }
Resume
analogWrite
konfigurerer grundlæggende hardwaretimerne til output af PWM. Når du har gjort det, udsender timerhardwaren den ønskede driftscyklus (fra 0 til 255), hvor 0 altid er slukket, 255 er altid tændt, og en værdi imellem giver dig PWM (pulserende output). > For mere information om timerne, se min side om timere .
Svar
digitalWrite sætter stiften til en høj eller lav værdi, der forbliver nøjagtigt den værdi, indtil digitalWrite kaldes til den stift igen.
analogWrite indstiller stiften til at have en oscillerende værdi, som har en pulslængde baseret på den driftscyklus, der er angivet som den anden parameter.
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 værdi (PWM-bølge) til en pin . Kan bruges til at tænde en LED i forskellige lysstyrker eller køre en motor ved forskellige hastigheder. Efter et opkald til analogWrite()
, vil stiften generere en konstant firkantbølge af den specificerede driftscyklus indtil det næste opkald til analogWrite()
(eller en kald til digitalRead()
eller digitalWrite()
på samme pin). Frekvensen af PWM-signalet på de fleste ben er ca. 490 Hz. På Uno og lignende kort har ben 5 og 6 en frekvens på ca. 980 Hz. Pins 3 og 11 på Leonardo kører også ved 980 Hz.
Besøg: https://www.arduino.cc/en/Reference/analogWrite
analogRead (): Læser værdien fra den angivne analoge pin. Arduino-kortet indeholder en 6-kanal (8 kanaler på Mini og Nano, 16 på Mega), 10-bit analog til digital konverter. Dette betyder, at det vil kortlægge indgangsspændinger mellem 0 og 5 volt i heltalsværdier mellem 0 og 1023. Dette giver en opløsning mellem aflæsningerne på: 5 volt / 1024 enheder eller, 0049 volt (4,9 mV) pr. Enhed. Indtastningsområdet og opløsningen kan ændres ved hjælp af analogReference()
.
Svar
digitalWrite indstil den angivne pin til en af to tilstande – HIGH / LOW
Hvor, HIGH = 5 V og LOW = 0 V
analogWrite Indstil PWM-værdien for PWM-pin
(I Arduino UNO er PWM-pins 3, 5, 6, 9, 10, 11)
Det indstiller pin til et periodisk høj / lavt signal.
analogWrite(PWMpin,255)
Vil være HØJ 100% af tiden, mens
analogWrite(PWMpin,127)
Bliver HØJ 50% af tiden og LAV 50% af tiden
Svar
Så hvad er forskellen mellem analogWrite (X, 255) og digitalWrite (X, HIGH)? Sandsynligvis intet, undtagen måske processoren er nødt til at gøre nogle ekstra ting for at regne ud, at det ikke behøver at bruge PWM og også style.