Загрузка данных


#include <LiquidCrystal.h>

// LCD: RS=7, E=8, D4=9, D5=10, D6=11, D7=12
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// Пины
const int smokePin    = A0;  // RV1 — датчик дыма
const int tempPin     = A1;  // RV2 — симуляция температуры
const int buzzerPin   = 2;   // BUZ1 через R8 (100 Ом)
const int relayPin    = 13;  // R9 → SW → база Q1 → вентилятор
const int redLedPin   = 4;   // R5 (220 Ом) → D2
const int greenLedPin = 5;   // R6 (220 Ом) → D3
const int buttonPin   = 6;   // кнопка сброса

const int smokeThreshold = 500;  // порог срабатывания АЦП

void setup() {
  pinMode(buzzerPin,   OUTPUT);
  pinMode(relayPin,    OUTPUT);
  pinMode(redLedPin,   OUTPUT);
  pinMode(greenLedPin, OUTPUT);
  pinMode(buttonPin,   INPUT_PULLUP);

  // Начальное состояние — норма
  digitalWrite(buzzerPin,   LOW);
  digitalWrite(relayPin,    LOW);
  digitalWrite(redLedPin,   LOW);
  digitalWrite(greenLedPin, HIGH);

  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Anti-smoke sys");
  lcd.setCursor(0, 1);
  lcd.print("Starting...");
  delay(1500);
  lcd.clear();
}

void loop() {
  int smokeValue = analogRead(smokePin);   // 0–1023
  int tempRaw    = analogRead(tempPin);    // 0–1023
  int tempValue  = map(tempRaw, 0, 1023, 0, 50);  // симуляция 0–50°C

  // --- Ручной сброс ---
  if (digitalRead(buttonPin) == LOW) {
    digitalWrite(redLedPin,   LOW);
    digitalWrite(greenLedPin, HIGH);
    digitalWrite(buzzerPin,   LOW);
    digitalWrite(relayPin,    LOW);

    lcd.setCursor(0, 0);
    lcd.print("Manual reset    ");
    lcd.setCursor(0, 1);
    lcd.print("VENT OFF        ");
    delay(500);
    return;
  }

  // --- Режим тревоги ---
  if (smokeValue > smokeThreshold) {
    digitalWrite(redLedPin,   HIGH);
    digitalWrite(greenLedPin, LOW);
    digitalWrite(buzzerPin,   HIGH);
    digitalWrite(relayPin,    HIGH);

    lcd.setCursor(0, 0);
    lcd.print("SMOKE DETECTED  ");
    lcd.setCursor(0, 1);
    lcd.print("T:");
    lcd.print(tempValue);
    lcd.print("C VENT ON   ");
  }
  // --- Нормальный режим ---
  else {
    digitalWrite(redLedPin,   LOW);
    digitalWrite(greenLedPin, HIGH);
    digitalWrite(buzzerPin,   LOW);
    digitalWrite(relayPin,    LOW);

    lcd.setCursor(0, 0);
    lcd.print("STATUS: NORMAL  ");
    lcd.setCursor(0, 1);
    lcd.print("T:");
    lcd.print(tempValue);
    lcd.print("C VENT OFF  ");
  }

  delay(200);
}