Leo pero no escribo en la tabla Modbus del ESP8266 (SOLUCIONADO)

Actualización:
No hay nada como seguir intentándolo con mas ideas, viendo ejemplos y analizando el código
Me quedan muchas horas de programar y de fallo error :slight_smile:
Os subo el último código, por si sirve de ayuda.
Es un codigo TEST, ahora falta pasar el array al Atmega y viceversa, hasta ahora lo hacia solo con un int.
Si veis que algo se puede optimizar o hacer mejor, serán bien venidas las ideas.

_____________________________________________________-
Hola¡¡

Tengo una placa con ESP8266+Atmega328P y quiero comunicar por Modbus con el ESP8266 y pasar los datos al Atmega. siendo novato que llevo dos semanas igual me he metido demasiado rápido.

Después de probar muchas cosas, otras librerías y proyectos he llegado al punto que desde fuera con un PLC y con el Modus Poll, puedo leer y escribir. Los valores que escribo los puedo enviar al Atmega, pero no consigo modificar desde el programa ESP la tabla Modbus para leerlos desde el Modbuss Poll y el PLC.

Estoy ya un poco bloqueado, a ver que veis que le falta al código, que hago mal...
muchas gracias

Os dejo aquí el código del ESP:

#include <ESP8266WiFi.h>
#include <ModbusIP_ESP8266.h>
#define LEN 20 // Cantidad de registros del Modbus

//Area de memoria para guardar los datos de Modbus 20. 10 de recepción y 10 de envío de señales
int MBHR[40];

//Variable para ver que corre el programa y generar señales
int comm;
int IndexWrite;  

// Parámetros de mi WIFI
const char* ssid = "LowiA6A3";
const char* password = "ORANGEORANGE1234567890";
IPAddress ip(192, 168, 0, 100);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

//ModbusIP object
ModbusIP mb;

// Callback function to read corresponding DI
uint16_t cbRead(TRegister* reg, uint16_t val) {
    MBHR[reg->address.address]= reg->value;
   return val;
}

// Callback function to write-protect DI  
uint16_t cbWrite(TRegister* reg, uint16_t val) {
    MBHR[reg->address.address]= reg->value;
   return val;
}

//Callback function for client connect. Returns true to allow connection.
bool cbConn(IPAddress ip) {
 return true;
}

void setup() {

  pinMode(14, OUTPUT); //Led del ESP para saber que corre el programa y está conectado al WIFI

  //puerto Serie de la placa
  Serial.begin(19200);

  //WIFI CFG y START
  WiFi.mode(WIFI_STA);
  WiFi.config(ip, gateway, subnet);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
  delay(100);
  Serial.print(".");
  }
  
  //WIFI OK   
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  mb.onConnect(cbConn);   // Add callback on connection event
  mb.slave();

 if (!mb.addHreg(0, 0x0000, LEN)); // Add Hregs Creeamos los registros??
   mb.onGetHreg(0, cbRead, LEN); // Add callback on Coils value get
   mb.onSetHreg(0, cbWrite, LEN);
   
   IndexWrite = 10; // Inicializamos el contador para el puntero de copia del Array
   }

void loop() {
   
   mb.task(); 
   comm = comm + 1;
   delay(10);
 
  
if(bitRead(comm,3)) {
 digitalWrite(14, HIGH);   //controlamos que el programa fluye y no se queda en bucles al probarlo
 }else{
 digitalWrite(14, LOW); 
 }

if(bitRead(comm,5)) {
   Serial.print(MBHR[10]);  // imprimimos cada 100 ciclos el valor del registro y del contador
   Serial.println(comm);  // imprimimos cada 100 ciclos el valor del registro y del contador
   comm = 0;
}

 // ********************************************************************************************************************
 // Los 10 registros de salida los creamos aqui luego con el loop y el index los escribimos al MAP del Modbus de Salida
 MBHR[10] = ("RSSI: %d dBm\n", WiFi.RSSI());
 MBHR[11] = MBHR[11]+1;
 MBHR[12] = random(0,12);
 MBHR[13] = random(0,12);
 MBHR[14] = random(0,12);
 MBHR[15] = random(0,12);
 MBHR[16] = random(0,12);
 MBHR[17] = random(0,12);
 MBHR[18] = random(0,12);
 MBHR[19] = random(0,12);
 mb.Hreg(IndexWrite,MBHR[IndexWrite]);

  if (IndexWrite >= 19) {
  IndexWrite = 10;
  }
  IndexWrite = IndexWrite + 1;
  
 // END PROGRAM

}

No se entiende esto:
Creas un hilo y luego le pones SOLUCIONADO, esta editado de modo que puedo suponer que fue luego que editaras el título o tal vez lo pusiste asi desde el vamos.

De todos modos, Cuál es la solución que encontraste?