// Ustalenie pinu czujnika nachylenia #define CZUJNIK_PIN 2 // Ustalenie pinu diody LED #define LED_PIN 13 // Ustalenie pinu głośniczka piezo #define PIEZO_PIN 3 // ustalenie czasu czułości czujnika [ms] #define CZUJNIK_TIME 100 // ustalenie czasu trwania alarmu [ms] (5000 ms = 5 s) #define ALARM_TIME 5000 // zmienna przechowuje czas przełączenia czujnika unsigned long sensor_time; // zmienna przechowuje czas włączenia alarmu unsigned long alarm_time; // zmienna przechowuje czas zmiany wysokości syreny unsigned long signal_time = 0; // zmienna przechowuje stopień wysokości dzwięku // 0 - brak dzwięku // 1 - pierwszy ton // > 1 - drugi ton byte sound_tone = 0; // funkcja syreny alarmowej void alarm_signal() { if (sound_tone != 0) // sprawdzenie czy właczyć syrene { if (millis() - signal_time > 750) // sprawdzenie długości trwania tonu { signal_time = millis(); // zapamiętanie czasu włączenia tonu sound_tone = ~sound_tone; // włączenie drugiego tonu } if (sound_tone == 1) // ton pierwszy { tone(PIEZO_PIN, 600); } else // ton drugi { tone(PIEZO_PIN, 1200); } } else { noTone(PIEZO_PIN); // Wyłączenie dźwięku } } // funkcja uruchamiana, gdy alarm jest włączony void alarm_on() { alarm_time = millis(); // zapamiętanie czasu włączenia alarmu digitalWrite(LED_PIN, HIGH); // Włączenie LED sound_tone = 1; // Włączenie syreny alarmowej } // funkcja uruchamiana gdy alarm jest wyłączony void alarm_off() { if (millis() - alarm_time > ALARM_TIME) // sprawdzenie długości trwania alarmu { digitalWrite(LED_PIN, LOW); //Wyłączenie LED sound_tone = 0; // Wyłączenie syreny alarmowej } } // funkcja sprawdzająca stan czujnika void check_sensor() { // Sprawdzanie stanu czujnika if (digitalRead(CZUJNIK_PIN) == HIGH) { // Zdarzenie jeśli wyłączony if (sensor_time == 0) // Sprawdzenie czy stan został zmieniony { sensor_time = millis(); // zapamiętanie czasu uaktywnienia czujnika } // Warunek czy stan czujnika trwa określony czas else if (millis() - sensor_time > CZUJNIK_TIME) { alarm_on(); } } else { // Zdarzenie jeśli włączony sensor_time = 0; alarm_off(); } } void setup() { // Ustawienie wejścia dla czujnika nachylenia pinMode(CZUJNIK_PIN, INPUT); // Włączenie wbudowanego rezystora Pull Up. digitalWrite(CZUJNIK_PIN, HIGH); pinMode(LED_PIN, OUTPUT); } void loop() { check_sensor(); alarm_signal(); }