EMISSOR DE SERIAL E RECEPTOR RF



//***** TRANSMISSOR DE SERIAL VIA RF E RECEPTOR RF INTEGRADOS ***************

/* Este programa foi escrito para controlar por meio de um mesmo arduino,
 *  um emissor RF e um transmissor RF. Mas o objetivo deste programa é
 *  estabelecer comunicação entre dois arduinos, que por sua vez podem
 *  transmitir de um para o outro as informações que recebem do computador
 *  por meio da comunicação serial. Para isso, basta fazer a montagem do
 *  circuito exatamente igual nos dois arduinos. Um modelo da
 *  montagem deste circuito pode ser encontrado em:
 *  www.oficinadeideiasrg.blogspot.com.br
 *  a biblioteca rc-switch está em:
 *  http://www.mediafire.com/file/fl66qblf717n0n9/rc_switch-2.6.2.zip
 */


#include <RCSwitch.h> // inclui a biblioteca que opera o emissor e o receptor

RCSwitch Transmissor = RCSwitch(); // instancia um objeto para o transmissor
RCSwitch Receptor = RCSwitch();    // instancia um objeto para o receptor

int dadoEnv = 4321;     // dado que será enviado pelo transmossor
int dadoRec = 3;     // dado que será recebido pelo receptor
int DadoRecebido;    // variável de verificação
int espera = 50;     // variável para ajustar tempo de delay
int enviado;         // variável de verificação
char EntradaSerial[0]; // array que receberá oque entrar como istring na porta serial
int NcaracEnv = 5;         // número de caracteres que a string gerará ao ser convertida em inteiro
int Numero;                // recebe o valor da string convertido em inteiro. pode conter de 1 até 32766
boolean EstadoBotao;       // variável de controle do estado do botão ( boolean: só pode assumir 0 ou 1)
boolean EstadoLed;         // variável de controle do estado do led  ( boolean: só pode assumir 0 ou 1)

void setup() {
  Serial.begin(9600); // estabelece uma comunicação serial entre arduino e pc

  Transmissor.enableTransmit(3); // define pino 3 como pino de dados do transmissor
  Receptor.enableReceive(0);     // define pino 2 (vai entender...) como pino de dados do receptor

  pinMode(8, INPUT);  // define pino 8 como entrada do sinal do interruptor
  pinMode(13, OUTPUT); // define pino 13 como controle do led

}

void loop() {

  if (Serial.available()) {
    for (int i = 0; i < NcaracEnv; i++) {
      EntradaSerial[i] = Serial.read();  //Armazena na string (array de char)
    }
    Numero = atoi(EntradaSerial);
    Transmissor.send(Numero, 24); // envia o valor lido na porta serial. 24 é a codificação da biblioteca para números inteiros
  }

  EstadoBotao = digitalRead(8);    // faz a leitura do sinal que está chegando no pino 8 e carrega este valor em "EstadoBotao"
  if ( EstadoBotao == 1) {         // se EstadoBotao for igual a 1
    Transmissor.send(dadoEnv, 24); // envia o valor da variável "DadoEnviado. 24 é a codificação da biblioteca para números inteiros
    delay(espera);                 // para o programa pelo tempo em milissegundos contido na variável "espera"
    enviado = dadoEnv;             // carrega o valor de "dadoEnv" em "enviado"

  }
  if ( EstadoBotao == 0) {         // se EstadoBotao for igual a zero
    //Transmissor.send(0,24);      // 24 codificação da biblioteca para inteiros;
    delay(espera);                 // para o programa pelo tempo em milissegundos contido na variável "espera"
    enviado = 0;                   // carrega 0 em "enviado"
  }

  if (Receptor.available()) {                      // se o receptor estiver recebendo alguma informação
    DadoRecebido = Receptor.getReceivedValue();    // o dado recebido pelo receptor é carregado em "Dado Recebido
    digitalWrite(13, HIGH);                        // liga o led que está conectado ao pino 13
    delay(500);                                    // para o programa por meio segundo
    digitalWrite(13, LOW);                         // desliga o led

    //Serial.print("EstadoBotao: ");                  // imprime no monitor serial o texto "EstadoBotao: "
    //Serial.print(EstadoBotao);                      // imprime no monitor serial o valor contido em "EstadoBotao"

    Serial.print(" Transmitido: ");                 // imprime no monitor serial o texto "Transmissor: "
    Serial.print(enviado);                          // imprime no monitor serial o valor contido em "enviado"
    Serial.print(" Recebido: ");                    // imprime no monitor serial o texto "Receptor: "
    Serial.println(DadoRecebido);                   // imprime no monitor serial o valor contido em "DadoRecebido"

    DadoRecebido = 0;                              // carrega 0 em "DadoRecebido
  }

  Receptor.resetAvailable();                      // reseta a variável "Receptor"

}

Nenhum comentário:

Postar um comentário