Conforme indica o título. Qual é a diferença entre os dois?
analogWrite(pin,0-255)
vs digitalWrite(pin,LOW-HIGH)
Comentários
- Eu não ‘ não quero ser rude, mas o que estava confuso sobre isso na documentação em arduino.cc ou incluído com o IDE?
Resposta
digitalWrite irá definir o pino especificado para um dos dois estados – HIGH / LOW, que equivale a 5v (3,3v em algumas placas) e aterramento, respectivamente.
analogWrite pode variar de acordo com o tipo de saída usada.
Se aplicado a um pino PWM – ele definirá o pino a um sinal periódico alto / baixo, em que a porcentagem do sinal gasto alto é proporcional ao valor escrito. por exemplo –
analogWrite(PWMpin,255)
Será ALTO 100% do tempo, enquanto
analogWrite(PWMpin,127)
Será ALTO 50% do tempo e BAIXO 50% do tempo
Ao aplicar analogWrite a um pino DAC (disponível em algumas placas, como o DUE ou MEGA ) anal ogWrite fará com que o pino especificado produza um nível de tensão proporcional ao valor analógico especificado
Por exemplo, no dia devido, com tensão máxima de 3,3 V e uma resolução analógica padrão de 8 bits – [0: 255]
analogWrite(DACpin,255)
Irá fazer com que o pino especificado produza 3,3v e-
analogWrite(DACpin,127)
Fará com que o pino especificado produza 1,35v
Comentários
- Não, não há DAC no Mega.
- você está correto, resposta editada para refletir isso.
- Ótimo. Tomei a liberdade de tornar a edição mais concisa.
- Acredito que haja um ” maxanalog ” definir ou constante, para fornecer melhor compatibilidade com outras plataformas. O esp8266 tem uma gravação analógica que pode variar de 0 a 1024. * Eu ‘ arranhei alguns cabelos tentando descobrir por que meu controlador led RGB não ‘ t ser tão brilhante com o mesmo código, pensei que fosse devido à diferença de potência ou tensão, mas usei um MOSFET com fator (ganho?) adequado. Estava simplesmente ativado (1024/256) da época.
Resposta
analogWrite (): O método analogWrite () define o valor de um pino de saída PWM. O analogWrite () está em uma escala de 0 a 255, de modo que analogWrite (255) solicita um ciclo de trabalho de 100% (sempre ativado) e analogWrite (127) é um ciclo de trabalho de 50% (na metade do tempo).
Sintaxe : analogWrite (pin, val)
Onde,
pin: o número do pino de saída PWM.
val: valor int do ciclo de trabalho entre 0 (sempre desligado) e 255 (sempre ligado)
Exemplo de código:
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: O método digitalWrite () define o valor de um pino digital como HIGH ou LOW. Aqui, 5 V (ou 3,3 V em placas de 3,3 V) para ALTO, 0 V (terra) para BAIXO.
Sintaxe: digitalWrite (pin, val)
Onde,
pin: o número do pin
val: HIGH ou LOW
Exemplo de código:
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 }
Resposta
digitalWrite
define o pino de saída para BAIXO ou ALTO (onde essas tensões dependem do V cc do processador. Para um Uno ou Mega que seria 0V ou 5V (ou próximo disso).
Aqui está uma imagem de digitalWrite (LOW):
Ou seja, o pino de saída está em 0 V.
Agora para digitalWrite (HIGH):
A tensão de saída é 5 V.
analogWrite
realmente deveria ter sido nomeado PWMwrite desde que conf igura os temporizadores do processador para produzir PWM (modulação por largura de pulso).
Vamos tentar analogWrite (1):
Você pode ver que o nível de tensão é 0 V na maioria das vezes e vai para 5 V por curtos períodos. Você também verá que a frequência é 490 Hz, que é o que a página de referência para analogWrite afirma que será.
Ampliando:
A saída é alta para 8 µs, que é exatamente 1/256 de 2048 µs, que é o período do temporizador. Portanto, temos um ciclo de trabalho de 1/256 (0,39%).
Vamos tentar analogWrite (127) – meio caminho de 0 a 255:
Agora você pode ver que a saída é ALTA exatamente na metade do tempo e BAIXA no resto do tempo.
Vamos tentar analogWrite (254):
Este é o oposto de analogWrite (1). A saída é ALTA o tempo todo, exceto por um breve período. Ampliando:
Agora a saída está desativada por 8 µs – em comparação com a imagem anterior, onde estava ativada por 8 µs.
analogWrite (0)
é o mesmo que digitalWrite (LOW)
.
analogWrite (255)
é o mesmo que digitalWrite (HIGH)
.
Isso é comprovado pelo código relevante em wiring_analog.c:
if (val == 0) { digitalWrite(pin, LOW); } else if (val == 255) { digitalWrite(pin, HIGH); }
Resumo
analogWrite
basicamente configura os temporizadores de hardware para gerar PWM. Depois de fazer isso, o hardware do temporizador emite o ciclo de trabalho solicitado (de 0 a 255), onde 0 está sempre desligado, 255 está sempre ligado e algum valor intermediário fornece PWM (saída pulsada).
Para obter mais informações sobre os temporizadores, consulte minha página sobre temporizadores .
Resposta
digitalWrite define o pino para um valor alto ou baixo que permanece exatamente nesse valor até que digitalWrite seja chamado para aquele pino novamente.
analogWrite define o pino para ter um valor oscilante que tem um comprimento de pulso com base no ciclo de trabalho especificado como o segundo parâmetro.
Então:
digitalWrite (5, HIGH); // Pin 5 goes high analogWrite (6, 127); // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
Resposta
analogWrite (): Grava um valor analógico (onda PWM) em um pino . Pode ser usado para acender um LED com brilho variável ou acionar um motor em várias velocidades. Depois de uma chamada para analogWrite()
, o pino irá gerar uma onda quadrada estável do ciclo de trabalho especificado até a próxima chamada para analogWrite()
(ou um ligue para digitalRead()
ou digitalWrite()
no mesmo pino). A frequência do sinal PWM na maioria dos pinos é de aproximadamente 490 Hz. Nas placas Uno e semelhantes, os pinos 5 e 6 têm uma frequência de aproximadamente 980 Hz. Os pinos 3 e 11 no Leonardo também funcionam a 980 Hz.
Para obter detalhes, visite: https://www.arduino.cc/en/Reference/analogWrite
analogRead (): Lê o valor do pino analógico especificado. A placa Arduino contém um conversor de analógico para digital de 6 canais (8 canais no Mini e Nano, 16 no Mega) de 10 bits. Isso significa que ele mapeará tensões de entrada entre 0 e 5 volts em valores inteiros entre 0 e 1023. Isso resulta em uma resolução entre as leituras de: 5 volts / 1024 unidades ou 0,0049 volts (4,9 mV) por unidade. O intervalo de entrada e a resolução podem ser alterados usando analogReference()
.
Para obter detalhes, visite: https://www.arduino.cc/en/Reference/analogRead
Resposta
digitalWrite defina o pino especificado para um de dois estados – HIGH / LOW
Onde, HIGH = 5 V e LOW = 0 V
analogWrite Defina o valor PWM do pino PWM
(No Arduino UNO, os pinos PWM são 3, 5, 6, 9, 10, 11)
Ele definirá o pino a um sinal periódico alto / baixo.
analogWrite(PWMpin,255)
Será ALTO 100% do tempo, enquanto
analogWrite(PWMpin,127)
Será ALTO 50% do tempo e BAIXO 50% do tempo
Resposta
Então qual é a diferença entre analogWrite (X, 255) e digitalWrite (X, HIGH)? Provavelmente nada, exceto talvez o processador tenha que fazer algumas coisas extras para descobrir que não precisa usar PWM e também estilo.