Relembrando
Na aula anterior aprendemos a conectar um Led a uma placa Arduino Uno através de um de seus pinos digitais. Também vimos que a função pinMode() permitia ajustar um pino como saída. Vimos também que a função digitalWrite() permitia ligar esse Led fazendo o estado do pino passar para HIGH e que era possível desligar esse Led com a mesma função passando o estado para LOW .
Também vimos a função delay() que permite uma pausa no processamento causando um intervalo de tempo em milissegundos. Lembrou?
Para te ajudar vamos postar o último código visto na aula passada, a imagem da última montagem e oferecer o nosso link, a partir do qual iremos fazer o exercício de hoje:
- int led=2;
- void setup() {
- pinMode(led, OUTPUT);
- }
- void loop() {
- digitalWrite(led, HIGH);
- delay(1000);
- digitalWrite(led, LOW);
- delay(1000);
- }
![]() |
Montagem da última aula |
Link do projeto da última aula no Wokwi: https://wokwi.com/projects/411763019232562177
Recordando sobre os pinos PWM
Na aula passada eu também comentei que existem situações onde os estados HIGH e LOW não vão atender as nossas necessidades porque vamos querer valores diversos. É o caso, por exemplo, quando um Led precisa ser aceso com diferentes intensidades de iluminação.
Para isso é necessário fazer uso dos pinos digitais PWM, que permitem trabalhar com diferentes durações de pulso para o sinal digital. Esses pinos do Arduino Uno são assinalados com um ~ ao lado do seu número.
Nova montagem
Para fazer nossa nova montagem, se você abriu o meu link da última aula, vou pedir que clique no botão de seta azul para baixo "v" ao lado do botão Save, peça Save a Copy e salve com outro nome esse projeto, por exemplo, Framework Arduino Básico Aula 03: Saídas PWM.
![]() |
Sequência para salvar o projeto com outro nome no Wokwi |
![]() |
Renomeando o projeto |
Feito isso clique na conexão que liga o terminal do resistor até o pino 2 para selecioná-la. Repare que aparece uma janela com as opções disponíveis para esse elemento. Clique no botão na forma de lixeira para eliminá-la.
![]() |
Eliminando uma conexão indesejada |
Em seguida clique na ponta desse terminal e crie uma nova conexão até o pino 3 que está assinalado com o ~, indicando que é um pino PWM.
![]() |
Nova conexão entre resistor e o pino ~3 |
Aproveite para clicar no Led para selecioná-lo e altere a sua cor para amarelo, que ao meu ver, parece ser a cor que melhor apresenta o efeito visual que buscamos nesse simulador.
![]() |
Tela de seleção da cor do Led |
Apesar de ser recomendável diminuir o valor da resistência do resistor para algo como 330 Ω, eu vou manter ele com 1 KΩ pela mesma razão da mudança da cor do Led, isto é, obter o efeito visual desejado nesse simulador, mas em projetos físicos não faria isso.
Modificando o Sketch
Dessa vez precisamos configurar o pino 3 como saída, por isso vamos modificar a variável led que será utilizada pela função pinMode() para 3. Também não vamos mais utilizar a função digitalWrite() porque ela só trabalho com dois estados: HIGH e LOW.
No seu lugar utilizaremos a função analogWrite() porque agora o pino terá um comportamento emulando uma saída analógica com a sua modulação de pulso e ao invés de trabalhar apenas com ZERO ou UM, aceitará uma variação de 0 a 255.
Então a função analogWrite() receberá como parâmetro o pino passado pela variável led e essa variação de 0 a 255 que poderá ser passada também por uma variável chamada pwm. Como ela tem que variar poderia funcionar como um contador em um laço do tipo for(){} que vimos no curso de linguagem C.
Para visualizar melhor o efeito do aumento do brilho no led, vamos também utilizar a função delay() vista na aula passada com uma pausa de processamento de uns 10 milissegundos. Seria interessante usar dois laços do tipo for: um aumentando o valor de pwm e outro diminuindo, assim o led aumentaria de brilho e depois diminuiria.
Para ver essa variável pwm podemos inicializar o monitor serial que vimos na aula1 com o Serial.beigin() e escrever o seu valor no monitor com Serial.print() e Serial.println().
Vamos ao código que você poderá copiar e colar no seu Sketch ou pegar direto indo ao nosso link:
- int led=3; //alterei a variável
- int pwm;
- void setup() {
- pinMode(led, OUTPUT); //configurando o pino como saída
- Serial.begin(9600) ;//iniciando o monitor serial
- }
- void loop() {
- //laço aumentando o valor de pwm
- //pwm variando de 0 a 255
- //incrementando o valor de 5 em 5
- for(pwm=0;pwm<=255;pwm+=5){
- analogWrite(led, pwm);
- Serial.print(("pwm:"));//escrevendo uma string
- Serial.println(pwm);//escrevendo a variável
- delay(10);// pausa de 10 milissegundos
- }
- //laço diminuindo o valor de pwm
- //pwm variando de 255 a 0
- //diminuindo o valor de 5 em 5
- for(pwm=255;pwm>=0;pwm-=5){
- analogWrite(led, pwm);
- Serial.print(("pwm:"));
- Serial.println(pwm);
- delay(10);
- }
- }
Para executar esse código basta clicar no botão start simulation. Para pará-lo clique no botão Stop:
![]() |
Botão Start e Stop Simulation, respectivamente |
Se tudo der certo, ao iniciar a simulação você verá uma tênue variação no brilho do led que pode ser mais ou menos perceptível dependendo do seu computador. Na parte inferior da tela teremos o monitor serial mostrando a variação do valor de pwm. Caso esteja muito rápida, aumente o valor de delay de 10 para 30 milissegundos.
![]() |
Saída do monitor serial mostrando a variável pwm |
Não cabe aqui repetir toda as explicações sobre laços, uma vez que isso já foi visto nos três primeiros cursos desse site. Caso o aluno tenha dificuldade recomendo dar uma olhadinha nas seguintes aulas:
- Aula 10: Portugol Studio - Laços de Repetição do tipo para()
- Linguagem C Aula 06: Laços com número de repetições determinado
- C++ Básico Aula 03: Laços e operadores condicionais
É por isso que a gente recomendava seguir os cursos em uma sequência, para que ao chegar nesse ponto o aluno já tivesse uma certa base e pudéssemos nos concentrar apenas nas novas implementações da framework. Na próxima aula falaremos sobre entradas analógicas. Não esqueça de salvar o seu projeto com o botão Save.
Referências
ARDUINO DOCS. Arduino Documentation. Disponível em: <https://docs.arduino.cc/> Acesso em 05 ago. 2024.
OLIVEIRA, Cláudio Luis Vieira et al. Aprenda Arduino: Uma abordagem prática. Duque de Caixas: Katzen Editora, 2018. 181p. Disponível em: <https://www.fatecjd.edu.br/fatecino/material/ebook-aprenda-arduino.pdf> Acesso em 05 ago. 2024.
OLIVEIRA, Cláudio Luis Vieira. Arduino Descomplicado - Como Elaborar Projetos de Eletrônica. São Paulo: Editora Érica, 2015. 287p.
TINKERCAD. Centro de Aprendizagem. Disponível em: <https://www.tinkercad.com/learn> Acesso em 05 ago. 2024.
WOKWI. Referência do wokwi-arduino-uno. Disponível em: <https://docs.arduino.cc/> Acesso em 05 ago. 2024.