La modularidad es tu amiga. Escriba su bucle principal para hacer lo suyo llamando a funciones, que llaman funciones, ..., hasta el nivel en el que sus funciones serían simples. Comience con el bucle principal y el siguiente nivel hacia abajo, realice funciones de código auxiliar; ya sea vacío:
function foo(){
;
}
o falso:
function read_temperature(){
return(95);
}
, que no hacen nada más que devolver lo que el nivel de llamada necesita para que pueda continuar. Cuando ese nivel funcione, baje un nivel y comience a completar el código simple que también llama a las funciones de código auxiliar. Gradualmente, anule la función de una función a la vez hasta que tenga una aplicación que funcione.
Para depurar una función que devuelve un valor incorrecto, o para crear una sin ninguna influencia del resto de su aplicación, puede construir un andamiaje, un boceto simple que solo alimenta a la función algunos valores de ejemplo y, dentro de la función, imprime valores de parámetros y algunos valores intermedios, hasta que obtenga una idea de qué parte de la función está fallando. Incluso he creado funciones falsas que me solicitan en el terminal que devuelva un valor. (¡Obviamente, esta técnica solo puede funcionar si el sistema puede tolerar la velocidad relativamente glacial de los humanos! Otro uso para andamios).
Stubbing funciona especialmente bien para sustituir las funciones que interactúan con el hardware, lo que le permite comenzar a abrir la aplicación antes de tener que sumergirse en hojas de datos, problemas de tiempo y otras minucias (como no tener las piezas) que de otro modo podrían detenerse su progreso.
Hablando de problemas de temporización, alternar un pin de salida en un punto particular de su programa, como la entrada y salida de un ISR, le da una onda cuadrada en el pin Arduino cuya frecuencia o ciclo de trabajo puede darle una idea del tiempo interno de tu programa. La forma directa de E / S de puerto, por ejemplo,
PORTC ^= 0x01;
, distorsionará el tiempo menos que llamar digitalWrite()
. Útil si tiene un 'alcance útil, o uno de los DMM con la capacidad de medir la frecuencia y / o el ciclo de trabajo.
Del mismo modo, puede usar un pin de salida analógica para emitir un valor numérico a su medidor desde el interior del programa sin alterar demasiado el tiempo o inflar el código con las funciones de E / S en serie. Utilice los formularios de E / S directa aquí también.