Central DOMO/ALARMA a 433. Como almacenar códigos SOLUCIONADO

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:

Sensor de humo

TX snsor de movimiento

Sensor de Iman

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.

Hola

He conseguido que se muestren los códigos recibidos en el RX433 en un LCD. Con un poco de código de aquí y de allí y modifincádolo, lo he conseguido.

Edito el post anterior y subo el código actual que no tiene nada que ver con ek anterior tras las mejoras.
Por si a alguien más novato que yo, le sirve.

He modificado y juntado código de dos sketchs por primera vez y el subidón de alegría es inmenso.
De estos enlaces he sacado la base del código que luego he modificado:

Tutorial RX y TX433
LCD

Ojo con las conexiones del LCD, he desplazado los pines para tener libre el 2 que es por donde recibe el RX433. En vez de 2 a 7, he cambiado a 3 a 8, í me queda libre el 2.

La parte de código de los RX y TX en parte es de los ejemplos de la librería RCSwitch.

Agradecería información sobre lo de guardar los códigos recibidos autorizados mediante pulsador.
Gracias

Hola

Buscando, buscando por la red, he encontrado lo que quiero hacer pero solo en un video sin explicaciones.

Video de como lo hace

Visualmente se ve que almacena los códigos RF recibidos por el RX433 en la eeprom de arduino.
Pero no hay código ni esquema.
Alguien sabe donde puedo encontrar un codigo para realizar eso ???

Gracias

Dificil seguirte si no se tienen los emisores y receptores de los que hablas.

Hola
Están en el primer post.

Los vuelvo a poner aquí debajo.

Son transmisores con el chip EV1527. Envían una señal con un numero de 8 dígitos en 433 MHz.
Otros transmisores son hechos según cientos de tutoriales y esquemas de la red…Y con el código de ejemplo de la librería RCSwitch.

Sensor de movimiento 433 MHZ
Otro sensor a 433
Esquemas y explicaciones en la red.

Es todo basado en la librería RCSWitch, super utilizada.

Gracias

No me refería a los enlaces, los enlaces los ví. Tampoco me refería a RCSwitch que también la conozco.

Simplemente digo que no tengo los elementos emisor/receptor que mencionas y entonces como hacer pruebas y guiarte?

Visualmente se ve que almacena los códigos RF recibidos por el RX433 en la eeprom de arduino.
Pero no hay código ni esquema.

Sin embargo no entiendo esto?
Si lees los códigos RF puedes almacenarlos en EEPROM. Cual es el problema? Usa el set de instrucciones disponibles para hacerlo.

Si, ahora ya he avanzado y lo he entendido.
Estoy estudiando como escribir en la eeprom del arduino.
Es lo que hace el del vídeo que yo no sabia.
Supongo que tendré que decirle a arduino que si pulso un pulsador más de 3 segundos, se ponga en modo recibir value y almacenar en las posición eeprom que le indique. (con cierto numero de pulsaciones).

Ya lo tengo, gracias igualmente.

Por favor lee acerca de la EEPROM (tal vez lo hayas hecho pero debo advertirte).

La EEPROM del Arduino no puede debe usarse mas de 100.000 ciclos de escritura lo que significa que si pones algo en un loop y graba permanentemente la EEPROM en poco tiempo te quedas sin esa sección de la misma, lo que no significa que pierdas toda la EEPROM, sino un sector, eso se debe a como se direccionan la memoria.

Entonces, debes verifica que un valor reúna ciertas condiciones para ser almacenado y que dicha condición ocurre una sola vez.

Se comprende?

Gracias
Si, estoy leyendo sobre como escribir en la eeprom. Quizás tenga que optar por otra memoria externa o tarjeta SD.
Al tratarse de grabar números recibidos por RF, he leído que no me sirve write/read, ni float… Estoy centrado en estudiar el char/put/get. Consigo que lo que entra por RF se albergue en una posición de la eeprom, pero aún no consigo leerlos con put.

Son números de entre 3 y 8 digitos.

Pero sigo leyendo y probando, lo conseguiré.

Gracias