Dos temporizadores en Arduino
Dos tareas, dos marcas de tiempo, ninguna espera a la otra.
// Two jobs, two timestamps: neither waits for the other.
unsigned long lastBlink = 0;
unsigned long lastReport = 0;
bool ledOn = false;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (millis() - lastBlink >= 250) {
lastBlink = millis();
ledOn = !ledOn;
digitalWrite(LED_BUILTIN, ledOn ? HIGH : LOW);
}
if (millis() - lastReport >= 2000) {
lastReport = millis();
Serial.println(analogRead(A0));
}
}
Cómo funciona
- Cada tarea es dueña de su marca
last...y su intervalo. - El blink corre a 250 ms mientras los reportes van cada 2 s.
- Esta es la forma del multitasking sin sistema operativo.
Palabras clave y builtins usados aquí
HIGHLED_BUILTINLOWOUTPUTboolfalseiflongloopsetupunsignedvoid
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 436
- Tokens
- 108
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 100 segundos.
Paso 2 de 3 en Tiempo; paso 11 de 27 en Fundamentos del lenguaje.