Aquí hay un ejemplo en Arduino:
const int ledPin = 13; // the number of the LED pin
int ledState = LOW; // ledState used to set the LED
long previousMillis = 0; // will store last time LED was updated
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop()
{
// here is where you'd put code that needs to be running all the time.
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
Esto registra cuando será necesario cambiar y espera hasta que sea ese momento.
Por supuesto, esta función ( millis();
) se restablecerá después de unos 50 días cuando sea demasiado grande para almacenar, pero si no la mantiene durante más de unos 40 días, debería ser bueno. Podría evitar esto descubriendo qué tan grande puede ser este valor y hacer una declaración if cuando se acerca a la parte superior para detenerse por un minuto más o menos. Tendría problemas para agregar a los milisegundos cuando llega tan alto, pero no sé cómo resolverlo, pero esto funcionará para un proyecto pequeño.