Boa noite,
Baixei este código porém ele não está funcionando direito.
Ele usa um sensor ultrasônico HC-SR04, mas quando ligo os LEDs ligam e o sensor não funciona.
A minha intenção é de fazer um abjur RGB para colocar no quarto da minha filha, ela fica me cobrando e eu fico dando desculpas para ela porque eu não entendo nada sobre arduino.
Tem um fórum em outro site que está parado sobre este mesmo problema.
Este é o código
#include <Ultrasonic.h> //Carrega a biblioteca do sensor ultrassonico
#define pino_trigger 4 //Define os pinos para o trigger
#define pino_echo 5 //Define os pinos para o echo
#define ledRed 11 //led vermelho
#define ledGreen 10 //led verde
#define ledBlue 9 //led azul
float RGB1[3]; //vetor RGB1
float RGB2[3]; //vetor RGB2
float INC[3]; //vetor de incremento
int red, green, blue; //armazena o respectivo valor RGB
unsigned long tempoON = 0; // Tempo ligado
unsigned long tempoOFF = 600000; // Tempo desligado
bool flag = false; // Controle de liberacao
Ultrasonic ultrasonic(pino_trigger, pino_echo); //Inicializa o sensor nos pinos definidos acima
//------------------------------------------------
void setup()
{
Serial.begin(115200);
randomSeed(analogRead(0)); //gera números aleatórios a partir da semente lida em A0 (ruído analógico)
RGB1[0] = 0; //Valores RGB iniciam em zero
RGB1[1] = 0;
RGB1[2] = 0;
RGB2[0] = random(256); //Valores RGB aleatórios entre 0 e 255 (transição de cor que o abajur fará)
RGB2[1] = random(256);
RGB2[2] = random(256);
}
//------------------------------------------------
void loop()
{
float cmMsec; // Resultado de medida
long microsec = ultrasonic.timing(); // Variavel de calculo
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); // Le sensor ultrasson em cm
Serial.print("Distancia em cm: "); // Imprimi
Serial.println(cmMsec); // Imprimi
if (millis() - tempoOFF > 600000) // Se passaram 10 minutos (10 x 60 x 1000)
{
Serial.println("Libera para comparar distancias: "); //Debug
flag = true; // Libera para acender
}
if (flag == true) // Se acender esta liberado
{
if (cmMsec < 100) // Se a distancia e menor que 100 cm
{
Serial.println("Libera para carga de tirmers: "); //Debug
tempoON = millis(); // Recarrega tempo ligado
tempoOFF = millis(); // Recarrega tempo desligado
}
if (millis() - tempoON < 120000) // Se ainda nao passaram 2 minutos (2 x 60 x 1000)
{
Serial.println("Acende: "); //Debug
acende(); // Acende LEDS
}
}
if (millis() - tempoON > 120000) // Se ainda nao passaram 2 minutos (2 x 60 x 1000)
{
Serial.println("Apaga: "); //Debug
RGB1[0] = 0; // Apaga LEDS Valores RGB iniciam em zero
RGB1[1] = 0;
RGB1[2] = 0;
analogWrite(ledRed, 0); // Apaga LEDS
analogWrite(ledGreen, 0);
analogWrite(ledBlue, 0);
flag = false;
}
}
//------------------------------------------------
void acende() // Rotina para controlar os LEDs
{
randomSeed(analogRead(0)); //obtém um valor aleatório
for (int x = 0; x < 3; x++) //Consulta os valores RGB do início ao fim, e avalia o incremento a ser feito
{
INC = (RGB1 - RGB2) / 256;
}
for (int x = 0; x < 256; x++)
{
red = int(RGB1[0]); //obtém os valores de vermelho, verde e azul
green = int(RGB1[1]);
blue = int(RGB1[2]);
analogWrite(ledRed, red); //gera o PWM no respectivo pino
analogWrite(ledGreen, green);
analogWrite(ledBlue, blue);
delay(10); //tempo entre as transições
RGB1[0] -= INC[0]; //subtrai o valor do incremento
RGB1[1] -= INC[1];
RGB1[2] -= INC[2];
}
for (int x = 0; x < 3; x++) // gera novos valores aleatórios para a próxima transição
{
RGB2 = random(556) - 300; // força a ocorrência das cores primárias
RGB2 = constrain(RGB2, 0, 255); //mantém RGB2 na faixa entre 0 e 255
delay(1000);
}
}
/*
TABELA DE COMBINAÇÃO DE CORES
Vermelho Verde Azul | Cor Resultante
-------------------------------------------
255 0 0 | Vermelho
0 255 0 | Verde
0 0 255 | Azul
255 255 0 | Amarelo
0 255 255 | Ciano
255 0 255 | Magenta
255 255 255 | Branco
*/