Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define BUZZER 11
- #define KONTAKTRON 10
- #define PIR 1
- #include <Keypad.h> //biblioteka od klawiatury
- #include <Adafruit_NeoPixel.h> //biblioteka od linijki LED
- char klawisz = 0;
- const byte ROWS = 4; // ile wierszy
- const byte COLS = 4; //ile kolumn
- int pinAlarmuPozycja = 1;
- char pinCyfra1 = '1';
- char pinCyfra2 = '2';
- char pinCyfra3 = '3';
- char pinCyfra4 = '4';
- byte rowPins[ROWS] = {5, 4, 3, 2}; //piny wierszy
- byte colPins[COLS] = {6, 7, 8, 9}; //piny kolumn
- int ileCzasuMinelo = 0;
- char keys[ROWS][COLS] = { //mapowanie klawiatury
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'}
- };
- Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury
- Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, A0, NEO_GRB + NEO_KHZ800); //konfiguracja linijki LED
- volatile int stanAlarmu = 1;
- void setup() {
- pinMode(BUZZER, OUTPUT);
- pinMode(KONTAKTRON, INPUT_PULLUP);
- pinMode(PIR, INPUT_PULLUP);
- linijka.begin(); //inicjalizacja linijki
- linijka.show();
- }
- void loop() {
- switch(stanAlarmu) { //Wykonywania akcji odpowiedniej dla danego stanu
- case 1:
- //Czuwanie
- for(int i =0;i<8;i++){
- linijka.setPixelColor(i, linijka.Color(0, 15, 0)); //Dioda nr 1 świeci na zielono
- }
- linijka.show();
- klawisz = klawiatura.getKey();
- if (klawisz == 'A') { //Czy uzbroic alarm?
- for (int k=0;k<8;k++){
- for(int i =0;i<8;i++){
- linijka.setPixelColor(i, linijka.Color(0, 15, 0)); //Dioda nr 1 świeci na zielono
- }
- linijka.show();
- delay(500);
- for(int i =0;i<8;i++){
- linijka.setPixelColor(i, linijka.Color(0, 0, 0)); //Dioda nr 1 świeci na zielono
- }
- linijka.show();
- delay(500);
- }
- stanAlarmu = 2;
- }
- break;
- case 2:
- //Monitorowanie
- for(int i =0;i<8;i++){
- linijka.setPixelColor(i, linijka.Color(15, 0, 0)); //Dioda nr 1 świeci na czerw
- }
- linijka.show();
- delay(100);
- for(int i =0;i<8;i++){
- linijka.setPixelColor(i, linijka.Color(0, 0, 0)); //Dioda nr 1 świeci na czwerw
- }
- linijka.show();
- delay(100);
- if (digitalRead(PIR) == HIGH ) {
- if (digitalRead(KONTAKTRON) == LOW){
- stanAlarmu = 4; //Natychmiast uruchamiamy alarm
- }
- else {
- ileCzasuMinelo= 0; //Zerowanie zmiennej
- stanAlarmu = 3;}
- }
- /* else if (digitalRead(KONTAKTRON) == HIGH) { //LOW - drzwi zamkniete
- stanAlarmu = 3; //Szansa na rozbrojenie
- }*/
- break;
- case 3:
- //Rozbrajanie
- klawisz = klawiatura.getKey();
- if (klawisz) {
- //Czy kolejna podana cyfra jest poprawna?
- if (pinAlarmuPozycja == 1 && klawisz == pinCyfra1) { //Jesli sprawdzamy 1 pozycje PINu
- pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna
- tone(BUZZER, 1200, 100);
- } else if (pinAlarmuPozycja == 2 && klawisz == pinCyfra2) { //Jesli sprawdzamy 2 pozycje PINu
- pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna
- tone(BUZZER, 1200, 100);
- } else if (pinAlarmuPozycja == 3 && klawisz == pinCyfra3) { //Jesli sprawdzamy 3 pozycje PINu
- pinAlarmuPozycja++; //Cyfra poprawna, mozna sprawdzic na kolejna
- tone(BUZZER, 1200, 100);
- } else if (pinAlarmuPozycja == 4 && klawisz == pinCyfra4) { //Jesli sprawdzamy 4 pozycje PINu
- tone(BUZZER, 1500, 500);
- stanAlarmu = 1; //Wszystkie 4 cyfry kodu sa poprawne
- } else {
- stanAlarmu = 4; //Blad w kodzie PIN - wlacz alarm
- }
- }
- delay(100);
- ileCzasuMinelo++;
- if (ileCzasuMinelo >= 50) {
- stanAlarmu = 4;
- }
- break;
- case 4:
- //Sygnalizacja alarmu
- for (int i = 0; i < 8; i++) {
- linijka.setPixelColor(i, linijka.Color(255, 0, 0)); //Dioda nr i świeci na czerwono
- }
- linijka.show();
- tone(BUZZER, 4300);
- delay(300);
- for (int i = 0; i < 8; i++) {
- linijka.setPixelColor(i, linijka.Color(0, 0, 255)); //Dioda nr i świeci na niebiesko
- }
- linijka.show();
- tone(BUZZER, 3300);
- delay(300);
- for (int i = 0; i < 8; i++) {
- linijka.setPixelColor(i, linijka.Color(0, 255, 0)); //Dioda nr i świeci na czerwono
- }
- linijka.show();
- tone(BUZZER, 5300);
- delay(300);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement