Un gran saludo a esta enorme familia tecnológica que desconocía su existencia hace sólo unos meses.
Es la primera vez que entro al Foro y espero no molestar ni resultar pesado. Aunque hace mas de 40 años que fui un pionero en programación (BASIC) llevo muchísimos años sin tocarla (Ahora tengo 73)...
En mi casa tengo un sistema de domótica que se me ha averiado y es muy obsoleto y no encuentro repuestos, por lo que he decidido tratar de hacerlo funcionar, al menos, en parte.
Buscando sistemas encontré esta maravilla de software libre de ARDUINO y traté de empezar por los cimientos: viendo tutoriales, adquiriendo un kit básico (con placa UNO) y, sobre todo, comprando un buen libro ( Genuino-Arduino, de Torrente Artero) que me ha empezado a poner al día...
Hecha esta amplia introducción os planteo la pregunta.
He creado una FUNCION que es llamada desde distintas zonas del Sketch, para que me "cuente" el número de segundos que le indique desde el void loop, para mantener una luz encendida ese tiempo, pero si la operación la hago desde el propio void loop no tengo problema, pero si es auxiliandomen de una función no lo consigo. Concretamente, dentro del siguiente bucle:
if (TiempoAhora < INICIO_SUCESO) // Al principio, Inicio_Suceso es MAYOR
{delay (200);
TiempoAhora=millis();} // ---NO SE ACUMULAN LOS millis() en TiempoAhora
NO se vuelcan los millis() a la variable TiempoAhora.
Les mando el Sketch completo esperando de alguno de vds. la solución al error pues, la verdad, ya he
tocado fondo... ¡Muchas gracias!
// Con sistema de medida de tiempo para uso en Domo7
// VARIABLES GENERALES del SKETCH
int PULSADOR=2; // Se le asigna el valor entero 2, al PULSADOR
int NS=0; // Núm. de segundos a contar indicado desde el SKETCH principal
int LED = LED_BUILTIN; // Establece el PIN del LED de PLACA (Led Builtin)
// - - - Entrada en FUNCION que contará los SEGUNDOS solicitados - - -
void CUENTA_SEGUNDOS() // VOID porque NO devuelve ningún cálculo
// Def.VARIABLES sólo de esta Función
{
Serial.println (" ... Estoy en FUNCION ");
unsigned long INICIO_SUCESO;
unsigned long TiempoAhora;
INICIO_SUCESO=millis(); //Inicialmente, son los mismos tiempos
TiempoAhora=millis();
// NS son los núm. de segundos que queremos contar
INICIO_SUCESO=INICIO_SUCESO + (NS*1000); // X 1000 para pasar a miliseg.
Serial.print (" El 1er. TiempoAhora = ");
Serial.println (TiempoAhora);
if (TiempoAhora < INICIO_SUCESO) // Al principio, Inicio_Suceso es MAYOR
{delay (200);
TiempoAhora=millis();} // ---NO SE ACUMULAN LOS millis() en TiempoAhora
//if (millis() > TiempoAhora + periodo && X < NS )
Serial.print (" Inicio_Suceso es = ");
Serial.println (INICIO_SUCESO);
Serial.print (" El último TiempoAhora (Despues del IF) es = ");
Serial.println (TiempoAhora);
//{if (millis() < TiempoAhora + periodo)
//{TiempoAhora = millis();
Serial.println (" ");
}
// - - - - - - - - Vuelve a SKETCH principal - - - - - -
// - - - - - - - - - FIN de la Función - - - - - - - -
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.println (" Estoy en VOID LOOP en espera de pulsar ");
while (digitalRead(PULSADOR)==HIGH); // No avanza mientras NO SE PULSE
delay (50);
Serial.println (" He PULSADO ... ");
digitalWrite(LED, HIGH); // Enciende el LED que estará luciendo NS segundos
NS=15;
CUENTA_SEGUNDOS(); // - - Me voy a la Función "Contar segundos" - - - -
digitalWrite(LED, LOW); // Se apagará el LED
}