El desarrollo del proyecto Arduino Mega Server está en pleno apogeo y en el proceso de trabajo hay obstáculos inesperados que deben superarse heroicamente. Hoy les contaré algunos de ellos, y quizás esto les ahorrará un poco de tiempo y nervios.El primer chiste: ¡y la anciana es una chapucera o ve la raíz!
Me estoy preparando para lanzar la versión 0.14 del sistema para Arduino Due y adaptaré esta versión para que funcione con Power Monitor. Para aquellos que no lo saben, Power Monitor es un sistema de software y hardware para monitorear la fuente de alimentación, que le permite controlar el nivel de voltaje de la red y el consumo de energía en 14 canales y tiene control incorporado de la frecuencia de la corriente de la red e incluso un osciloscopio de red, que muestra el formulario directamente en la página web corriente y voltaje en tiempo real.
Ensamblé el circuito, verifiqué todo, lo ejecuté, no funciona. Bueno, sucede, es habitual. Comienzo a verificar el código: todo está en orden, comprobando el hardware, todo está bien, comprobando las conexiones, todo también está en orden. En un pensamiento profundo, me siento en una silla y empiezo a pensar en dónde podría haber un error. Después de mucho pensar, llego a la conclusión de que todo se hace correctamente. ¿Por qué no funciona? No hay milagros, así que reviso todo por segunda vez.
Código, hardware, conexiones. Todo parece ser correcto. Pienso mucho de nuevo. Palearé el código nuevamente, con adicción: el resultado es cero. Como todos los métodos ambulatorios se han agotado, transfiero al paciente al departamento de cirugía y saco un probador y un soldador. El paciente me mira con cautela, pero se queda sin palabras y no puede decirme nada. ¡Después de algunas manipulaciones, resulta que el Power Monitor no está alimentado en absoluto! ¿Cómo es eso? Los conductores de la fuente de alimentación son claramente visibles, ¡pero no hay energía!Y luego me doy cuenta de que, resulta que hay tablas de creación de prototipos
como las que solía encontrar y a las que estaba acostumbrado y las consideraba las únicas posibles, pero las hay (encuentre diez diferencias, como dicen)
y esta es exactamente la tabla que encontré esta vez. Parece un poco y se da por sentado solo cuando ya lo sabes, y cuando no lo sabes, puedes romperte la cabeza hasta que descubras por qué tu dispositivo no funciona.Todavía hay un momento psicológico: si considera que el neumático está intacto, entonces no presta atención al pase en el marcado (nunca se sabe lo que el fabricante quería dibujar). Este tipo de bromas a veces suceden en el desarrollo: ¡mira, como dicen, a la raíz!Segundo gracioso: hola de nuestro querido equipo arduino.cc
Como dije, el desarrollo está en su apogeo y AMS ya se ha convertido en un proyecto bastante voluminoso y, por supuesto, es imposible hacerlo sin directivas de compilación condicional muy útiles en el proyecto. Esta es una poderosa herramienta de administración de código, especialmente porque el Arduino Mega Server tiene una estructura modular y las directivas de compilación condicional habilitan y deshabilitan varios módulos del sistema.#define
#ifdef
#endif
Esto se hace para que pueda deshabilitar los módulos que no necesita y guardar una valiosa memoria del microcontrolador. Y no me he reunido en mi práctica (en diferentes lenguajes de programación) por lo que las directivas de compilación condicional no funcionan o son "defectuosas". ¡Esto no tiene sentido! Hasta hace poco, pensaba que era imposible, pero los desarrolladores (divertidos) del entorno de programación Arduino no nos dejan aburrirnos, pero lo primero es lo primero.Por lo tanto, estamos tratando de desactivar el módulo que no necesitamos, en este caso, el módulo para trabajar con MajorDoMo (y hasta ahora esto ha funcionado como se esperaba).
En teoría, todo entre directivas.#ifdef MAJORDOMO_FEATURE
...
#endif
debe estar apagado desde la compilación. Pero ahí estaba!
#ifdef MAJORDOMO_FEATURE
char majorMegaObject[] = "ncMega01";
char majorCommObject[] = "comm_mega01";
byte MAJOR_IP[] = {192, 168, 2, 8};
int MAJOR_PORT = 80;
EthernetClient mclient;
void majordomoInit() {
initStart("MajorDoMo");
timeStamp();
Serial.print("Connect to MajorDoMo... ");
if (mclient.connect(MAJOR_IP, MAJOR_PORT)) {
Serial.println("OK");
mclient.println();
} else {
Serial.println("failed");
}
delay(200);
mclient.stop();
modulMajor = MODUL_ENABLE;
initDone();
}
…
Como puede ver, la compilación condicional no solo no funciona (es malo, pero aún no se ha ido a ningún lado), sino que funciona "como Dios lo pone en su alma", es decir, donde quiere, compila, donde no quiere, ¡no compila! Y esto es muy malo, porque tales "fallas" impredecibles son muy difíciles de atrapar y pueden llevar a consecuencias completamente impredecibles.Por cierto, este artículo trata sobre Arduino IDE versión 1.6.5. Pero, al parecer, la versión del entorno de desarrollo realmente no importa, todos son bastante defectuosos. Lo que aprendí recientemente, hasta que compilé pequeños bocetos y pequeños proyectos, todo estaba en orden.El tercer chiste: de nuevo, nuestro querido arduino.cc y un error completamente fantástico
No describiré aquí durante mucho tiempo, en mi opinión, un error fuera de lo común en el compilador del entorno Arduino, pero inmediatamente le daré el código para que usted mismo pueda apreciar este milagro.Declarar una variable:long errorsHttpSend = 0;
En el bucle imprimimos:Serial.println(errorsHttpSend);
Resultado:808333615
Renombrar agregando 2:long errorsHttpSend2 = 0;
En el bucle imprimimos:Serial.println(errorsHttpSend2);
Resultado:0
Surge la pregunta: ¿cómo se puede llevar a cabo el desarrollo en un sistema de este tipo? Aquí también puede mencionar el trabajo completamente inadecuado de varias versiones del IDE de Arduino. El código que funciona muy bien en una versión del entorno se niega a compilar en otra. Un entorno compila el proyecto, otro "no ve" una de las bibliotecas. Después de reinstalar el entorno de desarrollo, la misma versión 1.6.5 (que se compiló antes de reinstalar) deja de compilar el proyecto.Por lo tanto, tenga en cuenta con lo que tiene que lidiar cuando trabaja con Arduino. Solo hay un punto positivo: con tal sistema, sin saberlo, se convertirá en un gurú de la programación y un maestro de la administración del sistema.Permíteme expresar mi deseo de Año Nuevo al equipo de desarrollo de Arduino: ¡eres nuestro querido! ¡Le deseamos un feliz año nuevo y deseamos que lance un entorno de desarrollo que funcione normalmente en el año nuevo!Feliz año nuevo
Amigos! ¡Te felicito por el próximo 2016 y espero que la información de este artículo te ayude a ahorrar tiempo y nervios en el nuevo año! Y desarrollo exitoso!PD:A pesar de todas las maquinaciones de los enemigos, en el futuro cercano se lanzará una nueva versión de Arduino Mega Server a 0.14 para Arduino Mega y Arduino Due con muchas características nuevas.Suplemento . Un canal de Youtube está abierto y aquí hay un video promocional del Arduino Mega Server, que muestra cómo trabajar con un sistema real.