Código para Análisis

2:22

Aquí tienes una sugerencia de cambios para reemplazar el "interruptor de mercurio" por un sensor magnético para puertas (por ejemplo, un reed switch) que active el sistema de seguridad cuando se separen los contactos:

Sugerencia de cambios:
  1. Renombrar la variable
    • Cambiar mercurySwitchPin a algo como doorSensorPin (mantén el mismo número de pin o ajústalo según tu conexión).
    • Actualizar el nombre de la variable lastMercurySwitchState a lastDoorSensorState.
  2. Modificar las lecturas y lógica del sensor
    • Reemplazar todas las variables y comparaciones referentes a mercurySwitchState por doorSensorState.
    • Suponiendo que tu sensor magnético está cableado para entregar un estado LOW cuando los contactos están separados (es decir, puerta abierta) y HIGH cuando están cerrados, la lógica existente se mantiene:
      • Cuando doorSensorState == LOW (contactos abiertos) se activa la alarma (deteniendo el temporizador, encendiendo el LED rojo, mostrando mensaje de PELIGRO).
      • Cuando cambia a HIGH se vuelve a la pantalla normal.
  3. Código actualizado (extracto modificado):

Cpp


// Cambiar el nombre de la variable del interruptor de mercurio a sensor magnético
const int doorSensorPin = 6; // Pin para el sensor magnético de puertas
// Renombrar variable de estado previo
int lastDoorSensorState = HIGH;

...

void loop() {
  int buttonState = digitalRead(buttonPin);
  // Leer el sensor magnético en lugar del interruptor de mercurio
  int doorSensorState = digitalRead(doorSensorPin);

  unsigned long currentMillis = millis();

  // Apagar pantalla si no hay interacción durante 25 segundos y el temporizador no está en marcha
  if (displayOn && !timerRunning && (currentMillis - lastInteractionTime > autoOffDelay)) {
    toggleDisplay();
  }

  // Comprobar si el sensor magnético indica que los contactos se separaron (puerta abierta)
  if (doorSensorState == LOW && lastDoorSensorState == HIGH) {
    timerRunning = false;
    digitalWrite(RELE, LOW);
    digitalWrite(LED_RED, HIGH);

    if (displayOn) {
      display.clearDisplay();
      display.setCursor(0, 0);
      display.setTextSize(1);
      display.print(F("    Puerta abierta"));
      display.setCursor(0, 16);
      display.print(F("     ¡PELIGRO!"));
      display.display();
    }
    lastInteractionTime = currentMillis;
  }

  if (doorSensorState == HIGH && lastDoorSensorState == LOW) {
    digitalWrite(LED_RED, LOW);
    if (displayOn && !timerRunning) {
      displayQuestionWithImage();
    }
  }

  lastDoorSensorState = doorSensorState;

  // ... El resto del código permanece igual ...
}

Estos cambios actualizan el código para trabajar con un sensor magnético (como un reed switch) en lugar del interruptor de mercurio. Puedes usar el botón y el sensor conectados en pines INPUT_PULLUP para que la lógica de detección funcione adecuadamente.
Si deseas aplicar estos cambios al proyecto, puedes utilizar el botón "Apply changes" para actualizarlos en tu entorno. ¿Necesitas alguna aclaración adicional o ajuste en algún bloque del código?
Confirm sensor configuration
Inquire about debounce
Search for sensor component
Confirm logic inversion
368 days

Ready.


To get started, talk to Flux or create a New Document.

Documents

    Documents are markdown text files which describe project goals, capture details, or even simulation outputs.

    Assets

    No assets added.

    Sorry Salmon Flux Capacitor

    Sorry Salmon Flux Capacitor thumbnail
    Welcome to your new project. Imagine what you can build here.

    Properties

    Properties describe core aspects of the project.

    Pricing & Availability

    Distributor

    Qty 1

    Controls