Boa noite.

Sou iniciante e acho até que vão "rir" do meu problema!

Estou tentando controlar a intensidade de um led na porta 9 PWM e com entrada pela serial através dos caracteres A, D e S....

Só que entra o valor numérico 0 com caractere " ".

Alguém pode me ajudar? Sketch abaixo.


//EXEMPLO DE ENTRADAS DE DADOS PELA SERIAL AUMENTANDO E DIMINUINDO O LED ATRAVES DO PWM//

int LED = 9;
int entrada = 0;

void setup() {
Serial.begin(9600);
pinMode (LED, OUTPUT);
Serial.println (" >>>>>> Digite A para aumentar, D para diminuir e S para apaga-lo ");
Serial.println (" ");
Serial.println (" ");
}

void loop() {
if
(Serial.available() > 0) {
entrada = Serial.read();
}
Serial.print ("Recebido caractere: ");
Serial.print ((char) entrada);
Serial.print (", Numerico: ");
Serial.println (entrada, DEC);


while (entrada == 'A') {
analogWrite (LED, entrada++); //aumenta o LED
}
while (entrada == 'D') {
analogWrite (LED, entrada--); //diminui o LED
}
if (entrada == 'S') {
digitalWrite (LED, LOW); //apaga o LED
}

else
Serial.println ("Por favor, digite apenas caractere A, D ou S!");
Serial.println (" ");

delay (1000); // "devagar" apenas para conseguir ler o caractere
}

Exibições: 2153

Responder esta

Respostas a este tópico

Oi OP, bom dia,

Voce esta convertendo o carácter em DEC para imprimir.

tire o DEC desta linha e deverá imprimir ok.  " Serial.println (entrada, DEC);" 

Verifique a configuração (em baixo 'a esquerda ) do seu serial monitor.

Experimente com  a opção  " No line ending" .

Rui

Obrigado RV, bom dia!

Vou executar suas sugestões  e te retorno!

Abraço

Olavo

OP, vi outra coisa no seu code:

Ao digitar uma letra válida, o code entra no while e não sai mais dele,

teste com if ao invés de while.

Aqui onde estou não tenho como testar o code.

Talvez você tenha que fazer uma revisão completa no seu code.

Rui

Novamente agradeço!
Pelo jeito vou "apanhar" um pouco! Kkk
Estou querendo aprender Arduíno e programação através de leituras...não vou desistir.
Obrigado, e te retorno com resultado.
Abraco.

oi OP,

teste este code:

Rui

//EXEMPLO DE ENTRADAS DE DADOS PELA SERIAL AUMENTANDO E DIMINUINDO O LED ATRAVES DO PWM//

int LED = 9;
int entrada = 0;

void setup()
{
Serial.begin(9600);
pinMode (LED, OUTPUT);
Serial.println (" >>>>>> Digite A para aumentar, D para diminuir e S para apaga-lo ");
Serial.println (" ");
Serial.println (" ");
}

void loop()
{
if (Serial.available() > 0)
{
entrada = Serial.read();

Serial.print ("Recebido caractere: ");
Serial.print ((char) entrada);
Serial.print (", Numerico: ");
Serial.println (entrada);
}

if (entrada == 'A')
{
analogWrite (LED, entrada++); //aumenta o LED
}

if (entrada == 'D')
{
analogWrite (LED, entrada--); //diminui o LED
}

if (entrada == 'S')
{
digitalWrite (LED, LOW); //apaga o LED
}

else
{
Serial.println ("Por favor, digite apenas caractere A, D ou S!");
Serial.println (" ");
}

entrada = 0;

delay (1000); // "devagar" apenas para conseguir ler o caractere
}

Boa noite Rui.

Obrigado pelas dicas...mas continuo com problema!

Quando teclo 'A' ou 'D' o Led acende; E teclando o 'S' ele desliga (ok).

Vou investir mais um tempo neste sketch e tendo a solução eu te mostro.

Abraço

Olavo

Olá Olavo,

Bom dia! No seu código você atribui o valor 0 a entrada (logo antes da instrução delay), desta forma, o valor escrito no led não se altera e aí o led não altera a intensidade da luz. Abaixo segue uma das soluções possíveis para o Exercício, qualquer dúvida, por favor, entre em contato. Abraços,

Cláudio

int LED = 9;
int entrada;
int intensidade = 0;

void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
Serial.println(“Digite ‘A’ para aumentar a intensidade luminosa do LED,
‘D’ para reduzir ou ‘R’ para apagar:”);
}

