Usando isto caseiro você pode fazer qualquer cor no sistema RGB com cinco botões
1 - adicione vermelho
2 - Adicionar verde
3 - Adicionar azul
4 - Aleatório (cor aleatória)
5 - Redefinir
Do que precisamos:
1. Arduino (no meu caso arduino mega)
2. Conselho de Desenvolvimento
3. Tipo de jumper: pai mãe e pai pai
4. LCD 1602 (2 linhas de 16 caracteres)
5. Botões 5 peças
6. LED RGB SMD
7. Resistor por 10 Kom 5 peças
Para começar, conectamos o LED RGB (na ausência de um resistor, coloque um resistor em 220 ohms).
Em seguida, colocamos 5 botões: uma perna de botão para fixar 5V e a outra através de um resistor de 10K no chão e a mesma perna no arduino.
Conectamos o monitor LCD 1602 ao SDA e SCL (I2C).
Tudo isso está conectado aos contatos do arduino (GND, 5V, SDA SCL, 2, 3, 4, 9, 10, 11, 12, 13) como na imagem.
Bem, na verdade, o próprio esboço
#include "LiquidCrustal_I2C.h" // conecte a biblioteca para trabalhar com a exibição via I2C
#include "Wire.h" // Conecte a biblioteca para trabalhar com o I2C
int R = 9;
int G = 10;
int B = 11;
// cores RGB
int BR = 0;
int BG = 0;
int BB = 0;
// variáveis para salvar o valor
int KR = 2; // botão vermelho
int KG = 3; // botão verde
int KB = 4; // botão azul
int C = 13; // botão reset
int RS = 12; // botão aleatório
LiquidCrystal_I2C lcd (0x27.16.2); // Conecta a tela (endereço, colunas, linhas)
void setup () {// executa uma vez
pinMode (R, OUTPUT);
pinMode (G, OUTPUT);
pinMode (B, SAÍDA);
// conecte o LED RGB
}
void loop () {// repete sem parar
atraso (10); // atraso 10 ms
lcd.init (); // define a exibição
lcd.backlight (); // liga a luz de fundo da tela
lcd.clear (); // limpa a tela
lcd.setCursor (5, 0); // coloca o cursor na 6a coluna e na 0a linha
lcd.print ("Cor"); // escreve cor
lcd.setCursor (0, 1);
lcd.print ("R"); // escreve R
lcd.setCursor (6, 1);
lcd.print ("G"); / escreva G
lcd.setCursor (12, 1);
lcd.print ("B"); escreva B
lcd.print (BB); // imprime o valor azul
lcd.setCursor (2, 1);
lcd.print (BR); // imprime o valor de vermelho
lcd.setCursor (8, 1);
lcd.print (BG); // imprime o valor verde
lcd.setCursor (13, 1);
if (digitalRead (KR) == ALTO) {BR + = 15; } // se o botão R for pressionado, o valor de R + 15
if (leitura digital (KG) == ALTA) {BG + = 15; } // se o botão G for pressionado, o valor de G + 15
if (digitalRead (KB) == ALTO) {BB + = 15; } // se o botão B for pressionado, o valor B + 15
if (digitalRead (C) == ALTO) {BR - = 254; } // se o botão C for pressionado, o valor de R -254
if (leitura digital (C) == ALTA) {BG - = 254; } // se o botão C for pressionado, o valor de G -254
if (digitalRead (C) == ALTO) {BB - = 254; } // se o botão C for pressionado, o valor B -254
if (digitalRead (RS) == ALTO) {BR = aleatório (0, 254); } // se o botão RS for pressionado, o valor de R será de 0 a 254
if (digitalRead (RS) == ALTO) {BG = aleatório (0, 254); } // se o botão RS for pressionado, o valor de G será de 0 a 254
if (digitalRead (RS) == ALTO) {BB = aleatório (0, 254); } // se o botão RS for pressionado, o valor de B será de 0 a 254
BR = restrição (BR, 0, 254); // BR = (valor, de, para)
analogWrite (R, BR); // usando a modulação PWM, ajustamos o brilho de 0 a 254
BG = restrição (BG, 0, 254); // BG = (valor, de, para)
analogWrite (G, BG); // usando a modulação PWM, ajustamos o brilho de 0 a 254
BB = restrição (BB, 0, 254); // BB = (valor, de, até)
analogWrite (B, BB); // usando a modulação PWM, ajustamos o brilho de 0 a 254
}
Faça o download do esboço:
Isso é o que deveria ser!
Escreva nos comentários que não está claro que eu responderei a todas as perguntas
#include "LiquidCrustal_I2C.h" // conecte a biblioteca para trabalhar com a exibição via I2C
#include "Wire.h" // Conecte a biblioteca para trabalhar com o I2C
int R = 9;
int G = 10;
int B = 11;
// cores RGB
int BR = 0;
int BG = 0;
int BB = 0;
// variáveis para salvar o valor
int KR = 2; // botão vermelho
int KG = 3; // botão verde
int KB = 4; // botão azul
int C = 13; // botão reset
int RS = 12; // botão aleatório
LiquidCrystal_I2C lcd (0x27.16.2); // Conecta a tela (endereço, colunas, linhas)
void setup () {// executa uma vez
pinMode (R, OUTPUT);
pinMode (G, OUTPUT);
pinMode (B, SAÍDA);
// conecte o LED RGB
}
void loop () {// repete sem parar
atraso (10); // atraso 10 ms
lcd.init (); // define a exibição
lcd.backlight (); // liga a luz de fundo da tela
lcd.clear (); // limpa a tela
lcd.setCursor (5, 0); // coloca o cursor na 6a coluna e na 0a linha
lcd.print ("Cor"); // escreve cor
lcd.setCursor (0, 1);
lcd.print ("R"); // escreve R
lcd.setCursor (6, 1);
lcd.print ("G"); / escreva G
lcd.setCursor (12, 1);
lcd.print ("B"); escreva B
lcd.print (BB); // imprime o valor azul
lcd.setCursor (2, 1);
lcd.print (BR); // imprime o valor de vermelho
lcd.setCursor (8, 1);
lcd.print (BG); // imprime o valor verde
lcd.setCursor (13, 1);
if (digitalRead (KR) == ALTO) {BR + = 15; } // se o botão R for pressionado, o valor de R + 15
if (leitura digital (KG) == ALTA) {BG + = 15; } // se o botão G for pressionado, o valor de G + 15
if (digitalRead (KB) == ALTO) {BB + = 15; } // se o botão B for pressionado, o valor B + 15
if (digitalRead (C) == ALTO) {BR - = 254; } // se o botão C for pressionado, o valor de R -254
if (leitura digital (C) == ALTA) {BG - = 254; } // se o botão C for pressionado, o valor de G -254
if (digitalRead (C) == ALTO) {BB - = 254; } // se o botão C for pressionado, o valor B -254
if (digitalRead (RS) == ALTO) {BR = aleatório (0, 254); } // se o botão RS for pressionado, o valor de R será de 0 a 254
if (digitalRead (RS) == ALTO) {BG = aleatório (0, 254); } // se o botão RS for pressionado, o valor de G será de 0 a 254
if (digitalRead (RS) == ALTO) {BB = aleatório (0, 254); } // se o botão RS for pressionado, o valor de B será de 0 a 254
BR = restrição (BR, 0, 254); // BR = (valor, de, para)
analogWrite (R, BR); // usando a modulação PWM, ajustamos o brilho de 0 a 254
BG = restrição (BG, 0, 254); // BG = (valor, de, para)
analogWrite (G, BG); // usando a modulação PWM, ajustamos o brilho de 0 a 254
BB = restrição (BB, 0, 254); // BB = (valor, de, até)
analogWrite (B, BB); // usando a modulação PWM, ajustamos o brilho de 0 a 254
}