-
Posts
2 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Luiz Henrique Moneche de A
-
-
Olá a todos... estou com o seguinte problema
Utilizando um LED RGB, faça um projeto em que o LED deve alternar para as
seguintes cores de acordo com a sequência em que um botão é pressionado:
1. Inicialmente o LED se encontra desligado
2. Ao pressionar o botão 1 vez, o LED deve ficar vermelho
3. Ao pressionar o botão pela segunda vez, o LED deve ficar verde
4. Ao pressionar o botão pela terceira vez, o LED deve ficar azul
5. Ao pressionar o botão pela quarta vez, o LED deve ficar roxo (vermelho + azul)
6. Ao pressionar o botão pela quinta vez, o LED deve ficar verde azulado (azul +
verde)
7. Ao pressionar o botão pela sexta vez, o LED deve ficar laranja (verde +
vermelho)
8. Ao pressionar o botão pela sétima vez, o LED deve ficar branco (verde + azul + vermelho)
9. Ao pressionar o botão pela oitava vez, o LED deve apagar.Tentei fazer de várias formas, porém, não consegui, sempre da algum erro, o mais perto que consegui chegar foi com esse código... (tenho que usar o debouce como filtro)... Já não sei o que fazer... agradeço a todos pela ajuda... a ligação elétrica e igual ao do arquivo anexo, só que com um led RGB...
const int red=8; const int green=10; const int blue=12; const int botao=2; boolean estadoantbotao = LOW; boolean estadoatualbotao = LOW; int count=0; void setup() { pinMode (red,OUTPUT); pinMode (green,OUTPUT); pinMode (blue,OUTPUT); pinMode (botao,INPUT); } boolean debounce (boolean anterior) { boolean atual = digitalRead (botao); if (anterior != atual) { delay(5); atual = digitalRead(botao); } return atual; } void loop() { estadoatualbotao = debounce(estadoantbotao); count=(count==4) ? 0 : count+1; if (estadoantbotao == LOW && estadoatualbotao == HIGH && count==1){ analogWrite (red, 255); analogWrite (green, 0); analogWrite (blue, 0); } if (estadoantbotao == LOW && estadoatualbotao == HIGH && count==2){ analogWrite (red, 0); analogWrite (green, 255); analogWrite (blue, 0); } if (estadoantbotao == LOW && estadoatualbotao == HIGH && count==3){ analogWrite (red, 0); analogWrite (green, 0); analogWrite (blue, 255); } if (estadoantbotao == LOW && estadoatualbotao == HIGH && count==0){ analogWrite (red, 0); analogWrite (green, 0); analogWrite (blue, 0); } estadoantbotao = estadoatualbotao; }
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Controle de cor de LED RGB via entrada PWM de arduino
em Microcontroladores
Postado
@thiagosilva.ste e @aphawk
Agradeço pela ajuda, mas está resolvido o problema.
A quem interessar, o código ficou assim...
const int red=8; // LED VERMELHO PINO 8 const int green=10; // LED VERDE PINO 10 const int blue=12; // LED AZUL PINO 12 const int botao=2; // BOTÃO PINO 2 int estadoantbotao = 0; // VARIÁVEL CONTENDO ESTADO ANTERIOR DO BOTÃO int estadoatualbotao = 0; // VARIÁVEL CONTENDO ESTADO ANTUAL DO BOTÃO int count=0; // VARIÁVEL RESPONSÁVEL PELA CPNTAGEM DE APERTOS DO BOTÃO void setup() { pinMode (red,OUTPUT); // LED DEFINIDO COMO SAÍDA pinMode (green,OUTPUT); // LED DEFINIDO COMO SAÍDA pinMode (blue,OUTPUT); // LED DEFINIDO COMO SAÍDA pinMode (botao,INPUT); // BOTAO DEFINIDO COMO ENTRADA } // FUNÇÃO DEBOUNCE, TRATADA COMO INTEIRO POIS DEVE RETORNAR "0" OU "1" int debounce (int anterior) { int atual = digitalRead (botao); if (anterior != atual) { delay(5); atual = digitalRead(botao); } return atual; } void loop() { estadoatualbotao = debounce(estadoantbotao); // LE O ESTADO DEPOIS DO DEBOUNCE if (estadoatualbotao != estadoantbotao){ // LE O BOTÃO APERTADO if (count==8){ // ZERA O CONTADOR QUANDO CHEGA A 8 count=0; } if (estadoatualbotao==0) // RESOLVE PROBLEMA REFERENTE A CONTAGEM DUPLA QUANDO O BOTÃO ESTÁ APERTADO { count--; } { count++; //AUMENTA CONTAGEM estadoantbotao = estadoatualbotao; // REDEFINE VALOR DO BOTÃO } if (count==1){ // ACENDE LED VERMELHO analogWrite (red, 255); analogWrite (green, 0); analogWrite (blue, 0); } if (count==2){ // ACENDE LED VERDE analogWrite (red, 0); analogWrite (green, 255); analogWrite (blue, 0); } if (count==3){ // ACENDE LED AZUL analogWrite (red, 0); analogWrite (green, 0); analogWrite (blue, 255); } if (count==0){ // DESLIGA TODOS OS LEDS analogWrite (red, 0); analogWrite (green, 0); analogWrite (blue, 0); } if (count==4){ // ACENDE LED ROXO analogWrite (red, 127); analogWrite (green, 0); analogWrite (blue, 127); } if (count==5){ // ACENDE LED VERDE AZULADO analogWrite (red, 112); analogWrite (green, 219); analogWrite (blue, 219); } if (count==6){ // ACENDE LED LARANJA analogWrite (red, 255); analogWrite (green, 50); analogWrite (blue, 0); } if (count==7){ // ACENDE LED BRANCO analogWrite (red, 255); analogWrite (green, 255); analogWrite (blue, 255); } } }