Advertisement
Sempol

Centrala sygnalizacji pożarowej

May 9th, 2024 (edited)
922
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.34 KB | None | 0 0
  1. #include <LiquidCrystal_I2C.h>
  2. #include <Wire.h>
  3. #include <Keypad.h>
  4.  
  5. const byte ROWS = 4;
  6. const byte COLS = 4;
  7. const int buzzerpin = 6;
  8. const int relaypin1 = 38;
  9. const int relayzamykanie = 37;
  10. const int relayzasilanieMD = 36;
  11. const int relayModuldzwiekowy = 35;
  12. const int relayTC = 34;
  13. const int relaysyrena = 33;
  14. const int relayotwieranie = 32;
  15. const int relaypin2 = 31;
  16. const int ROP =50 ;
  17. const int Klapy = 51;
  18. const int Czujnik = 52;
  19. const int zasilanie = 53;
  20. const int reset = 28;
  21. const int otwieranieczujnikiem = 27;
  22. const int PrzewietrzanieO = 26;
  23. const int PrzewietrzanieZ = 25;
  24. const int Alarmdioda = 48;
  25. const int zasilaniedioda = 49;
  26. const int uszkodzeniedioda = 47;
  27.  
  28. bool buzzer = 0;
  29. bool K1 = 0;
  30.  
  31.  
  32. char keys[ROWS][COLS] = {
  33.   {'1', '2', '3', 'A'},
  34.   {'4', '5', '6', 'B'},
  35.   {'7', '8', '9', 'C'},
  36.   {'*', '0', '#', 'D'}
  37. };
  38.  
  39. byte rowPins[ROWS] = {41, 40, 39, 38};
  40. byte colPins[COLS] = {45, 44, 43, 42};  
  41.  
  42. Keypad klawiatura = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
  43. LiquidCrystal_I2C lcd(0x27, 20, 4);  // Adres I2C ekranu LCD: 0x27, 20 kolumn, 4 wiersze
  44. virtuabotixRTC myRTC(13, 12, 11); // Obiekt RTC, piny: SCLK - 13, I/O - 12, CE - 11
  45.  
  46. char klawisz = 0; //zmienna do przetrzymywania znakow z klawiatury
  47.  
  48. int pinDostepuPozycja = 0;
  49. int pinDostepu = 0;
  50. char pinCyfra1 = '1';
  51. char pinCyfra2 = '9';
  52. char pinCyfra3 = '9';
  53. char pinCyfra4 = '2';
  54.  
  55.  
  56. bool poziomDostepu=0;
  57. int wyswietlanyEkran = 1;
  58.  
  59. unsigned long previousMillis = 0;
  60.  
  61.  
  62. void setup() {
  63.   //initialize lcd screen
  64.   lcd.init();
  65.   // turn on the backlight
  66.   lcd.backlight();
  67.   // Ustawienie aktualnej daty i czasu na RTC
  68.   //myRTC.setDS1302Time(15, 02, 20, 7, 9, 5, 2024); // Sekundy, minuty, godziny, dzień tygodnia, dzień miesiąca, miesiąc, rok
  69.  
  70.   pinMode(buzzerpin, OUTPUT);
  71.   pinMode(relayotwieranie, OUTPUT);
  72.   pinMode(relayzamykanie, OUTPUT);
  73.   pinMode(relayzasilanieMD, OUTPUT);
  74.   pinMode(relaysyrena, OUTPUT);
  75.   pinMode(relayModuldzwiekowy, OUTPUT);
  76.   pinMode(relayTC, OUTPUT);
  77.   pinMode(relaypin1, OUTPUT);
  78.   pinMode(relaypin2, OUTPUT);
  79.   pinMode(Alarmdioda, OUTPUT);
  80.   pinMode(uszkodzeniedioda, OUTPUT);
  81.   pinMode(zasilaniedioda, OUTPUT);
  82.  
  83.  
  84.   digitalWrite(buzzerpin, LOW);
  85.   digitalWrite(relayotwieranie, HIGH);
  86.   digitalWrite(relayzamykanie, HIGH);
  87.   digitalWrite(relayzasilanieMD, HIGH);
  88.   digitalWrite(relaysyrena, HIGH);
  89.   digitalWrite(relayModuldzwiekowy, HIGH);
  90.   digitalWrite(relayTC, HIGH);
  91.   digitalWrite(relaypin1, HIGH);
  92.   digitalWrite(relaypin2, HIGH);
  93.   digitalWrite(Alarmdioda,  LOW);
  94.   //digitalWrite(Alarmdioda, OUTPUT);
  95.   digitalWrite(uszkodzeniedioda,  LOW);
  96.   //digitalWrite(uszkodzeniedioda, OUTPUT);
  97.   digitalWrite(zasilaniedioda,  LOW);
  98.   //digitalWrite(zasilaniedioda, OUTPUT);
  99.  
  100.   pinMode(ROP, INPUT_PULLUP);
  101.   pinMode(Klapy, INPUT_PULLUP);
  102.   pinMode(Czujnik, INPUT_PULLUP);
  103.   pinMode(zasilanie, INPUT_PULLUP);
  104.   pinMode(reset, INPUT_PULLUP);
  105.   pinMode(otwieranieczujnikiem, INPUT_PULLUP);
  106.   pinMode(PrzewietrzanieO, INPUT_PULLUP);
  107.   pinMode(PrzewietrzanieZ, INPUT_PULLUP);
  108.  
  109.  
  110.  
  111. }
  112.  
  113. void loop() {
  114.     klawisz = 0;
  115.     switch(wyswietlanyEkran) { //Wykonywanie akcji odpowiedniej dla danego ekranu
  116.     case 1:
  117.         ekranStartowy();
  118.     break;
  119.     case 2:
  120.         ekranLogowania();
  121.     break;
  122.     case 3:
  123.         alarmCzujnik();
  124.     break;
  125.     }
  126.    
  127.     if (digitalRead(Czujnik) == LOW) {
  128.         wyswietlanyEkran = 3;
  129.         buzzer = true;
  130.         digitalWrite(buzzerpin, HIGH);
  131.         previousMillis = millis();
  132.         //tone(buzzerpin, 1000);
  133.        
  134.     }
  135. }
  136.  
  137. void ekranStartowy() {
  138.     //lcd.clear();
  139.     lcd.setCursor(0,0);
  140.     lcd.print("SYSTEM SYGNALIZACJI ");
  141.     lcd.setCursor(0,1);
  142.     lcd.print("POZAROWEJ - CENTRALA");
  143.     lcd.setCursor(0,2);
  144.     //lcd.print("hh:mm:ss  dd.mm.rr");
  145.     lcd.print(millis() / 1000);
  146.     lcd.setCursor(0,3);
  147.     lcd.print("Poziom dostepu: ");
  148.     if (poziomDostepu == false) {
  149.         lcd.print("1   ");
  150.     } else {
  151.         lcd.print("2   ");
  152.     }
  153.     char klawisz = klawiatura.getKey();
  154.     if (klawisz) {
  155.         if (klawisz == 'C') {
  156.             wyswietlanyEkran = 2;
  157.         }
  158.     }
  159.    
  160. }
  161.  
  162. void ekranLogowania() {
  163.     //lcd.clear();
  164.     lcd.setCursor(0,0);
  165.     lcd.print("Brak dostepu        ");
  166.     lcd.setCursor(0,1);
  167.     lcd.print("Wymagany poziom 2   ");
  168.     lcd.setCursor(0,2);
  169.     lcd.print("Wpisz kod: "); //1992
  170.     for (int i = 0; i < pinDostepuPozycja; i++) {
  171.         lcd.print("*");
  172.     }
  173.     lcd.print("         ");
  174.     lcd.setCursor(0,3);
  175.     lcd.print("Zatwierdz * Powrot #");
  176.     wczytajKod();
  177.    
  178.     //delay(3000);
  179.     //wyswietlanyEkran = 1;
  180. }
  181.  
  182. void wczytajKod() {
  183.     klawisz = klawiatura.getKey();
  184.     if (klawisz) {
  185.         if (klawisz == '#') {
  186.             pinDostepuPozycja = 0;
  187.             pinDostepu = 0;
  188.             klawisz = 0;
  189.             wyswietlanyEkran = 1;//wjście do ekranu startowego
  190.             delay(500);
  191.         }
  192.         if (klawisz == '*' && pinDostepu == 4) {
  193.             poziomDostepu = true;
  194.             pinDostepuPozycja = 0;
  195.             klawisz = 0;
  196.             delay(500);
  197.         }
  198.                if (pinDostepuPozycja == 0 && klawisz == pinCyfra1) {
  199.             pinDostepuPozycja++;
  200.             pinDostepu++;
  201.             klawisz = 0;
  202.             delay(500);
  203.         } else if (pinDostepuPozycja == 1 && klawisz == pinCyfra2) {
  204.             pinDostepuPozycja++;
  205.             pinDostepu++;
  206.             klawisz = 0;
  207.             delay(500);
  208.         } else if (pinDostepuPozycja == 2 && klawisz == pinCyfra3) {
  209.             pinDostepuPozycja++;
  210.             pinDostepu++;
  211.             klawisz = 0;
  212.             delay(500);
  213.         } else if (pinDostepuPozycja == 3 && klawisz == pinCyfra4) {
  214.             pinDostepuPozycja++;
  215.             pinDostepu++;
  216.             klawisz = 0;
  217.             delay(500);
  218.         } else {
  219.             pinDostepuPozycja++;
  220.             klawisz = 0;
  221.             delay(500);
  222.         }
  223.     }  
  224. }
  225.  
  226. void ekranAlarmCzujnik() {
  227.     lcd.setCursor(0,0);
  228.     lcd.print(" !Alarmy pozarowe!  ");
  229.     lcd.setCursor(0,1);
  230.     lcd.print("Czujnik strefa doz 1");
  231.     lcd.setCursor(0,2);
  232.     lcd.print("Miejsce: biuro 1    ");
  233.     lcd.setCursor(0,3);
  234.     lcd.print("   data / godzina   ");
  235.     alarmCzujnik();
  236.     char klawisz = klawiatura.getKey();
  237.     if (klawisz) {
  238.         if (klawisz == '#') {
  239.             digitalWrite(buzzerpin, LOW);
  240.             digitalWrite(relaypin1, LOW);
  241.             buzzer = false;
  242.             K1 = false;
  243.             wyswietlanyEkran = 1;
  244.         }
  245.     }  
  246. }
  247.  
  248. void alarmCzujnik() {
  249.     if (buzzer == true) {
  250.       if (millis() - previousMillis >= 3000) {
  251.           previousMillis = millis();
  252.           digitalWrite(buzzerpin, LOW);
  253.           buzzer = false;
  254.           digitalWrite(relaypin1, HIGH);
  255.           K1 = true;
  256.       }
  257.     }
  258.     if (K1 == true) {
  259.       if (millis() - previousMillis >= 5000) {
  260.           previousMillis = millis();
  261.           digitalWrite(buzzerpin, HIGH);
  262.           buzzer = true;
  263.           digitalWrite(relaypin1, LOW);
  264.           K1 = false;
  265.       }
  266.     }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement