Tip 1
Contenido
Descripción
Hay varias maneras de detener la ejecución de un boceto Arduino, también depende de lo que espere que sea "detenido". Digo esto porque el Arduino no usa un sistema operativo, su boceto nunca puede salir a ninguna parte, ya que es todo lo que el AVR tiene que trabajar.
A continuacion algunas alternativas para detener el dispositivo.
Sin loop()
Cuando solo se quiere efectuar un calculo por ejemplo y no es necesario tener la repetitividad, deja en blanco loop()
void setup(){ Serial.begin(115200); Serial.println(sq(3)); } void loop(){ //Nada }
Manualmente
Cuando se usa el método Arduino normal para escribir un boceto con setup() y loop(), su programa se ejecutará para siempre, lo que significa que la única vez que se puede detener a Arduino es cuando se elimina la energía. Para poner el Arduino en un estado parado, podemos simplemente usar un bucle infinito para bloquear efectivamente la uC, bueno, casi...
while (true){}
Este no es exactamente el resultado que estamos buscando todavía, ya que el Arduino usa un mecanismo llamado interrupciones para proporcionar una gran cantidad de funcionalidad y detienen el flujo del programa principal para que se ejecute "algo". Entonces, para completar este código para "detener" el uC, podemos agregar la función AVR para deshabilitar las interrupciones globales (o todas).
noInterrups(); while (true){}
Funciones de C
También podemos usar la funcion C cli() o abort() o exit(). Entonces hay tres métodos para detener el Arduino, y cada uno hace lo mismo, sin embargo, cada uno se compila a un tamaño diferente en las pruebas.
Con cualquiera de estos métodos el boceto sigue dando vueltas a toda velocidad y está completamente bloqueado hasta que se apaga la corriente, ya sea físicamente o mediante el uso del botón de reinicio.
Poner a dormir
Con la administración avanzada de la energía se puede usar para poner el dispositivo en modo de suspensión y usar menos energía. Sin embargo, si el dispositivo es recuperable sin un reinicio, el dispositivo se vuelve mucho más amigable para el usuario.
La documentación de AVR para "Administración de energía y modos de suspensión" tiene algunos ejemplos de cómo dormir el uC. Sleeping se puede usar tanto para una pausa controlada como para un bloqueo completo, similar al ciclo infinito explicado anteriormente.
cli(); sleep_enable(); sleep_cpu(); sleep_mode(); sleep_bod_disable()
La funcion sleep_disable() no es necesaria ya que el dispositivo nunca se despertará debido a que las interrupciones se desactivan.