Skocz do zawartości

Kurs Arduino II - #4 - przerwania, kontaktron, czujnik PIR


Komentator

Pomocna odpowiedź

47 minut temu, PanMajster napisał:

nawet nad tym myślałem, jeszcze twoja sugestia więc chyba to znak że muszę spróbować 🙂

A w przyszłości, to już w ogóle można sobie to rozbudowywać. Np. wyłączanie alarmu pilotem, lub wpisaniem kodu (z wyświetlaczem LCD). 🙂 

Link do komentarza
Share on other sites

@BeeKeyPro

#define LED_R 10
#define LED_G 11
#define LED_B 12
#define KONTAKTRON 2
#define ALARM A5
#define RESET 3
bool SYRENA = false;


void setup() {
  Serial.begin(9600);
   Serial.println("Witam w systemie alarmowym");
  pinMode(LED_R, OUTPUT); //Poszczególne piny sterujące diodą jako wyjścia
  pinMode(LED_G, OUTPUT);
  pinMode(LED_B, OUTPUT);
  pinMode(KONTAKTRON, INPUT_PULLUP); //Kontaktron jako wejście
  pinMode(ALARM, OUTPUT); // Konfiguracja A5  jako wyjście
  pinMode(RESET, OUTPUT);
 
  digitalWrite(LED_R, LOW); //Dioda wyłączona
  digitalWrite(LED_G, LOW);
  digitalWrite(LED_B, LOW);
  digitalWrite(ALARM, LOW);
  digitalWrite(RESET, INPUT_PULLUP);
}
void loop() {
  if (digitalRead(RESET) == LOW && digitalRead(KONTAKTRON) == LOW) { // Wciśnięto RESET I czujnik zwarty
    SYRENA = false; // Wyłącz syrenę
    digitalWrite(LED_R, LOW); // Wyłącz czerwoną diodę
    digitalWrite(LED_G, HIGH); // Włącz zieloną diodę 
    Serial.println("RESET");
    delay(50);
  
} else if (digitalRead(KONTAKTRON) == LOW && SYRENA == false) { // wszystko ok czekamy na dzialanie
    digitalWrite(LED_R, LOW);
    digitalWrite(LED_G, HIGH);
    Serial.println("kontaktron");
    delay(5);

  } else if(digitalRead(KONTAKTRON) == HIGH || SYRENA == true) {
    tone(ALARM, 4000); //Wygeneruj sygnał o częstotliwości 4000 Hz na pinie A5
    delay(100);  
    noTone(ALARM);
    delay(100);
    digitalWrite(LED_R, HIGH); //Stan ALARM - dioda czerwona
    digitalWrite(LED_G, LOW);
    SYRENA = true; // blokujemy sygnal syreny jako włączony. Warunek jest wciąż spełniony
    Serial.println("ALARM");
    delay(5);
}}

Wszystko działa wiec chyba jest ok. Udało sie dołozyć guzik resetujacy który działa tylko wtedy gdy "pozamykamy wszystkie okna " kontrakton 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Zadanie 4.4

#define LED_R 10
#define PIR 2

volatile bool ileRazy  = false; // Zmienna przechowująca stan diody (true - włączona, false - wyłączona)

void setup() {
  pinMode(LED_R, OUTPUT);
  pinMode(PIR, INPUT);

  attachInterrupt(digitalPinToInterrupt(PIR), alarm, RISING);
}

void loop() {
digitalWrite(LED_R, ileRazy ); // Ustawienie stanu diody
}

void alarm() {
ileRazy  = !ileRazy ; // Zmiana stanu diody na przeciwny
}

 

Edytowano przez PanMajster
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.