AnalogWrite және digitalWrite арасындағы айырмашылық қандай?

Атауы айтылғандай. Бұл екеуінің арасында қандай айырмашылық бар?

analogWrite(pin,0-255) vs digitalWrite(pin,LOW-HIGH)

8

7 жауаптар

digitalWrite белгіленген шрифті 5в (3.3в кейбір тақталарда) және жерге сәйкес келетін HIGH/LOW жағдайының біріне орнатады.

analogWrite пайдаланылатын шығу түріне қарай өзгеруі мүмкін.

Егер PWM пинке қолданылса, ол штырманы жазылған мәнге пропорциялы жоғары сигналдың пайыздық көрсеткіші болатын жоғары/төмен мезгілді сигналға орнатады. Мысалға -

    analogWrite(PWMpin,255)

Уақыттың 100% ЖОҒАРЫ болады

    analogWrite(PWMpin,127)

Уақыттың жоғарғы 50%, ал уақыттың төмен 50% болады

DAC кілтіне analogWrite қолданған кезде (DUE немесе MEGA сияқты кейбір тақталарда қол жетімді) analogWrite анықталған аналогты мәнге пропорционалды кернеу деңгейін шығару үшін көрсетілген пиннің мәнін береді

Мысалы, максималды кернеу 3.3 В және әдепкі аналогтық ажыратымдылығы 8 бит - [0: 255]

    analogWrite(DACpin,255)

Көрсетілген шрифтті 3.3v шығаруға әкеледі, және-

    analogWrite(DACpin,127)

Көрсетілген шрифтті 1.35в шығуына әкеледі

13
қосылды
Сіз дұрыс, бұл жауапты редакциялау үшін.
қосылды автор christoff, көзі
Мен басқа платформалармен үйлесімділікті қамтамасыз ету үшін «maxanalog» анықтайды немесе тұрақты. Esp8266-да 0-ден 1024-ке дейін болуы мүмкін аналогтық жазба бар. * Мен RGB басқарушы контроллер неге сол кодпен жарқын болмайтынын анықтау үшін тырнақтарды тырнап алдым, бұл биліктің айырмашылығы немесе кернеу, бірақ мен MOSFET қолданды (қолайлы). Бұл жай ғана уақыттың (1024/256).
қосылды автор dotnetengineer, көзі
Жоқ, Мегада DAC жоқ.
қосылды автор Sprogz, көзі
Тамаша. Мен редакцияны қысқаша көрсету үшін еркіндікке қол жеткіздім.
қосылды автор Sprogz, көзі

analogWrite(): The analogWrite() method sets the value of a PWM output pin. The analogWrite() is on a scale of 0 - 255, such that analogWrite(255) requests a 100% duty cycle (always on), and analogWrite(127) is a 50% duty cycle (on half the time).

PWM Duty Cycle

Syntax: analogWrite(pin, val)

Мұнда,

pin: PWM шығу PIN нөмірі.

val: int кезіндегі жұмыс циклінің мәні 0 (әрқашан өшірілген) арасындағы 255 (әрқашан қосулы)

Мысал Код:

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: The digitalWrite() method sets the value of a digital pin as HIGH or LOW. Here, 5V (or 3.3V on 3.3V boards) for HIGH, 0V (ground) for LOW.

Syntax: digitalWrite(pin, val)

Мұнда,

pin: түйреуіш нөмірі

val: HIGH немесе LOW

Мысал Код:

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
}
6
қосылды

