Hola, tengo un arduino uno y estoy intentando hacer un timer que cuando la señal sea HIGH directamente no me active la salida, que espere 5 seg, si la salida es HIGH durante 5 seg quede activa.
El problema es que no puedo hacer que quede activo la salida.
//librerias primarias
#include <TVout.h>
#include <video_gen.h>
#include <fontALL.h>
#include <font4x6.h>
#include <font6x8.h>
#include <font8x8.h>
#include <font8x8ext.h>
#include <math.h>
#include <RBD_Timer.h>
//designar variables
TVout TV;
RBD::Timer timer;
/*int zOff = 150;
int xOff = 0;
int yOff = 0;
int cSize = 50;
int view_plane = 64;
float angle = PI/60;*/
//variables Temperatura
const int pinTemp = A0;
const int B = 1000; // B valor del termistor
const int R0 = 5000; // R0 = 100k el mio es de 5k
float temp, temp_med = 0; // Temperatura en ºC
float acum = 0, Vout; // variables secundarias
float res = 0.010; // en V/ºC
int i, num_muestras = 100;
//variables de cambio a entero
int o;
float t;
//variable aceite
const int aceite = 8;
//variable pulsador iniciar motor
const int pulsadorIniciarMotor = 5;
//variable reset alarmas
const int resetAlarmas = 4;
//variable parada motor
const int paradaMotor = 6;
//variable servo
const int servo = 10;
//variable arranque motor
const int arranqueMotor =11;
//variable buzzer
const int buzzer = 13;
//variable boton aceite
int estado;
//variable tiempo millis
long TiempoInicial1;
long tiempofuncion1 = 5000;
//comienza y no se repite
void setup() {
TiempoInicial1=millis();
//Tiempo Reset
timer.setTimeout(1000); //setea el tiempo de reset de variables
timer.restart();
//pantalla de inicio
TV.begin(PAL,120,96); //declarar tipo de video
TV.select_font(font8x8); //seleccionar fuente y tamaño
TV.print(0,10,"Equipo Vigia\npuesta marcha motor");
TV.select_font(font8x8);
TV.print(0,50, "T.N.A");
TV.print(0,80,"Power by\nService Naval\nArgentina");
TV.delay(5000); // delay cuenta el tiempo de cuanto esta en pantalla
TV.clear_screen(); // pone la pantalla en negro
//Entrada pin analogica
pinMode(pinTemp, INPUT);
//Entrada y Salida pin digital
pinMode(8, INPUT);
pinMode(6, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(13, OUTPUT);
}
// repite los procesos
void loop() {
//pantalla de variables
TV.select_font(font4x6);
TV.print(0,0, "velocidad motor:");
TV.print(0,15,"temperatura agua:");
TV.print(0,30,"temperatura corte agua:");
TV.print(0,45,"nivel de agua:");
TV.print(0,60,"presion corte aceite:");
TV.print(0,75,"maxima velocidad motor:");
//incio del calculo de la temperatura
acum = 0;
temp_med = 0;
//Calculamos primero para el Lm35C
for (i = 0; i < num_muestras; i++) {
Vout = analogRead(pinTemp) * 0.00488758553275; // step * V/step = V
temp = Vout / res; // V/(V/ºC) = ºC
acum += temp;
temp_med = acum / num_muestras;
delay(10); // Al tener 10 milisegundos y tener 100 muestras tardara 1 segundo en hacer el bucle.
} //Fin Calculo de temperatura
//comvertir decimal a entero
t = temp_med;
o = (int) t; // ahora i es 3
//Refrescar pantalla
if(timer.onRestart()){
TV.clear_screen();}
//mostrar calculos en tv
TV.print(69,15,o); /*muestra de C°en tv*/ TV.print(82,15,"C"); //muestra de C° en tv*/
//Alarma aceite
estado = digitalRead(aceite); // Comprobamos el estado
if(estado == HIGH){ //Comprobar el pulsador
digitalWrite(aceite,LOW);
TV.print(90, 60,"normal");}
else{
if (millis() >= (TiempoInicial1+tiempofuncion1)){
digitalWrite(aceite,HIGH);
TV.print(90, 60,"ALARMA");
TiempoInicial1=millis();
}
}
//alarma Agua
if(o <= 110)
TV.print(90,15,"normal");
else
TV.print(90,15,"falla");
}
utilizo estas variables para el comando millis()
long TiempoInicial1;
long tiempofuncion1 = 5000;
y este es el codigo al cual quiero poner el timer:
//Alarma aceite
estado = digitalRead(aceite); // Comprobamos el estado
if(estado == HIGH){ //Comprobar el pulsador
digitalWrite(aceite,LOW);
TV.print(90, 60,"normal");}
else{
if (millis() >= (TiempoInicial1+tiempofuncion1)){
digitalWrite(aceite,HIGH);
TV.print(90, 60,"ALARMA");
TiempoInicial1=millis();
}
}
Recien hoy aprendi el comando millis pero nose como hacer para que haga lo que yo quiero.