#include <Arduino.h>
static const int LED_PIN = 2;
// Modo 1: temporização ingênua
void blink_with_delay() {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
delay(500);
}
// Modo 2: temporização controlada (não bloqueante)
void blink_with_millis() {
static unsigned long last = 0;
static bool led = false;
unsigned long now = millis();
if (now - last >= 500) {
unsigned long period = now - last; // período real (aprox. 500ms)
last = now;
led = !led;
digitalWrite(LED_PIN, led);
Serial.printf("[millis] period=%lums\n", period);
}
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
Serial.println("Aula 3: STR, latencia e tempo de resposta");
// Rodar 5s com delay para comparar
unsigned long start = millis();
while (millis() - start < 5000) {
blink_with_delay();
}
}
void loop() {
blink_with_millis();
// Exemplo de medição de tempo fino (micros) de um trecho simples
unsigned long t0 = micros();
// trecho (simulado) que faria algo rápido
//for (volatile int i = 0; i < 50; i++) { }
//for (volatile int i = 0; i < 500; i++) { }
for (volatile int i = 0; i < 5000; i++) { }
//for (volatile int i = 0; i < 50000; i++) { }
unsigned long dt = micros() - t0;
// imprime raramente para não poluir
static unsigned long lastPrint = 0;
if (millis() - lastPrint > 2000) {
lastPrint = millis();
Serial.printf("[micros] trecho_rapido=%luus\n", dt);
}
delay(10); // pequeno descanso
}