void loop() {
if (Serial.available() > 0) {
entrada = Serial.read();
if (entrada == ‘A’ || entrada == ‘a’) {
intensidade += 10;
if (intensidade > 255)
intensidade = 255;
}
else if (entrada == ‘D’ || entrada == ‘d’) {
intensidade -= 10;
if (intensidade < 0)
intensidade = 0;
}
else if (entrada == ‘R’ || entrada == ‘r’) {
intensidade = 0;
}
else {
Serial.println(“Por favor, digite apenas ‘A’, ‘D’ ou ‘R’!”);
}
analogWrite(LED, intensidade);
delay (100);
}

Bom dia Cláudio!

Obrigado pelas instruções.

Irei escrever este sketch e estudá-lo.

Qqer novidade te retornarei.

Abraço,

Olavo

O código proposto pelo Claudio funciona adequadamente, como sempre costumo fazer, simulo os códigos dos tópicos onde participo e subo no meu canal do YT um vídeo, ao tentar simular este código encontrei alguns erros na colocação das aspas simples e duplas (") (') caso tenha o mesmo problema segue além do link do vídeo o código corrigido no pastebin, porque creio que por motivos que desconheço ainda, existem símbolos e acentos gráficos que são modificados quando colados aqui.

Parabéns Claudio o código esta ok.

Olavo, por favor, quando considere que seu tópico esta solucionado, edite o titulo atual do seu tópico e coloque a palavra RESOLVIDO antes do titulo atual, desta forma ele servira como fonte de conhecimento para outros com requisições semelhantes. 

Link vídeo:  https://www.youtube.com/watch?v=V4YkgzTxMc8&feature=youtu.be

Link código com correção: http://pastebin.com/3SpijBJ6

Obrigado.

Abs.

Carlos boa tarde!!!

Esse código funciona caso queira usar em uma lampada econômica?

Até hoje não achei Dimmer para esse tipo de lampada..

Abraços

 Boa tarde Léo,

As lâmpadas eletrônicas possuem um circuito eletrônico inversor que eleva a tensão da rede e ao mesmo tempo altera sua frequência, operando numa frequência muito mais alta.

Diferentemente das lâmpadas incandescentes comuns em que a quantidade de luz depende simplesmente da tensão aplicada, nas lâmpadas eletrônicas o circuito é sensível à tensão.

Quando a tensão cai abaixo de certo valor ele simplesmente deixa de funcionar e com isso a lâmpada apaga.

Assim, não é possível controlar o brilho dessas lâmpadas simplesmente controlando a tensão de entrada como ocorre com os dimmers.

Da mesma forma, o brilho das lâmpadas fluorescentes não depende apenas da tensão. Se abaixarmos muito a tensão com o dimmer a lâmpada não ioniza e com isso apaga totalmente.

Não temos portanto um controle de brilho. Além disso, existe o perigo do circuito inversor da lâmpada eletrônica queimar pela ação do dimer.

Por outra parte note que a placa do Arduino esta diretamente ligado a um led, cuja corrente é no máximo de 20mA, não poderia controlar diretamente uma lâmpada sem um circuito de driver de potencia adequado ao proposito.

No caso, a tendência hoje é substituir estas lâmpadas por lâmpadas de LED muito mais eficientes e duráveis, (15 mil horas) mas neste caso é necessário uma técnica diferente para dimerizar estas lâmpadas que não possuem resistência e sim um modulo driver eletrônico em um encapsulado similar a uma lâmpada incandescente, visite o site de minha empresa e veja o dimer que fabricamos para atender esta demanda que é um sucesso de vendas devido a extinção das lâmpadas incandescentes que a partir de 2016 irão deixar de existir, sua fabricação já é proibida, somente deram um prazo para que os comércios esgotem seus estoques.

Link: www.cinedigital-brasil.com.br  clique na aba produtos e dimer para lâmpadas de LED.

Abs. 

Obrigado a todos que de alguma forma me ajudaram a resolver e aprender este Code!

Abraço

Olavo

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço