No último post, exploramos o fascinante mundo dos pinos touch do ESP-32, aprendendo a acionar um LED simples com o toque de um dedo. Agora, vamos expandir essa ideia e mergulhar mais fundo no potencial desses pinos. Neste tutorial, vamos elevar nossos projetos a um novo patamar de interatividade e cor, aprendendo a controlar as cores de um LED RGB usando os pinos touch do ESP-32. Prepare-se.
MATERIAIS UTILIZADOS:
- 1 Protoboard 830 pinos;
- 1 ESP-32;
- 3 Resistores de 220Ω;
- 1 Led RGB – cátodo comum;
- 6 Jumper’s macho-macho;
Todos os itens vocês encontram na WJ Componentes.
Como no post anterior, iremos utilizar no nosso projeto o software do Arduino.ide para programarmos o ESP. Se você ainda não instalou a placa ESP ao seu Arduino.ide basta clicar abaixo para voltar no post anterior que tem as dicas de instalação.
LED RGB
Um led RGB é um LED que possui três cores, sendo elas: vermelho, verde e azul, por isso seu nome, R (red), G (green) e B (blue). Essas cores podem acender uma por uma ou pode ser feito uma mistura de cores, acendendo duas cores ou as três ao mesmo tempo.
Existem dois tipos de Led RGB, os de ânodo comum e os de cátodo comum, no projeto, está sendo utilizado o led de cátodo comum, por isso ligamos ele ao GND do nosso ESP-32.
MONTAGEM DO PROJETO
Pinos utilizados:
→ D5 – GPIO5
→ D18 – GPIO18
→ D19 – GPIO19
→ D15 – Pino Touch
O pino touch está conectado apenas a um jumper, para assim podermos tocá-lo.
CÓDIGO FONTE
const byte vermelho = 5; //GPIO5 const byte verde = 18; //GPIO18 const byte azul = 19; //GPIO19 int touch; char flag = 0; //Realiza a contagem void setup() { Serial.begin(9600); pinMode(vermelho, OUTPUT); pinMode(verde, OUTPUT); pinMode(azul, OUTPUT); } void loop() { touch = touchRead (15); //Realiza a leitura do pino touch Serial.println (touch); //Mostra o valor serial do pino touch - Valor:15 if(touch<=15 && flag==0) { digitalWrite (vermelho, HIGH); digitalWrite (verde, LOW); digitalWrite (azul, LOW); delay(200); //cor: vermelho flag=1; } else if(touch<=15 && flag==1) { digitalWrite (vermelho, LOW); digitalWrite (verde, HIGH); digitalWrite (azul, LOW); delay(200); //cor: verde flag=2; } else if(touch<=15 && flag==2) { digitalWrite (vermelho, LOW); digitalWrite (verde, LOW); digitalWrite (azul, HIGH); delay(200); //cor: azul flag=3; } else if(touch<=15 && flag==3) { digitalWrite (vermelho, HIGH); digitalWrite (verde, HIGH); digitalWrite (azul, LOW); delay(200); //cor: amarelo flag=4; } else if(touch<=15 && flag==4) { digitalWrite (vermelho, LOW); digitalWrite (verde, HIGH); digitalWrite (azul, HIGH); delay(200); //cor: azul ciano flag=5; } else if(touch<=15 && flag==5) { digitalWrite (vermelho, HIGH); digitalWrite (verde, HIGH); digitalWrite (azul, HIGH); delay(200); //cor: rosa flag=6; } else { digitalWrite (vermelho, LOW); //desligando leds digitalWrite (verde, LOW); digitalWrite (azul, LOW); flag=0; //zerando a flag } }
Olhando o código mais de perto:
Declarando constantes e variáveis:
const byte vermelho = 5; //GPIO5 const byte verde = 18; //GPIO18 const byte azul = 19; //GPIO19 int touch; char flag = 0; //Realiza a contagem
Este trecho de código inicializa a configuração dos Pinos. Ele atribui os pinos 5, 18 e 19 do ESP-32 as cores vermelho, verde e azul, respectivamente, e estabelece duas variáveis principais: touch
para ler o valor do pino touch e flag
como um contador iniciado em zero, que será usado para alternar entre as cores do LED RGB.
Funções setup:
void setup() { Serial.begin(9600); pinMode(vermelho, OUTPUT); pinMode(verde, OUTPUT); pinMode(azul, OUTPUT); }
Neste trecho de código da função setup()
, são estabelecidas as configurações iniciais para o projeto. Inicializa-se a comunicação serial com uma taxa de transmissão de 9600 bits por segundo para monitoramento de dados, e configura-se os pinos do ESP-32 conectados ao LEDs como saídas.
Função loop
void loop() { touch = touchRead (15); //Realiza a leitura do pino touch Serial.println (touch); //Mostra o valor serial do pino touch - Valor:15 if(touch<=15 && flag==0) { digitalWrite (vermelho, HIGH); digitalWrite (verde, LOW); digitalWrite (azul, LOW); delay(200); //cor: vermelho flag=1; } else if(touch<=15 && flag==1) { digitalWrite (vermelho, LOW); digitalWrite (verde, HIGH); digitalWrite (azul, LOW); delay(200); //cor: verde flag=2; } else if(touch<=15 && flag==2) { digitalWrite (vermelho, LOW); digitalWrite (verde, LOW); digitalWrite (azul, HIGH); delay(200); //cor: azul flag=3; } else if(touch<=15 && flag==3) { digitalWrite (vermelho, HIGH); digitalWrite (verde, HIGH); digitalWrite (azul, LOW); delay(200); //cor: amarelo flag=4; } else if(touch<=15 && flag==4) { digitalWrite (vermelho, LOW); digitalWrite (verde, HIGH); digitalWrite (azul, HIGH); delay(200); //cor: azul ciano flag=5; } else if(touch<=15 && flag==5) { digitalWrite (vermelho, HIGH); digitalWrite (verde, HIGH); digitalWrite (azul, HIGH); delay(200); //cor: rosa flag=6; } else { digitalWrite (vermelho, LOW); //desligando leds digitalWrite (verde, LOW); digitalWrite (azul, LOW); flag=0; //zerando a flag } }
No trecho de código da função loop()
, o programa lê continuamente o valor do pino touch (pino 15) do ESP-32 e exibe este valor no monitor serial. A leitura do pino touch é utilizada para determinar se um toque foi detectado (valor menor ou igual a 15). Dependendo do estado atual da variável flag
, que serve como contador, o programa controla as cores do LED RGB. Inicialmente, se flag
estiver em 0 e um toque for detectado, o LED vermelho é aceso (e os outros apagados), e a flag
é incrementada para 1.
Nos passos subsequentes, a cada novo toque detectado, o programa passa por uma série de condições else if
para alternar as cores do LED RGB. Quando flag
é 1, o LED verde é aceso, para flag
igual a 2, o LED azul, e assim por diante, passando pelas cores amarelo, azul ciano e rosa, cada uma acionada em diferentes estados da flag
(3, 4 e 5, respectivamente). Após exibir cada cor, há um atraso de 200 milissegundos e a flag
é incrementada para mudar para a próxima cor na sequência.
Finalmente, se todas as cores forem exibidas (quando flag
atinge 6) ou se nenhum toque for detectado, o programa desliga todos os LEDs e reinicia a flag
para 0, preparando o sistema para começar o ciclo de cores novamente no próximo toque. Este loop cria um efeito de mudança de cores no LED RGB, controlado pela interação do usuário com o pino touch.
Neste tutorial, avançamos além do básico, explorando a capacidade dos pinos touch do ESP-32 para criar um projeto vibrante e colorido com um LED RGB. Demonstramos como o toque pode não apenas acionar um LED, mas também controlar uma variedade de cores, proporcionando uma experiência interativa e educativa. Esperamos que este guia tenha sido um passo estimulante na sua jornada de exploração com o ESP-32, abrindo caminho para mais inovações e criatividade em seus futuros empreendimentos eletrônicos.
Deixe um comentário