You are on page 1of 8

/* ----------------------------------------------------------------

SETISAEDU

Codigo para la configuracion MultiCeiver con NRF24L01.

Codigo del PTX3 (Alarma con sensor de proximidad infrarrojo)

--------------------------------------------------------------------

*/

#include <SPI.h> //libreria para el uso del modulo SPI

#include "nRF24L01.h" //Libreria del modulos nRF24L01+

#include "RF24.h"

RF24 radio(9, 10); //Declaracion de los pines de control CE y CSN para el modulo, se define el objeto
"radio"

/* Lista de direcciones de los transmisores

direccion1 = 0x7878787878LL

direccion2 = 0xB3B4B5B6F1LL

direccion3 = 0xB3B4B5B6CDLL (Este nodo)

direccion4 = 0xB3B4B5B6A3LL

direccion5 = 0xB3B4B5B60FLL

direccion6 = 0xB3B4B5B605LL

*/

const uint64_t direccion3 = 0xB3B4B5B6CDLL; // En esta parte LL significa LongLong para asegurar el
dato de 64bits

int Alarm_out =4; //Pin de salida de la alarma

int Alarm_modo =5; //Pin indicador de alarma Armada o Desarmada

bool A_state=0; //Variable de estado logico de la salida del la alarma

bool Alarma=false,modo=true; //Variable de estado de la alarma, variable de modo de actividad

bool armado=1; /*Variable que se usa para discriminar las peticiones de interrupcion

*que se hagan mientras la alarma esta Desarmada

*/
void setup()

pinMode(10, OUTPUT); //Iniciar como salida el pin de control CSN

radio.begin(); //Inicio del modulo nRF24L01+

// radio.setRetries(15, 15); //Configuracion del numero de intentos

radio.setPALevel(RF24_PA_LOW); // Configuracion en modo de baja potencia

radio.setChannel(100); // Apertura del canal de comunicacion

//Apertura de la linea de comunicacion, direccion 2

radio.openReadingPipe(0, direccion3);

radio.startListening(); // iniciamos en modo de escucha

//Configuracion de pines de salida de alarma e indicador

pinMode(Alarm_out, OUTPUT);

pinMode(Alarm_modo, OUTPUT);

digitalWrite(Alarm_out,LOW);

digitalWrite(Alarm_modo,HIGH); // La alarma inicia activa

//Declaracion de interrupciones de el pulsadores y el sensor

pinMode(2, INPUT); //Disparador de la alarmar (Final de carrera, PIR, IR, Luz)

pinMode(3, INPUT); //Boton de apagado de alarma

attachInterrupt(digitalPinToInterrupt(2), Alarma_On, RISING);

attachInterrupt(digitalPinToInterrupt(3), Alarma_Off, RISING);

int x=1;

int pipe=0;

void loop()

if(x==1){
if (radio.available()) // Comprobacion de datos recibidos

char op; //operacion

bool done = false;

while (!done) // Espera hasta recibir algo

radio.read( &op, sizeof(op) );

Serial.println(op);

if (op > 0)done = true;

delay(20);

//Acciones

if (op == 'a') //Apagar alarma, pero siempre esta armada

pipe = 1;

} else if (op == 'b') //Armar la alarma, modo On

pipe=2;

} else if (op == 'o') //Desarmar la alarma,modo Off

pipe=3;

//Rutinas de interrupcion

void Alarma_On() //Alarma disparada


{

if((armado==1) && (Alarma==false)) //Verificacion si se deben obviar o no las peticiones de


interrupcion

radio.stopListening(); //Paramos el modo de escucha para poder escribir

Alarma = true; //Se enciende la funcion de la alarma

char fun = 'C';

radio.openWritingPipe(direccion3); //Se abre el puerto de escritura

radio.write(&fun, 1); //Se envia la notificacion de que la alarma fue activada.

delay(200);

void Alarma_Off() //Boton de apagado de alarma disparado

//Verificacion si se deben obviar o no las peticiones de interrupcion

if((armado==1)&&(Alarma==true)) // y a la vez, s la la alarma esta encendida

radio.stopListening(); //Paramos el modo de escucha para poder escribir

Alarma = false; //Se apaga la funcion de la alarma

digitalWrite(Alarm_out,LOW); //Se pone la salida apagada

char fun = 'F'; //Letra para informar que la alarma se desactivo manualmente

radio.openWritingPipe(direccion3); //Se abre el puerto de escritura

radio.write(&fun, 1); //Se envia la notificacion de que la alarma fue activada.

delay(200);

}
/* ----------------------------------------------------------------

SETISAEDU

Codigo para la configuracion MultiCeiver con NRF24L01.

Codigo del PRX (Receptor Maestro y controlador de las alarmas y operaciones)

--------------------------------------------------------------------

*/

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

RF24 radio(9, 10);

const uint64_t direccion[] = {0x7878787878LL, 0xB3B4B5B6F1LL, 0xB3B4B5B6CDLL,


0xB3B4B5B6A3LL, 0xB3B4B5B60FLL, 0xB3B4B5B605LL };

bool Alarma1 = false, Alarma2 = false, Alarma3 = false;

void setup()

Serial.begin(115200); //Se inicia el puerto serial

Serial.println("multiceiver");

Serial.println();

radio.begin();

radio.setPALevel(RF24_PA_MAX); // Se configura a la maxima potencia

radio.setChannel(100); // Apertura del canal especifico

//Apertura de las lineas de comunicacion con un maximo de 6 direcciones

radio.openReadingPipe(0, direccion[0]);

radio.openReadingPipe(1, direccion[1]);

radio.openReadingPipe(2, direccion[2]);
//para el caso de tenes mas modulos

radio.openReadingPipe(3, direccion[3]);

radio.openReadingPipe(4, direccion[4]);

radio.openReadingPipe(5, direccion[5]);

radio.startListening();

void loop()

byte pipeNum = 0; //Variable para leer que Modulo envio el dato

byte dataRX = 0; //Variable para guardar el dato recibido

while (radio.available(&pipeNum)) { //Verificar si hay datos de los esclavos

radio.read(&dataRX, 1 ); //Se lee un byte, ya que hemos configurado solo en envio de una letra

Serial.print("Recibido del transmisor: ");

Serial.println(pipeNum + 1); // Se imprime el numero del transmisor que envio el dato

if (dataRX == 'A') //Letra correspondiente al transmisor 1

Serial.println("********************************************************************");

Serial.println("Aviso de alarma 1 activada!");

Serial.println("presione A para apagar o realice lo manualmente desde el modulo 1");

Serial.println("********************************************************************");

Alarma1 = true; // Se activa la impresion de la alarma en el monitor serial

//if (Serial.available())

int y=1;
if(y==1)

char data = "a";//Serial.read();

int opc = Serial.parseInt();

bool ok = 0;

if (data == 'a' || data == 'A')

radio.stopListening(); // Paramos la escucha para poder escribir

radio.openWritingPipe(direccion[2]); //Se abre el puerto de escritura para la direccion del


modulo 1

if(opc==0)

Serial.println("********************************************************************");

Serial.print("Desactivando alarma 1");

char fun = 'a';

ok = radio.write(&fun, sizeof(fun)); //Envio de la funcion de desactivacion

if (ok)

Serial.println(", eviado...");

Alarma1 = false;

radio.startListening(); //Se regresa al modo de escucha

} else

Serial.println(", fallo en envio!");

Serial.println("********************************************************************");

}
radio.startListening(); //Se regresa al modo de escucha

delay(200);

You might also like