M
Miembro eliminado 356005
Esta solución es clásica, desde luego, pero no deja de ser un "delay encubierto", es decir: estamos malgastando ciclos de procesamiento en el caso normal en que no haya que hacer nada. Como diría Scooter, malgastamos vatios, convirtiéndolos en calor, sin ninguna utilidad.Mi técnica es hacer una rutina principal corta que llame a subrutinas y luego regrese a esa rutina principal; nunca he visto que se bloquee o falle inesperadamente ... solo cuando hay alguna variación brusca en la alimentación.
Scooter indica que siempre hay que hacer alguna cosa, en esos bucles, pero muchas aplicaciones consisten en esperar que ocurra un evento del exterior. Leer el estado de los botones es una tarea, sí, pero si el resultado es que el usuario no ha pulsado ningún botón, entonces esos ciclos se suman a los perdidos, en el bucle principal.
Por todo ello, los microcontroladores traen una instrucción de SLEEP, que duerme el procesador, dejando los puertos de entrada preparados para recibir alguna interrupción, y en algunos casos, los temporizadores funcionando, provocando una interrupción al final del conteo.
Si tu aplicación puede quedarse dormida, porque todos los posibles eventos pueden asociarse a interrupciones, estamos hablando de que tu batería puede pasar de durar un par de semanas, a durar meses.
En Youtube hay unos cuántos vídeos que muestran las diferencias de consumos y trucos para llevar el consumo al límite (inferior), como por ejemplo estas magníficas 4 partes con muy buenos gráficos, Reducing Arduino's Power Consumption Part 1
Deberíamos volver al tema que nos ocupa: la robustez.