Gestión Domótica mediante Ethernet

Buenas Tardes.
Estoy intentando hacer un servidor web para el manejo de luces y aparatos eléctricos mediante arduino.

Tengo una placa arduino uno rev3 y una ethernet shield.

La cuestión es que cuando intento que arduino procesar mas de 3 tipos de aparatos, es decir cuando intento meter un cuarto elemento (ya sea para controlar otro aparato o para desconectar o encender un sensor), el programa no funciona.

Queria pediros ayuda para intentar resolver este problema
Adjunto dos códigos, uno en el que funciona perfectamente para 3 leds(eth2) y otro que deja de funcionar cuando intento mas de 3(eth).

Gracias de antemenao

eth.ino (11.6 KB)

eth2.ino (6.21 KB)

No he visto los códigos en detalle pero supongo por el eth2 que solo incrementaste lo necesario para poner el 4to led. Entonces si se cuelga es porque te quedaste sin RAM.

Hay un comando que te dice cuanta RAM free te queda.
Intenta optimizar las variables globales al mínimo. Hay mucho uso de ellas en lo poco que vi.

    int freeRam ()
    {
    extern int __heap_start, *__brkval;
    int v;
    return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
    }

ponelo en un Serial.print(freeRam()); y verás cuanto tienes

Probá con el que funciona y luego con el que no.

A mi la compilación de la versión que te da problemas me dice esto, esta claro que superaste la memoria. Busca un arduino con mas memoria.

Sketch uses 18.520 bytes (57%) of program storage space. Maximum is 32.256 bytes.
Global variables use 2.861 bytes (139%) of dynamic memory, leaving -813 bytes for local variables. Maximum is 2.048 bytes.
processing.app.debug.RunnerException: Not enough memory; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing your footprint.
at processing.app.Sketch.size(Sketch.java:1660)
at processing.app.Sketch.build(Sketch.java:1570)
at processing.app.Sketch.build(Sketch.java:1548)
at processing.app.Editor$DefaultRunHandler.run(Editor.java:1915)
at java.lang.Thread.run(Thread.java:619)

Solución posible a gastar unos euros
Con arduino MEGA
Global variables use 2.845 bytes (34%) of dynamic memory, leaving 5.347 bytes for local variables. Maximum is 8.192 bytes.

Puedes cambiar el tipo de dato (de int a byte) para los pin, o inclusive puedes ahorrarte esas variables colocando directamente el numero de pin en las instrucciones pinMode. Al compilarlo veras que la memoria consumida es menor.

Un Saludo y Suerte. :wink: