Ir ao conteúdo
  • Cadastre-se
Luiz Henrique Moneche de A

Arduino Controle de cor de LED RGB via entrada PWM de arduino

Recommended Posts

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;

    }
       

 

esquema.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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);
    }
  }
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, Luiz Henrique Moneche de A disse:

Agradeço pela ajuda, mas está resolvido o problema. 

 

Sim, reparei que foi da maneira que eu sugerí também ... como havia dito, era bem simples.

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×