Skocz do zawarto┼Ťci

Alarm na arduino


Florian

Pomocna odpowied┼║

Witam robi─Ö alarm na arduino i mam pewien problem a w zasadzie 2 ­čÖé

Kod wygl─ůda tak :

#include <PCF8574.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#define d1 7//diody
#define d2 8
#define d3 9
#define d4 13

#define d5 10

#define g1 0//guziki
#define g2 1
#define g3 11
#define g4 4

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;
//unsigned long
unsigned long czas1 = millis();
unsigned long czas2 = millis();
unsigned long czas3 = millis();
unsigned long czas4 = millis();

void setup() {

// activate Expander

expander.begin(0x20);
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);
// delay(1000);
 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 loop() {
 dt = clock.getDateTime();

   if (digitalRead(g4) == LOW)
     digitalWrite(d4,HIGH);
     else digitalWrite(d4,LOW);


 if(digitalRead(d5) == HIGH) {
      if(millis() >= czas4){
       digitalWrite(d5, LOW);
      }
     }

         if (digitalRead(d4) == HIGH) {


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


if (expander.digitalRead(g1) == HIGH) {
     delay(50);
     digitalWrite(d1, HIGH);

     digitalWrite(d2, HIGH);
     digitalWrite(d3, HIGH);
     digitalWrite(d5, HIGH);
     czas4 = millis() + 4000;





     while(digitalRead(d4) == LOW);
     delay(20);
   lcd.setCursor (0, 0);
   lcd.print("Strefa Pierwsza");
    }

     if (expander.digitalRead(g2) == HIGH) {
     delay(50);
     digitalWrite(d2, HIGH);
     digitalWrite(d5, HIGH);
//      tone (d5, 3000, 5000);
     digitalWrite(d1, HIGH);
     digitalWrite(d3, HIGH);
     czas4 = millis() + 4000;
     while(digitalRead(d4) == LOW);
     delay(20);
    lcd.setCursor (0, 0);
    lcd.print("Strefa    Druga");
     }
      if (digitalRead(g3) == HIGH) {
     delay(50);
     digitalWrite(d3, HIGH);
   //   tone (d5, 2000, 5000);
     digitalWrite(d5, HIGH);
     digitalWrite(d1, HIGH);
     digitalWrite(d2, HIGH);
     czas4 = millis() + 4000;
     while(digitalRead(d4) == LOW)
     delay(20);
   lcd.setCursor (0, 0);
   lcd.print("Strefa  Trzecia");
      }


}



else {

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

//  lcd.setCursor (7,0);
//  lcd.print("Witaj");
lcd.setCursor ( 0, 0 );
   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);

 if(guzik1 == HIGH) {
   delay(25);
   digitalWrite(d1, HIGH);
   czas1 = millis() + 4000;
 }
  if(guzik1 == LOW) {
   if(millis() >= czas1){
       digitalWrite(d1, LOW);
     }
 }
guzik2 = expander.digitalRead(g2);
 if(guzik2 == HIGH) {
   delay(25);
   digitalWrite(d2, HIGH);
   czas2 = millis() + 4000;
 }
  if(guzik2 == LOW) {
   if(millis() >= czas2){
       digitalWrite(d2, LOW);

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

}
}

diody podpi─Öte przez rezystor a guziki przez rezystor pull down

problem mam z wygaszeniem wszystkich diod jak d4 przechodzi ze stanu niskiego na wysoki,
a drugi problem to zrobienie jakiej┼Ť funkcji co by nie trzeba by┼éo pisa─ç sta┼éych element├│w pod ka┼╝dy guzik

Link do komentarza
Share on other sites

Chyba ┼╝artujesz ­čśâ

Co mo┼╝emy na to poradzi─ç, ┼╝e co┼Ť Ci nie dzia┼éa? Napisa─ç kod od pocz─ůtku? Zacz─ů─ç t┼éumaczy─ç Ci jak si─Ö pisze takie programy? Skierowa─ç do przeczytania jakich┼Ť ksi─ů┼╝ek? Poradzi─ç, by┼Ť przemy┼Ťla┼é to raz jeszcze? Mo┼╝e wstawi┼é jakie┼Ť komunikaty kontrolne i zacz─ů┼é analizowa─ç co tam takiego sknoci┼ée┼Ť, ┼╝e nie dzia┼éa? Bo chyba nie my┼Ťlisz, ┼╝e b─Ödziemy tu przegl─ůda─ç Tw├│j kod w poszukiwaniu Twoich b┼é─Öd├│w. Masz kompilator, dwie r─Öce i m├│zg. Ty jeste┼Ť autorem, sam to napisa┼ée┼Ť to sam szukaj b┼é─Öd├│w i uruchamiaj ten program. Tylko Ty wiesz jak on ma dzia┼éa─ç i jak dzia┼éa obecnie. To normalne, ┼╝e nie dzia┼éa. To w┼éa┼Ťnie teraz masz szans─Ö wykazania si─Ö tym, ┼╝e rozumiesz co robisz. Klepa─ç w klawiatur─Ö to i ma┼épa potrafi.

Ale ch─Ötnie pokibicujemy, raportuj o post─Öpach.

EDIT: Hm, ciekawa zbie┼╝no┼Ť─ç pogl─ůd├│w ­čÖé To ju┼╝ jaka┼Ť plaga z tym wrzucaniem ca┼éych program├│w napisanych na kolanie. Czym to Forum ┼Ťci─ůga takich bezradnych ludzi? Czy dzisiaj programy si─Ö ju┼╝ tylko pisze, a uruchamiaj─ů i debuguj─ů si─Ö same - dzi─Öki internetowi? Mo┼╝e zostali┼Ťmy w tyle?

Link do komentarza
Share on other sites

marek1707, Popatrz kiedy pojawiły się takie tematy.

Kiedy rejestrowałem się na tym forum 80% postów to były opisy robotów, worklogi i poradniki.

Teraz 80% jest w dziale Arduino i polega na "Napisany w 3 minuty kod mi nie działa, niczego nie próbowałem i nie pomogło, przepiszcie go za mnie!".

EDIT: I ma 0 wsp├│lnego z robotyk─ů. Forum si─Ö rozrasta, numerki id─ů w g├│r─Ö.

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

No dobrze, ale czy mo┼╝emy co┼Ť na to poradzi─ç? Czy za ma┼éo jest informacji o tym jak uruchamia─ç (w┼éasne!) programy? Jak je najpierw planowa─ç, jak budowa─ç sensowne struktury danych, jak pisa─ç kod by by┼é debugowalny i testowalny? Chyba nie, przecie┼╝ to wszystko jest. Napisano na ten temat setki ksi─ů┼╝ek, ale.. pocz─ůtkuj─ůcy chyba o tym nie wiedz─ů. Mo┼╝e jest to dobry przyczynek do stworzenia kolejnego (obowi─ůzkowego ­čÖé ) kursu. Nie o "programowaniu w Arduino", nie o mruganiu diodkami tylko w┼éa┼Ťnie o tym co i jak zrobi─ç by mruga┼éy jak chcemy. Tylko ┼╝e to nie jest wyk┼éad na godzin─Ö i na trzy strony tekstu ­čÖü cho─ç mo┼╝e kilka(set?) przyk┼éad├│w by pomog┼éo ­čśÉ

Ja widz─Ö dwa g┼é├│wne problemy: programy opierane na op├│┼║nieniach a maj─ůce robi─ç wszystko na raz, oraz ca┼ékowity brak podejrzliwo┼Ťci i umiej─Ötno┼Ťci modyfikowania w┼éasnego kodu tak by zacz─ů┼é dobrze dzia┼éa─ç. Wygl─ůda, jakby program raz napisany mia┼é po prostu dzia┼éa─ç i albo co┼Ť jest popsute albo.. pom├│┼╝cie ­čśą

Florian akurat wykazał się na polu pomiaru czasu i korzysta z millis() - to akurat na plus.

Sprawa odbiegania od tematu Forum to zupe┼énie inna rzecz. Skoro zosta┼é za┼éo┼╝ony dzia┼é Arduino, to chyba naturalne, ┼╝e ludzie pisz─ůcy w tym ┼Ťrodowisku przynosz─ů tu swoje problemy. Dop├│ki Administracja Forum tego nie czy┼Ťci, nic mi do tego. Sam nie znam si─Ö na robotach ani troch─Ö wi─Öc pomagam tam gdzie co┼Ť mog─Ö sensownego dorzuci─ç.

Link do komentarza
Share on other sites

Florian, mo┼╝esz zapisywa─ç poprzedni stan diody i sprawdza─ç czy si─Ö zmieni┼é. Nie czyta┼éem twojego kodu, ale to jest najprostszy spos├│b na osi─ůgni─Öcie wykonania czego┼Ť po zmianie jej stanu.

Mo┼╝esz te┼╝ zmienia─ç jej stan wywo┼éuj─ůc stworzon─ů do tego funkcj─Ö kt├│ra zrobi to co┼Ť zamiast zmienia─ç stan bezpo┼Ťrednio.

marek1707, my┼Ťl─Ö ┼╝e by┼éby rynek na tego typu filmiki na YT, typu w┼éa┼Ťnie "op├│┼║nienia a przerwania, co i kiedy", "debugowanie kodu dla niesamowicie opornych" i tak dalej.

A co do Twojej pomocy to szanuj─Ö niesamowicie ogrom wiedzy jaki posiadasz na chyba ka┼╝dy temat i niesamowicie czytelny spos├│b w jaki potrafisz si─Ö ni─ů dzieli─ç.

Link do komentarza
Share on other sites

Mo┼╝e to dlatego, ┼╝e przy takich tematach jest jaka┼Ť┬ádyskusja, cho─çby i niekoniecznie taka, jakiej si─Ö pytaj─ůcy spodziewa┼é, a pod worklogiem to mo┼╝na co najwy┼╝ej przeczyta─ç "fajny robot, gratulacje" i niezbyt jest o czym wi─Öcej m├│wi─ç...

Link do komentarza
Share on other sites

Jestem pocz─ůtkuj─ůcym "programist─ů" ­čÖé i to jest m├│j pierwszy projekt i ca┼éy czas si─Ö ucz─Ö stosuj─ůc to czego ju┼╝ si─Ö nauczy┼éem, my┼Ťl─Ö ze jak si─Ö wi─Öcej naucz─Ö to przerobie sw├│j projekt.

Do tej pory nie zajmowa┼éem si─Ö zmiennymi bo jako┼Ť mi nie sz┼éo w tym temacie, nie wiem kt├│ra zmienn─ů gdzie zastosowa─ç (czy int czy boolean) .

Przyjm─Ö ka┼╝da pomoc ­čÖé

Link do komentarza
Share on other sites

To zrób tak, jak ci koledzy wyżej poradzili -- powstawiaj printy i spróbuj zrozumieć co się dzieje. A najlepiej, to napisz mniejszy program który robi tylko to, z czym masz problem -- łatwiej się debuguje wtedy. Jak już dojdziesz co jest źle, to poprawisz w dużym.

Link do komentarza
Share on other sites

zostawiłem 2 diody z kodu d4 i d3

doda┼éem zmienn─ů :

boolean stan;

w loop doda┼éem co┼Ť takiego:

stan = digitalRead(d4);

if (stan==true)

digitalWrite(d3,LOW);

ale nie wiem jak zrobić żeby wykonało się to tylko raz przy zmianie stanu z false na true

Link do komentarza
Share on other sites

A co Ty by┼Ť zrobi┼é gdyby┼Ť siedzia┼é przed ┼╝ar├│wk─ů i mia┼é za zadanie kr├│tko krzykn─ů─ç gdy zga┼Ťnie? Nie krzycze─ç ca┼éy czas gdy jest ciemno. Zastan├│w si─Ö przez chwil─Ö zanim odpowiesz.

Link do komentarza
Share on other sites

Nie u┼éatwiasz ­čÖé

dodam tylko ze ca┼éy kod dzia┼éa i to tak jak chce, mam tylko malutki problemik z kt├│rym mog─Ö sobie poradzi─ç 2 razy za┼é─ůczaj─ůc alarm ­čÖé

My┼Ťl─Ö ze jak pouk┼éadam wszystko w bloki i poopisuje to wielu pocz─ůtkuj─ůcych b─Ödzie mog┼éo czerpa─ç przyk┼éady blok├│w na ro┼╝ne dzia┼éania ­čÖé

Link do komentarza
Share on other sites

Wielu pocz─ůtkuj─ůcych ma w┼éa┼Ťnie ten problem, ┼╝e bezmy┼Ťlnie kopiuje i skleja kod innych ludzi nie rozumiej─ůc do ko┼äca jak on dzia┼éa ani nie maj─ůc dobrej idei na algorytm w┼éasnego programu. Pisz─ů szybciej ni┼╝ my┼Ťl─ů a my┼Ťl─ů, ┼╝e gdy w jednym miejscu kodu umieszcz─ů dwie p─Ötle: jedna mrugaj─ůca jedn─ů diodk─ů a druga mrugaj─ůca drug─ů, to b─Öd─ů mruga┼éy dwie.

Nie odpowiedzia┼ée┼Ť na pytanie. To nie by┼é ┼╝art. Prosisz o pomoc wi─Öc te┼╝ si─Ö troch─Ö wysil.

Link do komentarza
Share on other sites

No w┼éa┼Ťnie ca┼éy czas pr├│buje kr├│tko krzykn─ů─ç tylko nie wiem jak i nie wzi─ů┼éem tego za ┼╝art tylko nad tym pracuje ­čÖé

A co do przyk┼éad├│w to nie ka┼╝dy kopiuje, niekt├│rzy analizuj─ů i tak si─Ö dowiaduj─ů jak dzia┼éa jaka┼Ť funkcja ­čÖé

Link do komentarza
Share on other sites

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.