No, el uso de millis()
y de unsigened long intanteanterior;
no es una máquina de estados. Deberías de documentarte un poco, o al menos leer los enlaces que puse en #13.
Por otro lado, al menos yo, no te puedo ayudar si no tengo claro qué es lo que tratas de hacer. En más de una ocasión he visto en este foro pidiendo ayuda para «poner» o «arreglar» un for
, while
, switch
o cualquier cosa que se les ocurra. Cuando leo ese título ya intuyo que quien lo ha escrito se encuentra perdidísimo. Los problemas en programación no se suelen solucionar planteando «poner» una de esas cosas que he comentado. Es como si un médico pide ayuda a otro médico para que le diga cuál es la forma de administrar un antibiótico en vena a un paciente porque ya se lo ha dado por vía oral y no mejora. ¿No estará pasando que lo que padece el paciente no se cura con antibióticos? Un buen médico, ante la petición de ayuda de otro colega, lo primero que creo que haría sería preguntar por el paciente. Por su historial, los síntomas y tratamientos aplicados. Y con toda esa información estará en mejores condiciones para ayudar a su colega. Porque podría llegar a la misma conclusión y ayudar a pinchar al paciente o tal vez propondría otra prescripción para el caso.
Todo esto es para decirte que sería aconsejable que pusieras todo el código que has hecho hasta ahora, así como una detallada descripción de todo lo que tratas de hacer. Para ver si con ello logramos entender qué es lo que quieres y por dónde vas. Porque me temo que no tienes un problema puntual, sino un problema global. Un problema de planteamiento inicial, al no conocer cosas como las «famosas» máquinas de estados. Para empezar, te recomiendo que te leas Qué es y cómo funciona una máquina de estados ya que esto te puede dar una idea de en qué consite. Una vez tengas más o menos claro qué es la máquina de estados, el siguiente paso es tratar de identificar y enumerar los diferentes estados que ha de tener tu máquina, así como qué es lo que puede hacer que cambie de un estado a otro. El uso de los millis()
no es más que una herramienta para poder usar el tiempo como una de las posibles cosas que hace que la máquina de estados cambie de estado.
Como ya he comentado, cuanto más claro y detallado expongas lo que quieres hacer, más fácil nos será ayudarte. Porque en este caso creo que no se trata de un problema puntual en tu código, sino de un problema de planteamiento inicial de todo el código.
Tus explicaciones de lo que tratas de hacer, no me dejan nada claro lo que pretendes.
Lo que creo haber entendido de cómo ha de funcionar es:
-
Al encenderse el arduino se enciende una resistencia de calentamiento y un ventilador. El ventilador ha de permanecer encendido hasta el final del secado, momento en que se ha de apagar.
-
En todo momento se toma la temperatura cada cierto tiempo (¿cada dos segundo y medio? No tengo claro cuánto) y se ha de mostrar en el LCD.
-
Paso 1: como la resistencia está encendida, sube la temperatura y se espera a que alcance los 39 grados. En el momento en que se alcanza, se apaga la resistencia.
-
Paso 2: como la resistencia está apagada, baja la temperatura y se espera a que alcance los 36 grados. En el momento en que se alcanza esa temperatura, se vuelve a encender la resistencia.
-
Se repite el paso 1 y paso 2 un número determinado de veces. (Que está por ver cómo se determina ese número de veces).
-
Después de haber realizado el paso 2 las veces que se indiquen, en lugar de pasar al paso 1 se pasa al paso 3
-
Paso 3: como la resistencia está encendida, se espera a que la temperatura llegue a 40 o 42 grados dependiendo de la posición de un interruptor conectado al pin 10.
-
Una vez alcanzada la temperatura del paso 3 se apaga la resistencia y se pasa al paso 4.
-
En el paso 4 se espera a que la temperatura sea inferior a 29 grados. Cuando la temperatura sea inferior a 29 grados se apaga el ventilador. Y se da por terminado el proceso.
¿Es este el comportamiento que se desea?
Nota: la enumeración de los pasos es orientativa y sólo para que nos entendamos.
¿Qué es eso de crear un vacío en el envase?
Lo dicho, si nos dejas bien claro qué es lo que quieres que haga el Arduino, te podremos ayudar mejor.