Hola Chicos.
Estoy empezando un proyecto de central de alarma y domotica todo en uno.
Soy novato pero como no tengo prisa, voy aprendiendo y haciendo sobre la marcha.
Para mejor entendimiento, subo una foto:
Mi central recibirá transmisiones en 433 de dispositivos tipo sensor de imán, movimiento, humo, gas que incorporan un transmisor 433 con chip tipo EV1527. Cada TX enviará un numero diferente que recibo con un RX 433 y la librería RCSwitch. Esa parte ya la entiendo. De hecho ya tengo un hard que según que numero reciba enciende un led u otro (de momento solo eso).
Los dispositivos son de este tipo:
La central también transmitirá números a módulos RX433 por ejemplo alojados en la sirena u otros dispositivos.
Posteriormente cuando estas comunicaciones ya funcionen, pasaré a la fase de bluetooth par la comunicación central/App y central/web.
He leído decenas de post y webs que explican algo parecido y voy sacando ideas de todos.
Lo que no acabo de encontrar es la posibilidad de incluir en la central la opción de memorizar en la fase de configuración de la misma, los números a los que tiene que obedecer y albergarlos en un grupo u otro.
Me explico:
Grupo 1: Números provenientes de TX de sensores de imán, de movimiento, de corte laser, de humo, de gas, etc.
Grupo 2: Números recibidos de sensores de temperatura, humedad, dia/noche, de distancia, etc.
Grupo 3: Números recibidos de timbres.
Ya sé que en el código de la central, bastaría como tengo ahora, con que le diga: "Si recibes este, este, este o este, enciende el led del pin 12. Así lo tengo ahora, pero no me sirve, lo que quisiera es tener un botón físico en la central que se llame "Memorizar números de sensores de grupo 1", Pulso el botón, escucho un bip que indica que la memoria está abierta y tengo unos segundos para almacenar números de TX433 en la memoria destinada a ese grupo. Luego hago lo mismo para otro grupo de números pertenecientes a otro tipo de TX.
De esta manera tendré ene l grupo 1, una serie de números que si son recibidos alguno de ellos, la central actuará en consecuencia de la manera que se haya programado para ese grupo.
Recibe un numero del grupo 1: Manda sonar sirena.
Recibe un numero del grupo 2: Manda información de temperatura.
Y así para cada grupo.
La fase que quiero pasar ahora es esa, Memorizar números en grupos, pero con un pulsador que por ejemplo pulsando una vez grupo 1, dos veces grupo 2, etc etc.
Como leo en muchos posts que soléis pedir que publiquemos el código que estamos usando, lo pongo pero no creo que os haga falta, es muy básico.
/////Adaptación del codigo de https://www.youtube.com/watch?v=RUwiEMcYQ9Y&t=1538s y https://www.youtube.com/watch?v=JEZiHQY-JPI&t=434s
#include <LiquidCrystal.h> // importa libreria
#include <RCSwitch.h>
LiquidCrystal lcd(8, 7, 6, 5, 4, 3); // pines RS, E, D3, D2, D1, D0 de modulo 1602A
RCSwitch mySwitch = RCSwitch();
void setup()
{
pinMode(12, OUTPUT); ///Salida para un led, luego hará otras cosas.Pin y gnd
pinMode(13, OUTPUT); ///Salida para un led, luego hará otras cosas. Pin y gnd
pinMode(11, OUTPUT); ///Salida para un led, luego hará otras cosas. Pin y gnd
pinMode(9, OUTPUT); /// Pita cada vez que recibe algún codigo por RF.Buzzer a pin 9 y gnd.
Serial.begin(9600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
lcd.begin(16, 2); // inicializa a display de 16 columnas y 2 lineas
}
void loop() {
if (mySwitch.available()) {
long int value = mySwitch.getReceivedValue();
if (value == 0)
{
Serial.println("Error de Codigo"); //// Esta orden no men funciona, ya buscaré porqué.
}
else
{
Serial.println(value);
Serial.println( mySwitch.getReceivedValue() );
digitalWrite(9, HIGH); //pita dos veces al recibir cualquier codigo.
delay(100);
digitalWrite(9, LOW);
delay(100);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW); // Estas 7 lineas anteriores hacen pitar dos veces sea cual sea el codigo recibido.
lcd.setCursor(0, 0); // ubica cursor en columna 0, linea 0
lcd.print("Codigo Recibido: "); // escribe este texto antes del codigo.
lcd.setCursor(0, 1);
lcd.print(value); // escribe el codigo recibido por RF en pin 2 en pantalla
lcd.display();
///////compara dato recibido
if(value == 1535364) ////Chinito cromado Boton 1. Si recibe este numero, Activa HIGH en Pin 12.
{
digitalWrite(12, HIGH);
Serial.print("CHINITO CROMADO BOT-1 ");
delay(1000);
digitalWrite(12, LOW);
digitalWrite(9, HIGH); //pita 2 veces + 1 larga al recibir el codigo correcto.
delay(500);
digitalWrite(9, LOW);
}
if(value == 1535361) //Chini cromado, boton 2
{
digitalWrite(13, HIGH);
Serial.print("CHINITO CROMADO BOT-2 ");
delay(1000);
digitalWrite(13, LOW);
digitalWrite(9, HIGH); //pita 2 veces + 1 larga al recibir el codigo correcto.
delay(500);
digitalWrite(9, LOW);
}
if(value == 12718318) //Sensor iman
{
digitalWrite(11, HIGH);
Serial.print("SENSOR IMAN 1 ");
delay(1000);
digitalWrite(11, LOW);
digitalWrite(9, HIGH); //pita 2 veces + 1 larga al recibir el codigo correcto.
delay(500);
digitalWrite(9, LOW);
}
mySwitch.resetAvailable();
delay(200); // demora de un segundo
}}}
En la imagen podéis ver dispositivos que incorporan un modulo RX 433. A diferencia de los TX, Estos recibirán ordenes o información de la central.
Todavía me falta mucho, pero voy por partes.
Gracias de antemano.