

~~
Código fonte receptor:
/* Código para recepção de RF 433 MHz (testado com arduino 2560).
* Autor: Lucas Guimarães Gonçalves
* Tabela de variáveis para pinos:
RECEP: Receptor (saída);
LED: LED (saída);
BEEP: Buzzer (saída).
* Como funciona: Um comando é enviado pelo transmissor e o receptor tenta identifica-lo, caso seja o determinado comando ele para de apitar o alarme e acende o led.
*/
// Comando
#define COMANDO "esta_ai?\0"
char txt_cmd[] = COMANDO;
// Define pinos de saída.
#define RECEP 8
#define LED 22
#define BEEP 52
// Tempo em milissegundos para LED acender e BEEP desativar.
#define TEMPO_LED 500
#define TEMPO_BEEP_LIGA 5000
#define TEMPO_BEEP 500
// Ativar serviços do Arduino.
void setup()
{
// Seta pinos para output (saída).
pinMode(RECEP, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(BEEP, OUTPUT);
// Serial 3 (rx 3).
Serial3.begin(4800);
Serial.begin(4800);
}
// Loop principal.
void loop()
{
digitalWrite(RECEP, HIGH);
long _tempo_antes = millis();
long _tempo_agora = _tempo_antes;
long _tempo_led = 0, _tempo_beep = 0;
boolean _ativa_beep = true;
while (_tempo_agora - _tempo_antes <= TEMPO_BEEP_LIGA)
{
if (recebe_sinal(Serial3.read(), COMANDO, pega_tamanho_texto(COMANDO)))
{
digitalWrite(LED, HIGH);
digitalWrite(BEEP, LOW);
_ativa_beep = false;
_tempo_beep = _tempo_agora;
_tempo_led = _tempo_agora;
_tempo_antes = millis();
}
if ((_tempo_led - _tempo_agora) <= -TEMPO_LED)
digitalWrite(LED, LOW);
if (_ativa_beep == true && ((_tempo_agora - _tempo_beep) % TEMPO_BEEP <= 50 && (_tempo_beep - _tempo_agora) % TEMPO_BEEP >= -50))
digitalWrite(BEEP, HIGH);
else
digitalWrite(BEEP, LOW);
_tempo_agora = millis();
}
}
/* Função de montagem do vetor comando para cada bit do sinal recebido e compara ele com comando.
Retorno:
true: Comando recebido;
false: Comando não recebido.
*/
boolean recebe_sinal(char caractere, char *comando, int tamanho)
{
for (int i = 0; i < (tamanho-1); i++)
txt_cmd[i] = txt_cmd[i+1];
txt_cmd[tamanho-1] = caractere;
Serial.print(txt_cmd);
if (comparar(comando, txt_cmd, tamanho))
// Serial.print(txt_cmd); // Mostra texto recebido.
return true;
else
return false;
}
/* Função compara textos.
Retorno true: Texto idêntico.
*/
boolean comparar(char *texto1, char *texto2, int tamanho)
{
for (int i = 0; i < tamanho; i++)
if (texto1[i] != texto2[i])
return false;
return true;
}
// Função que retorna tamanho do texto.
int pega_tamanho_texto(char *texto)
{
int tamanho = 0;
while(texto[tamanho++] != '\0')
continue;
return tamanho-1;
}
Código fonte transmissor:
/*
* Código para transmissão de RF 433 MHz (testado com arduino 1280).
* Autor: Lucas Guimarães Gonçalves
* Tabela de variáveis para pinos:
TRANS: Receptor (saída).
*/
// Define pinos de saída.
#define TRANS 8
// Ativar serviços do Arduino.
void setup()
{
pinMode(TRANS, OUTPUT);
// Serial 3 (tx 3)
Serial3.begin(4800);
}
// Loop principal.
void loop()
{
digitalWrite(TRANS, HIGH);
while(1)
{
Serial3.print("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
Serial3.print("esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?esta_ai?");
delay(500);
}
}


