Registro de eventos con marca de tiempo

Crea un registro que anota cada evento del sistema con el momento en que ocurrió, para poder revisarlo después.

Qué vas a construir

Un sistema que escribe un registro en el monitor serie cada vez que ocurre algo: se presiona un botón, se detecta un error, se activa una alerta. Cada línea incluye los segundos desde que se encendió la placa.

Lo que aprendes

  • Por qué un sistema seguro debe dejar un registro de lo que pasa (auditoría).
  • Cómo obtener el tiempo con millis().
  • Cómo detectar un patrón sospechoso en el registro.

Idea clave

Un registro sirve para responder preguntas después de un incidente: ¿cuándo pasó?, ¿cuántas veces?, ¿quién lo intentó? Sin registro, el sistema puede fallar o ser atacado sin que nadie se entere.

millis() devuelve los milisegundos desde que se encendió la placa. Se reinicia al apagarla, así que el registro es relativo al encendido.

Materiales en Tinkercad

  • Arduino Uno R3
  • 1 pulsador (en el pin 2, con INPUT_PULLUP)
  • Monitor serie

Paso 1: Función de registro

const int BOTON = 2;
bool estadoAnterior = HIGH;

void registrar(String tipo, String detalle) {
  Serial.print("[");
  Serial.print(millis() / 1000);
  Serial.print(" s] ");
  Serial.print(tipo);
  Serial.print(": ");
  Serial.println(detalle);
}

void setup() {
  Serial.begin(9600);
  pinMode(BOTON, INPUT_PULLUP);
  registrar("INICIO", "sistema listo");
}

void loop() {
  bool estado = digitalRead(BOTON);

  if (estado != estadoAnterior) {
    registrar("BOTON", estado == LOW ? "presionado" : "soltado");
    estadoAnterior = estado;
    delay(50);   // espera corta para evitar rebotes del botón
  }
}

Paso 2: Detecta un patrón

Añade a loop() un contador de pulsaciones. Si se presiona el botón 5 veces en 10 segundos, registra una alerta:

  1. Guarda la marca de tiempo de la primera pulsación de la ventana.
  2. Cuenta las pulsaciones dentro de esos 10 segundos.
  3. Si el contador llega a 5, llama a registrar("ALERTA", "actividad inusual") y reinicia el contador.

Pista: usa millis() para medir la ventana y un int para el contador.

Paso 3: Prueba

  1. Presiona y suelta el botón una vez. Debe aparecer una línea “BOTON: presionado” y otra “BOTON: soltado”.
  2. Presiona el botón cinco veces rápidamente. Debe aparecer la alerta.
  3. Espera 10 segundos entre pulsaciones. La alerta no debe aparecer.

Cómo sabes que lo lograste

  • Cada evento aparece con su marca de tiempo.
  • La alerta aparece solo con actividad rápida.
  • Puedes explicar por qué millis() se reinicia al apagar.

Qué salió mal

Aparecen muchas líneas de un solo clic. Es el rebote del botón. Revisa el delay(50) y que estadoAnterior se actualice.

La alerta no aparece nunca. Revisa que el contador se reinicie solo al pasar la ventana de 10 segundos, y no en cada pulsación.

Siguiente clase

En la siguiente clase vas a unir todo lo visto en un proyecto final: una caja de acceso seguro.