digitalWrite sets the output pin to either LOW or HIGH (where those voltages depend on the Vcc of the processor. For a Uno or Mega that would be 0V or 5V (or close to it).

Төменде digitalWrite (LOW) скриншоты бар:

digitalWrite (LOW)

Яғни, шығыс түйреуіші 0 В-да болады.


Енді digitalWrite (HIGH) үшін:

Шығу кернеуі 5В.

digitalWrite (HIGH)


analogWrite really should have been named PWMwrite since it configures the processor timers to output PWM (pulse-width modulation).

Келіңіздер, analogWrite (1):

analogWrite (1)

Сіз кернеудің деңгейі ең көбі 0 В, ал қысқа мерзім ішінде 5 В-ге дейін жететінін көруге болады. Сондай-ақ, жиіліктің 490 Гц екенін көресіз, ол analogWrite арналған сілтеме беті болады.


Масштабтау:

analogWrite (1) - zoomed

Шығу 8 мкс-ке жоғары, бұл таймердің кезеңі болып табылатын 2048 мкс-тен 1/256 шамасында. Сонымен, бізде 1/256 (0,39%) цикл бар.


Келіңіздер, analogWrite (127) - 0-ден 255-ке дейін жарты жолда көрейік:

analogWrite (127)

Енді сіз өнімді жарты уақытқа дейін HIGH және қалған уақыттың төмен екенін көре аласыз.


Келіңіздер, analogWrite (254):

analogWrite (254)

This is the opposite of analogWrite (1). The output is HIGH all the time except for a brief period. Масштабтау:

analogWrite (254) - zoomed

Енді 8 μс үшін шығыс өшірулі - 8 μs болатын алдыңғы кескінмен салыстырғанда.


analogWrite (0) is the same as digitalWrite (LOW).

analogWrite (255) is the same as digitalWrite (HIGH).

Бұл wiring_analog.c ішіндегі тиісті кодпен дәлелденді:

if (val == 0)
{
    digitalWrite(pin, LOW);
}
else if (val == 255)
{
    digitalWrite(pin, HIGH);
}

Резюме

analogWrite basically configures the hardware timers to output PWM. Once you do that the timer hardware outputs the requested duty cycle (from 0 to 255) where 0 is always off, 255 is always on, and some value inbetween gives you PWM (pulsed output).


Таймерлер туралы қосымша ақпарат алу үшін таймерлер туралы менің бетімді қараңыз .

5
қосылды

digitalWrite жоғары немесе төмен мәнге орнатады, ол сол мәнді қалағанға дейін digitalWrite шақырылғанға дейін дәл сол мәнде қалады.

analogWrite пинді екінші параметр ретінде көрсетілген жұмыс циклінің негізінде импульстік ұзақтығы бар тербелгіш мәнге ие болады.

Мәселен:

digitalWrite (5, HIGH);   //Pin 5 goes high
analogWrite (6, 127);     //Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
3
қосылды

analogWrite(): Writes an analog value (PWM wave) to a pin. Can be used to light a LED at varying brightnesses or drive a motor at various speeds. After a call to analogWrite(), the pin will generate a steady square wave of the specified duty cycle until the next call to analogWrite() (or a call to digitalRead() or digitalWrite() on the same pin). The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz. Pins 3 and 11 on the Leonardo also run at 980 Hz.

For details visit: https://www.arduino.cc/en/Reference/analogWrite

analogRead(): Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts/1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference().

For details visit: https://www.arduino.cc/en/Reference/analogRead

2
қосылды

digitalWrite set the specified pin to one of two states - HIGH/LOW

Мұнда, HIGH = 5 V және LOW = 0 V

analogWrite Set the PWM value of PWM pin

(Arduino UNO-да PWM түйреуіштері 3, 5, 6, 9, 10, 11)

Ол пинтті мезгілдік жоғары/төмен сигналға орнатады.

analogWrite(PWMpin,255)

Уақыттың 100% ЖОҒАРЫ болады

analogWrite(PWMpin,127)

Уақыттың жоғарғы 50%, ал уақыттың төмен 50% болады

1
қосылды

So what's the difference between analogWrite(X, 255) and digitalWrite(X, HIGH)? Probably nothing, except perhaps the processor has to do some extra stuff to work out that it doesn't need to use PWM, and also style.

0
қосылды