Como usuario de Arduino, sospecho que estás lejos en el campo izquierdo. El Arduino es notablemente EN sensible a los transitorios. Y si está preocupado por los transitorios que llegan a través de la fuente de alimentación, podría colocar un supresor de sobretensiones (o un UPS) en la entrada de alimentación. Si realmente estás preocupado por los transitorios que vienen por el aire, simplemente debes proteger al Arduino (tal vez con una bandeja para asar papel de aluminio).
Sin embargo, según mi experiencia, lo más probable es que
ahora sea que ocasionalmente todas las salidas se produzcan al mismo tiempo, y el consumo de corriente total es demasiado alto y, por lo tanto, hace que la tensión regulada caiga. La caída a 4V en lugar de 5V durante unos pocos milisegundos es casi una garantía para colgar el Arduino Uno. Una forma de solucionar esto es mirar detenidamente todas sus salidas y ver si alguna de ellas consume mucha corriente o tiene un retraso inductivo, y reorganiza a los infractores. Otra forma de solucionarlo es agregar un poco de complejidad a su software haciendo una cola de cambios "deseados", y luego realizando solo uno de estos cambios a la vez cada
n th call to loop (). De esa manera nunca tendrás mucho que suceder al mismo tiempo.
Aunque sospecho que tu pregunta es completamente irrelevante para tus bloqueos, aquí está la respuesta: la placa Arduino Uno está dispuesta a hacer lo contrario de lo que hace la mayoría de los chips (incluido el chip Arduino): con Arduino Uno, un ciclo de poder no hará mucho, de hecho dejará el programa intacto. Así es como mueves un Arduino desde tu banco de desarrollo / prueba al lugar donde se desplegará. Un reinicio por otro lado borrará completamente todo y esperará una nueva descarga. Si las cosas se complican lo suficiente como para que el pequeño programa de gestor de arranque Arduino en la placa no funcione bien, entonces el reinicio será manejado solo por el chip, y el comportamiento que vea podría resultar.
Exactamente lo que sucederá después de que tu clase de bloqueo esté mal definido. En lugar de tratar de solucionar el síntoma, arregle la causa para que nunca se ponga en esta situación en primer lugar.
Si tiene mucha mala suerte y no puede averiguar la fuente de los bloqueos, es posible que deba agregar algún código de seguimiento de depuración o algún registro en su programa. Por ejemplo, podría registrar cada entrada en cualquier función. Luego, cuando se cuelga, simplemente vea cuál fue el último mensaje de rastreo, y sabrá que el problema está en alguna parte de esa subrutina (probablemente más especialmente si se produjo una interrupción al mismo tiempo).
(Ah, y si hay más de una fuente de alimentación [incluida una que no es obvia porque es parte de un sensor remoto y la que está dentro de la placa Arduino Uno], asegúrese de conectar todos los puntos negativos / tierra juntos De lo contrario, una fuente de alimentación puede "flotar" y, por ejemplo, proporcionar entradas analógicas que están fuera de rango.)
(También preste atención si el compilador advierte sobre la operación "inestable" porque se usa demasiado espacio de datos. En un Arduino no hay protección contra el desbordamiento de pila. Es posible que tenga suficiente espacio libre para toda la operación normal, pero si hay una interrupción sucede exactamente cuando la ejecución es muy profunda y tiene una pila muy grande, se puede desbordar. Los datos se escribirán en el espacio. Eso no es un gran problema hasta que intenta leerlo y no está allí. Por lo general, la función en la que está De alguna manera, seguiremos corriendo, pero cuando termine y "regrese", la dirección de retorno tampoco se puede leer y por lo tanto será aleatoria, y en esencia su código "irá" a alguna ubicación aleatoria. Esto a menudo resulta en un bloqueo. )