Hola
Llevo varios días atrancado con un problema al cual no le veía solución en mi sistema de alarma vía SMS
el trozo de código condensado es
String ESTADO = "";
String CON_LUZ="";
.
.
.
ESTADO="PRUEBA";
CON_LUZ=ESTADO;
.
.
.
if (CON_LUZ.length() == 0) .....
Como se puede ver, a ESTADO se le asignan datos. Para preservar lo asignado y controlarlo, al String CON_LUZ se le copia ESTADO íntegramente. Pues bien, el if posterior se cumple.
Después de hacer test en otro sketch creado para eso y ver que funcionaba perfectamente, me dispuse a analizar el código (unas 850 lineas) par ver donde y cuando se borraba CON_LUZ. No encontré nada.
En ultima instancia puse unas lineas para comprobar que todo estaba correcto y me llevé la sorpresa
//#define CON_MONITOR
Serial.println("ya hay corriente");
Serial.println(ESTADO);
Serial.println(CON_LUZ);
Serial.println("----------");
Serial.flush();
//#endif
Dando el siguiente resultado:
ya hay corriente
PRUEBA
----------
Como para compilar y que el arduino uno vaya mas ligero, puse defines para eliminar totalmente los Serial.print, hice la prueba dejando simplemente las lineas de arriba y el resultado fue
ya hay corriente
PRUEBA
PRUEBA
----------
Entonces me llevo a pensar en un bug debido a la memoria para variables globales
Estos son los datos de compilación antes (con los Serial incluidos)
El Sketch usa 15048 bytes (46%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 1505 bytes (73%) de la memoria dinámica, dejando 543 bytes para las variables locales. El máximo es 2048 bytes.
y después, donde no hay bug y con los seriales excluidos de la compilación
El Sketch usa 11736 bytes (36%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 804 bytes (39%) de la memoria dinámica, dejando 1244 bytes para las variables locales. El máximo es 2048 bytes.
Quedo a vuestra disposición para hacer las pruebas que se necesiten, pero mi ingles es peor que nulo
Saludos