08.11.2017 Views

arduino_básico_Michael_McRoberts

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Capítulo 3 ■ Efeitos com LEDs<br />

79<br />

Primeiramente, você define as variáveis para o pino do LED, um float (tipo de dado de<br />

ponto flutuante) para o valor da onda senoidal, e ledVal, que armazena o valor inteiro<br />

a ser enviado para o pino digital PWM 11.<br />

Neste projeto, você está criando uma onda senoidal e fazendo com que o brilho do<br />

LED acompanhe essa onda. É isso que faz com que a luz pulse, em vez de simplesmente<br />

acender com brilho máximo e apagar novamente.<br />

Você utiliza a função sin(), uma função matemática, para calcular o seno de um ângulo.<br />

Você tem de dar à função o grau em radianos. Assim, temos um loop for que vai de<br />

0 a 179; não devemos passar desse limite, pois isso resultaria em valores negativos, e<br />

o valor do brilho pode estar apenas entre 0 e 255.<br />

A função sin() requer que o ângulo esteja em radianos, e não em graus. Assim, a equação<br />

x*(3.1416/180) converterá o grau do ângulo para radianos. Depois, você transfere<br />

o resultado para ledVal, multiplicando-o por 255 para obter seu valor. O resultado da<br />

função sin() será um número entre -1 e 1, que poderá ser multiplicado por 255 para<br />

obter o brilho máximo. Você converte (cast) o valor de tipo ponto flutuante de sinVal<br />

para um inteiro, utilizando int() na instrução a seguir:<br />

ledVal = int(sinVal*255);<br />

Então, você envia esse valor para o pino digital PWM 11, utilizando a instrução:<br />

analogWrite(ledPin, ledVal);<br />

Na conversão, ou casting, você converte o valor de ponto flutuante para um inteiro<br />

(efetivamente eliminando o que havia após o ponto decimal). Mas como você pode<br />

enviar um valor analógico para um pino digital? Dê uma olhada em seu Arduino. Se<br />

analisar os pinos digitais, você verá que seis deles (3, 5, 6, 9, 10 e 11) têm PWM escrito<br />

ao lado. Esses pinos são diferentes dos pinos digitais, pois são capazes de enviar um<br />

sinal PWM.<br />

PWM significa Pulse Width Modulation, ou Modulação por Largura de Pulso (MLP),<br />

e representa uma técnica para obter resultados analógicos por meios digitais. Nesses<br />

pinos, o Arduino envia uma onda quadrada, ligando e desligando o pino muito rapidamente.<br />

O padrão de ligado/desligado pode simular uma voltagem variando entre<br />

0 V e 5 V. Isso é feito alterando a quantidade de tempo em que a saída permanece<br />

alta (ligada) e baixa (desligada). A duração do tempo em que ela permanece ligada<br />

é conhecida como a largura do pulso.<br />

Por exemplo, se você quisesse enviar o valor 0 para o pino digital PWM 11 utilizando<br />

analogWrite(), o período ON (ligado) seria zero, ou teria o que chamamos de um ciclo<br />

de trabalho (duty cycle 1 ) de 0%. Se você quisesse enviar um valor de 63 (25% dos 255<br />

1 N.T.: Em telecomunicações e eletrônica, o termo duty cycle (razão cíclica ou ciclo de trabalho) é utilizado<br />

para descrever a fração de tempo em que um sistema está em um estado “ativo” (fonte: Wikipédia).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!