Seu Curso

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size

2º Programa - Utilizando LED com PWM

Imprimir
Avaliação do Usuário: / 1
PiorMelhor 

Introdução

No artigo Exemplo 01 – usando LED fiz um exemplo para manipular o LED usando saída digital (DigitalOut), ou seja, atribuímos valores 0 ou 1 para as variáveis que controlam o LED. Neste artigo vamos controlar as variáveis que manipulam o LED com saída PWM – Modulação de Largura de Pulso, que permite que controlemos a intensidade do LED.

Segundo Exemplo – Semáforo com controle de intensidade da cor

Como já ensinado no artigo anterior, crie um novo programa. Dê o nome de Exemplo-SemaforoPWM. Lembre-se de alterar o template para Empty Program. Depois crie um novo arquivo e dê o nome de semaforopwm.cpp . Importe a biblioteca mbed e abra o arquivo para iniciar a codificação.

Primeiro vamos testar um código simples de controle de LED.

#include "mbed.h"

PwmOut ledr(LED1);


int main() {

int t=0;

float p=0;

while(1) {

if(t==0) p+=0.1f;

if(t==1) p-=0.1f;

if(p<=0) t=0;

if(p>=1) t=1;

ledr = p;

wait(0.1);

}

}

 

Neste exemplo a variável p controla a intensidade do LED e a variável t verifica se o LED está aumentando de intensidade ou diminuindo. Assim que a variável p (que controla a intensidade) fica menor ou igual a zero, a variável t recebe 0, o que significa que o LED precisa começar a diminuir a intensidade. Quando a variável p fica maior ou igual a um, a variável t recebe , que significa que o LED precisa começar a aumentar a intensidade. Como a estrutura for é bloqueante, achamos mais adequado fazer uso do próprio while (que precisa ter pra termos um processo contínuo) e validar através de Ifs a oscilação do LED, que neste caso é o vermelho (LED1).

 

Agora vamos simular o funcionamento do semáforo usando PWM. Conforme passa o tempo a intensidade do LED para cada cor diminui. Para isso usamos uma estrutura de repetição (FOR) para controlar o PWM. Para o vermelho foi feito decremento na intensidade de 0.01 com espera de 0.5s, totalizando 10s. Para o verde o decremento na intensidade foi de 0.1 com espera de 0.5s, totalizando 5s. Por fim, o amarelo com decremento de 0.3 e espera de 0.9s, totalizando 3s.

O código ficou da seguinte maneira:

 

#include "mbed.h"


PwmOut ledr(LED1);

PwmOut ledg(LED2);

int main() {

while(true)  {

ledr=0;

ledg=1;

for(float p=0.0f;p<1.0f;p+=0.05f) //10s no vermelho

{

ledr=p;

wait(0.5);

}

ledr=1;

for(float p=0.0f;p<1.0f;p+=0.1f)//5s no verde

{

ledg=p;

wait(0.5);

}

for(float p=0.0f;p<1.0f;p+=0.3f)//3s no amarelo

{

ledg=p;

ledr=p;

wait(0.9);

}

}

 

}

 

 

 

You are here: