Skocz do zawartości

Alarm na arduino


Florian

Pomocna odpowiedź

Witam ponownie, utknąłem troszeczkę 🙂

Czy jeżeli to nie problem ktoś mógł by mi napisać taki mały kodzik :

" jeśli stan diody d4 zmieni się z niskiego na wysoki ustaw stan diody d3 na niski ale tylko raz

żeby reszta kodu zmieniała stan diody d3 i to się nie wykonało aż do ponownej zmiany stanu diody d5 z niskiego na wysoki"

Dodam ze przeczytałem 5 razy ten poradnik i wszystko mi się zapętla, czytałem tez inne przykłady ale nadal mam problem.Bardzo docenię każda podpowiedz.

Link do komentarza
Share on other sites

Witam ponownie, utknąłem troszeczkę 🙂

Czy jeżeli to nie problem ktoś mógł by mi napisać taki mały kodzik :

" jeśli stan diody d4 zmieni się z niskiego na wysoki ustaw stan diody d3 na niski ale tylko raz

żeby reszta kodu zmieniała stan diody d3 i to się nie wykonało aż do ponownej zmiany stanu diody d5 z niskiego na wysoki"

Dodam ze przeczytałem 5 razy ten poradnik i wszystko mi się zapętla, czytałem tez inne przykłady ale nadal mam problem.Bardzo docenię każda podpowiedz.

Niestety nie na tym polega cała zabawa, aby ktoś za ciebie pisał kod. Pokaż co sam napisałeś a ewentualnie wtedy ktoś powie ci co masz źle.

Narysuj sobie schemat blokowy co jak ma działać i przeanalizuj czy twój kod aby na pewno robi to co ma robić 🙂

Link do komentarza
Share on other sites

Poradziłem sobie z problemami 🙂 chociaż z jednym nie do końca tak jak chciałem, ale efekt osiągnięty 🙂

Dodałem 2 zmienne :

int standiody = 0;
int zmienna = 0;

dodatkowa pętle kasowanie i kawałek kodu :

 standiody = digitalRead(d4);
 if (standiody != zmienna) {
   kasowanie();
   zmienna = standiody;
 }

ale to działa na każda zmianę stanu diody. Teraz mój kod wygląda tak :

#include <PCF8574.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#define d1 7 //przekazniki od swiatla
#define d2 8
#define d3 9 //

#define d4 13 //dioda stanu alarmu ON lub OFF

#define d5 10 //syrena

#define g1 0 //czujki
#define g2 1
#define g3 11 //

#define g4 4 //wlacznik alarmu

LiquidCrystal_I2C  lcd(0x27, 2, 1, 0, 4, 5, 6, 7); // 0x27 is the I2C bus address for an unmodified backpack
PCF8574 expander;
PCF8574 expander2;
DS3231 clock;
RTCDateTime dt;


//String odebraneDane = "";
int guzik1 = LOW;
int guzik2 = LOW;
int guzik3 = LOW;

int standiody = 0;
int zmienna = 0;

//unsigned long
unsigned long czas1 = millis(); // czasy dzialania swiatla jak alarm wylaczony
unsigned long czas2 = millis();
unsigned long czas3 = millis();

unsigned long czas4 = millis(); //czas dzialania syreny

void setup() {

 // activate Expander
 expander.begin(0x20);
 // zalaczenie zegara
 clock.begin();
 // Set sketch compiling time
 clock.setDateTime(__DATE__, __TIME__);

 // activate LCD module
 lcd.begin (16, 2); // for 16 x 2 LCD module
 lcd.setBacklightPin(3, POSITIVE);
 lcd.setBacklight(HIGH);

 lcd.clear();

 Serial.begin(9600);
 pinMode(d1, OUTPUT);
 pinMode(d2, OUTPUT);
 pinMode(d3, OUTPUT);
 pinMode(d4, OUTPUT);
 pinMode(d5, OUTPUT);

 expander.pinMode(g1, INPUT);
 expander.pinMode(g2, INPUT);


 pinMode(g3, INPUT);
 pinMode(g4, INPUT);



 digitalWrite(d1, LOW); //Wyłączenie diod
 digitalWrite(d2, LOW);
 digitalWrite(d3, LOW);
 digitalWrite(d4, LOW);
 digitalWrite(d5, LOW);

}

void alarm() {
 digitalWrite(d1, HIGH);  //wlaczenie swiatel
 digitalWrite(d2, HIGH);
 digitalWrite(d3, HIGH);
 digitalWrite(d5, HIGH);   //wlaczenie syreny
 czas4 = millis() + 4000;  //ustawienie czasu syreny
}

void kasowanie() {

 digitalWrite(d1, LOW);   // wylaczenie swiatel
 digitalWrite(d2, LOW);
 digitalWrite(d3, LOW);   //
 digitalWrite(d5, LOW);   //wylaczenie syreny

}


void loop() {
 dt = clock.getDateTime();

 standiody = digitalRead(d4);
 if (standiody != zmienna) {
   kasowanie();
   zmienna = standiody;
 }


 if (digitalRead(g4) == LOW) { //Zalaczenie alarmu
   digitalWrite(d4, HIGH);
 }
 else digitalWrite(d4, LOW);   //



 if (digitalRead(d5) == HIGH) { //wylaczenie syreny po okreslonym czasie
   if (millis() >= czas4) {
     digitalWrite(d5, LOW);     //
   }
 }

 if (digitalRead(d4) == HIGH) {  //jak alarm zalaczony


   lcd.setCursor (0, 1);
   lcd.print("Alarm UZBROJNY");


   if (expander.digitalRead(g1) == HIGH) { //czujnik 1
     delay(50);
     alarm();
     while (digitalRead(d4) == LOW);
     delay(20);
     lcd.setCursor (0, 0);
     lcd.print("Strefa Pierwsza");
   }

   if (expander.digitalRead(g2) == HIGH) { //czujnik 2
     alarm();
     delay(50);
     while (digitalRead(d4) == LOW);
     delay(20);
     lcd.setCursor (0, 0);
     lcd.print("Strefa    Druga");
   }

   if (digitalRead(g3) == HIGH) {         //czujnik 3
     alarm();
     delay(50);
     while (digitalRead(d4) == LOW)
       delay(20);
     lcd.setCursor (0, 0);
     lcd.print("Strefa  Trzecia");
   }
 }

 else {                            //jak alarm wylaczony

   digitalWrite(d5, LOW);           //wylaczenie syreny

   lcd.setCursor (0, 1);
   lcd.print("Alarm ROZBROJONY");


   lcd.setCursor ( 0, 0 );         // wyswietlanie godziny na wyswietlaczu
   lcd.print("    ");
   lcd.print(dt.hour);   lcd.print(":");
   lcd.print(dt.minute); lcd.print(":");
   lcd.print(dt.second);
   lcd.setCursor ( 13, 0 );
   lcd.print("    ");

   guzik1 = expander.digitalRead(g1);     //czujnik 1

   if (guzik1 == HIGH) {
     delay(25);
     digitalWrite(d1, HIGH);
     czas1 = millis() + 4000;
   }
   if (guzik1 == LOW) {
     if (millis() >= czas1) {
       digitalWrite(d1, LOW);
     }
   }

   guzik2 = expander.digitalRead(g2);    //czujnik 2

   if (guzik2 == HIGH) {
     delay(25);
     digitalWrite(d2, HIGH);
     czas2 = millis() + 4000;
   }
   if (guzik2 == LOW) {
     if (millis() >= czas2) {
       digitalWrite(d2, LOW);
     }
   }

   guzik3 = digitalRead(g3);              //czujnik 3

   if (guzik3 == HIGH) {
     delay(25);
     digitalWrite(d3, HIGH);
     czas3 = millis() + 4000;
   }
   if (guzik3 == LOW) {
     if (millis() >= czas3) {
       digitalWrite(d3, LOW);
     }
   }

 }
}

Dzięki za wszelaką pomoc i jeszcze się odezwę w temacie jak będę pracował nad wysyłaniem SMS.

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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.