Estou tentando usar o Módulo RF + Ultrassônico para acender um LED. Sou meio novo, e estou começando um projetinho. A princípio, irei colocar outras funções no lugar do LED.. mas enfim.
Na teoria, quando a distância do objeto do ultrassônico for menor que 10cm, ele vai armazenar essa informação, mandar ao receptor, e o receptor irá acender um LED. Mas por algum motivo isso não funciona. Alguém poderia me ajudar? O transmissor até envia, mas o receptor não recebe.
Fiz esse código para o transmissor:
#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h
const int trigPin = 12;
const int echoPin = 13;
char *dado ; //Cria a variável que ira armazenar a informação pré definida
int distancia;
void setup()
{
Serial.begin(9600); // inicializa a comunicação serial para Debug ou para mostrar dados em um display LCD
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(8, OUTPUT);
//Configura o Arduino para trabalhar como transmissor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(8);//Configura o pino 8 como tx
//===================================================
}
void loop(){
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duracao = pulseIn(echoPin, HIGH);
distancia = duracao / 58;
Serial.print("Distancia em CM: ");
Serial.println(distancia);
delay(1000);
}
if (distancia <=10){
dado = "A"; //Armazena o dado pré determinado
vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado
vw_wait_tx(); //Aguarda o fim de transmissão
delay(100); //Aguarda um tempo para a próxima leitura
Serial.println(dado);//Para garantir que os seus botões estão funcionando, você pode verificar no monitor serial
}
else{
dado = "B"; //Armazena o dado pré determinado
vw_send((uint8_t *)dado, strlen(dado)); //Envia a variável dado
vw_wait_tx(); //Aguarda o fim de transmissão
delay(100); //Aguarda um tempo para a próxima leitura
Serial.println(dado);//Para garantir que os seus botões estão funcionando, você pode verificar no monitor serial
}
}
E esse para o receptor:
#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h
void setup()
{
int i;
//Configura o Arduino para trabalhar como receptor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(13);//Configura o pino 13 como rx
vw_rx_start();
//=================================================
pinMode(13, INPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop()
{
char cod;//Cria uma variavel para armazenar o dado recebido.
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Recebe os dados e armazena na variável buf
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Armazena na variável buflen o tamanho do dado recebido
if (vw_get_message(buf, &buflen)) //Pega a mensagem que foi recebida
{
cod = buf[0]; //Converte a variável em Char
Serial.println(cod); //Para verificar valores recebidos e corrigir possiveis erros
if (cod == 'A') // Compara a informação recebida
{
digitalWrite(12, HIGH);
delay(1000);
digitalWrite(12, LOW);
delay(1000);
}
else{
if (cod == 'B')
digitalWrite(12, LOW);
delay(1000);
}
}
}