Untitled

 avatar
unknown
plain_text
24 days ago
2.8 kB
3
Indexable
#include <TM1637Display.h>  // Bibliothek für das 4-Digit-Display

const int ledPin = D5;          // Rote LED (Alarm)
const int ledPingruen = D6;     // Grüne LED (Status)
const int buzzerPin = D7;       // Buzzer
const int trigPin = D1;         // HC-SR04 Trig
const int echoPin = D2;         // HC-SR04 Echo
const int buttonPin = D3;       // Taster zum dauerhaften Umschalten
const int buttonPin2 = D4;      // Taster zum kurzzeitigen Ausschalten

const int CLK = D8;             // TM1637 Display CLK
const int DIO = D9;             // TM1637 Display DIO

TM1637Display display(CLK, DIO);

bool alarmActive = false;  
bool tempDisabled = false;
unsigned long disableTime = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(ledPingruen, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(buttonPin2, INPUT_PULLUP);

  display.setBrightness(7);  // Helligkeit des Displays (0-7)
  display.showNumberDec(0, true);  // Startanzeige "0000"

  Serial.begin(9600);
}

void loop() {
  // Button 1: Alarm dauerhaft ein/aus
  if (digitalRead(buttonPin) == LOW) {  
    delay(300);  
    alarmActive = !alarmActive;  
    Serial.print("Alarmanlage ist jetzt: ");
    Serial.println(alarmActive ? "AKTIV" : "INAKTIV");
    
    while (digitalRead(buttonPin) == LOW);  
  }

  // Button 2: Alarm für 10 Sekunden deaktivieren
  if (digitalRead(buttonPin2) == LOW) {  
    delay(300);
    tempDisabled = true;
    disableTime = millis();
    Serial.println("Alarm für 10 Sekunden deaktiviert!");
    
    while (digitalRead(buttonPin2) == LOW);
  }

  // Berechnung der verbleibenden Zeit
  int remainingTime = 0;
  if (tempDisabled) {
    remainingTime = 10 - ((millis() - disableTime) / 1000);
    if (remainingTime <= 0) {
      tempDisabled = false;
      remainingTime = 0;
      Serial.println("Alarm wieder aktiv!");
    }
  }

  // Display-Anzeige aktualisieren
  display.showNumberDec(remainingTime, true);

  // Grüne LED zeigt an, ob Alarm aktiv ist (nicht vorübergehend deaktiviert)
  digitalWrite(ledPingruen, (alarmActive && !tempDisabled) ? HIGH : LOW);

  if (alarmActive && !tempDisabled) {
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    long duration = pulseIn(echoPin, HIGH);
    float distanceCm = (duration * 0.0343) / 2;

    Serial.print("Distanz: ");
    Serial.print(distanceCm);
    Serial.println(" cm");

    if (distanceCm < 20) {
      digitalWrite(buzzerPin, HIGH);
      digitalWrite(ledPin, HIGH);
      delay(1000);
    } else {
      digitalWrite(buzzerPin, LOW);
      digitalWrite(ledPin, LOW);
    }
  } else {
    digitalWrite(buzzerPin, LOW);
    digitalWrite(ledPin, LOW);
  }

  delay(200);
}
Editor is loading...
Leave a Comment