Buenas amigos, necesito ayuda con millis(), necesito mostrar un mensaje durante 2seg despues de pulsar un botón o poner una entrada en high, estoy haciendo pruebas con este código pero no consigo hacerlo funcionar, alguna sugerencia?
Gracias de antemano
unsigned long tiempo;
bool marchaluz = false;
void setup(){
pinMode(7, INPUT);
pinMode(13, OUTPUT);
}
void loop(){
if (digitalRead(7) == HIGH){
marchaluz= true;
}
else{
marchaluz= false;
}
if (marchaluz == true){
tiempo=millis();
digitalWrite(13, HIGH);
}
if (millis()-tiempo<=5000){
digitalWrite(13, LOW);
tiempo= 0;
}
}
Comparación errada:
if (millis()-tiempo<=5000)
Esto haría que se ejecute siempre y cuando no pasen 5 segundos, no al revés.
if (millis()-tiempo>=5000)
Esto haría que se ejecute cuando pasen 5 segundos.
Muchas gracias, no me había dado cuenta del error
Me parece zapata que no comprende el problema
Eso lo quieres usar para reemplazar delay pero el reemplazo no es directo?
Si tu tienes una secuencia de lcd como en tu caso, y luego un delay de 1000 mseg y lo reemplazas por millis va a ocurrir que presentará la acción del lcd que debía ocurrir 1000 mseg despues.
Entonces no es un reemplazo directo.
Debes accionar de un modo que se llama máquina de estados. Lee en Documentación uno de los primeros hilos que esta referido a la máquina de estados. Hay un excelente explicaición teórica y al final hay un post mío donde muestro como cambiar un programa con delays a otro con millis() como lo que tu necesitas.
Espero que esta respuesta este bien enfocada porque no tiene mucho que ver con este hilo pero si con el que creo deriva de este.
Surbyte he decidido dejar de lado el tema de hacer un menú ya que lo veo bastante complicado, por eso he optado por lo siguiente, si pulso la tecla 1 muestro "texto" durante 2 seg y limpio lcd, si pulso tecla 2 la misma operacion y asi con los botones que utilizo con eso me apaño, pero tengo que utilizar millis mas de una vez
Pero me surge un problema al intentar utilizar varias veces millis, cuando pongo para el primer boton tiempo=millis() me funciona bien pero si pongo para el siguiente boton tiempo1=millis() empiezan a parpadear los textos muy rapido
Mira esto MenuBackEnd.
Acabo de compilar un ejemplo y funciona bien con ultima versión de IDE.
Te lo adjunto para que lo pruebes
MenuBackend_1-5.zip (12.8 KB)
Y no te escribí antes (lo reescribo porque creo que no se entendió).
Si tu tienes una secuencia de lcd luego un delay y otra accion en el lcd y lo reemplazas por millis va a ocurrir que presentará inmediatamente una acción seguida de la otra cuando debió haber dos interrupciones de 1000 mseg.