Tetőablak vezérlése (jegesedés, nyitás, zárás, vész-üzemmód)

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Tetőablak vezérlése (jegesedés, nyitás, zárás, vész-üzemmód)

Hozzászólás Szerző: McDeath »

Sziasztok!
Volna egy kisebb problémám, mégpedig hogy időzítést kellene feltételnek megadnom. Ezt csak for ciklussal tudnám megvalósítani?
A válaszokat előre is köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino tanfolyam

Hozzászólás Szerző: Robert »

Jobban le tudod írni (példával) a feladatot?
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Robert írta:Jobban le tudod írni (példával) a feladatot?
Szia!
Természetesen igen. építek a tetőablakomhoz egy elektronikát.Viszont a gombnyomást időkésleltetéssel kellene figyelni. Tehát ha lenyomom a gombot nem telik le az idő akkor megáll. Ha letelt az idő automatán folytatja a működést végállásig vagy fél állásig. Félállást csak nyitó irányban figyeltetek, a végállás pedig túláram figyelés lesz. Mivel extrákat is figyel így ez csak egy részprogram a teljes programban értelem szerűen.
void setup() {
pinMode(2, OUTPUT); //motor nyitó irány
pinMode(3, OUTPUT); //motor záró irány
pinMode(4, INPUT); //nyitás
pinMode(5, INPUT); //zárás
pinMode(6, INPUT); //ajtó nyomógomb, kulccsal aktiválva a zárást
pinMode(7, INPUT); //félállás
pinMode(8, INPUT); //jegesedésnél tiltás törlése
pinMode(9, INPUT); //végállás áramfigyelőtől
digitalWrite(2, LOW); //relé alap állapotban
digitalWrite(3, LOW); //relé alap állapotban
}
Ez lenne a beállítási rész. A programban az már világos hogy hogyan zárom ki a figyelést a jegesedés miatti nyitáshoz, túláram miatt leoldana az idő leteltével.
void loop () {
if (digitalRead(8) HIGH) {
if (digitalRead(4) HIGH) {
digitalWrite(2, HIGH);
}
else {
digitalWrite(2, LOW);
}
if (digitalRead(5) HIGH) {
digitalWrite(3, HIGH);
}
else {
digitalWrite(3, LOW);
}
}
Ez a rész a jégkapcsolóval működtetett rész. A többit még nem tudom hogyan de van egy elméletem erre persze nem programnyelven megírva.
if jegoldo low
if nyit high akkor //ha nyitó gomb teljesül akkor
nyitás high //nyitja az ablakot
if nyit high & delay finish akkor //előzővel párhuzamban indul
auto ++ //az időzítő ha az nem telt le
else nyitás low //akkor motor álj.
//ha letelt akkor auto +1
if auto>0 & ( nyit high or zar high ) //ha auto nagyobb mint 0 és
nyitás low //nyit vagy zár aktív akkor
auto-- //motor állj auto -1
if auto>0 & delay 1000 & ( felallas or vegallas ) //auto nagyobb nulla fél vagy
//végállás van időzítő letelt
nyitás low //akkor
auto-- //nyitás állj auto -1
if zar high akkor //ha nyitó gomb teljesül akkor
zaras high //nyitja az ablakot
if zar high & delay finish akkor //előzővel párhuzamban indul
auto ++ //az időzítő ha az nem telt le
else zaras low //akkor motor álj.
//ha letelt akkor auto +1
if auto>0 & ( nyit high or zar high ) //ha auto nagyobb mint 0 és
zaras low //nyit vagy zár aktív akkor
auto-- //motor állj auto -1
if auto>0 & delay 1000 & ( felallas or vegallas ) //auto nagyobb nulla fél vagy
//végállás van időzítő letelt
zaras low //akkor
auto-- //nyitás állj auto -1
Ezt követően még az is kérdés hogy amikor kulccsal bezárom az autót ott egy mikrokapcsolót működtetek (testre zárja a pint amire kötve van) ami elindítaná a zárási folyamatot. Viszont ez csak akkor kellene figyelembe vennie mikor aktiválva van máskülönben nem.
if kulcs low //ha kulcs aktív akkor
delay 1000 //vár 1 sec
if kulcs low //ha kulcs aktív
zaras high //zárjuk az ablakot
if kulcs high //ha kulcs inaktív
zaras low //zárás megáll
Eddig ennyit sikerült összeraknom elméletben. A segítségedet köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino tanfolyam

Hozzászólás Szerző: Robert »

A delay figyelés egyszerű:

Kód: Egész kijelölése

kesleltetesfute=0;
If kesleltetesinditasgomb nyomva = igen
  if gomb korabban meg nem volt nyomva, nem prelleg, stb, akkor
     kesleltetesvege=most+5000 (most: millis(), 5000: 5000msec)
     kesleltetesfut =1   
  end
end

ha gombnyomva=igenb && kesleltetesvege<millis() &&  kesleltetesfut==1, akkor
   ne itt jon a kesleltetett resz
   kesleltetetsfut=0 (ez azert van, nehogy meg 1x elinduljon)
endha


Tipp: egy belső valtozót beraknék, hogy épp melyik státuszban van a program. Nyit, jegesít, zár, késleltet, stb.
Ezt hívják állapotgépnek. Így mindig tudod, hogy melyik státuszban van épp a rendszered. És pesrsze státuszfüggő feltételt is egyszerűbb írni.
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Rendben! Köszönöm a segítséget. Megpróbálom megoldani. :D
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Szia!
Adódott még egy problémám így hirtelen. Van ugye a késleltetésem amikor is az ablak elindul lefelé akkor ahhoz az időhöz hozzáadok 2000-et így kaptam egy változót ami 2 sec-el későbbi időpont. Eddig király. Ha azt a feltételt adom meg hogy

Kód: Egész kijelölése

 if (digitalRead(5) HIGH && time==kesleltetes) {
akkor ez így rendben van?
A késleltetést később visszaállítom -1-es értékre mert ugye negatív idő biztosan nincs.(Ez így helyes elgondolás?)
A program elejében megtalálható a deklarálása az időnek "unsigneg long time" megoldással.
A választ előre is köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino tanfolyam

Hozzászólás Szerző: Robert »

Unsigned long hogyan lesz negatív érték????

Az IF nem jó:

Kód: Egész kijelölése

if ((digitalRead(5) == HIGH ) && (time==kesleltetes) && (millis()<vegido) {
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Robert írta:Unsigned long hogyan lesz negatív érték????

Az IF nem jó:

Kód: Egész kijelölése

if ((digitalRead(5) == HIGH ) && (time==kesleltetes) && (millis()<vegido) {
bocsánat, elírtam vagy félre lett értelmezve. Nem az unsgned long time lesz negatív érték hanem a késleltetést rakom negatív értébe így az sosem teljesül addig míg a beírás meg nem valósul. A time túlcsordulása 0-ra érkezteti a time változót.
Leírom a teljes eddigi programot inkább hogy ne legyen félreértés.

Kód: Egész kijelölése

unsigned long time;                              //jelenlegi idő
long kesleltetes=-1;                               //késleltetés változó
int state=0;                                     //státusz állapota
/*
státusz állapot:
0= alap állapot
1= jégoldás
2= automata mód
3= kulcsos zárás 
*/
void setup() {
    pinMode(2, OUTPUT);                           //motor nyit
    pinMode(3, OUTPUT);                           //motor zár
    pinMode(4, INPUT);                            //nyitó gomb
    pinMode(5, INPUT);                            //záró gomb
    pinMode(6, INPUT);                            //ajtó nyomógomb
    pinMode(7, INPUT);                            //félállás nyomógomb
    pinMode(8, INPUT);                            //jegesedésnél tiltás törlése, jégoldó nyomógomb
    digitalWrite(2, LOW);                         //relé alap állapotban
    digitalWrite(3, LOW);                         //relé alap állapotban
}
void loop () {
  if (digitalRead (8) HIGH && state==0) {         //jégoldó gomb aktív
    delay 2;                                      //prell kivédése
    if (digitalRead (8) HIGH && state==0) {       //jégoldó gomb még mindig aktív
      state=1;                                    //státusz váltás, jégoldó aktív 
    }
  }
  if (digitalRead (8) LOW && state==1) {          //jégoldó gomb inaktív
    delay 2;                                      //prell kivédése
    if (digitalRead (8) LOW && state==1) {        //jégoldó gomb még mindig inaktív
      state=0;                                    //státusz váltás, alap állapot.
    }
  }
  if (digitalRead(4) HIGH && state==1) {          //nyitó gomb aktív és jégoldó státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(4) HIGH && state==1) {       //nyitó gomb még mindig aktív és még jégoldó státusz van
       digitalWrite(2, HIGH);                     //motor nyitás aktív
     }
  }
  if (digitalRead(4) LOW && state==1) {           //nyitó gomb inaktív és jégoldó státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(4) LOW && state==1) {         //nyitó gomb még mindig inaktív és még jégoldó státusz van
      digitalWrite(2, LOW);                       //motor nyitás inaktív
    }
  }
  if (digitalRead(5) HIGH && state==1) {          //záró gomb aktív és jégoldó státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(5) HIGH && state==1) {       //záró gomb még mindig aktív és még jégoldó státusz van
       digitalWrite(3, HIGH);                     //motor nyitás aktív
     }
  }
  if (digitalRead(5) LOW && state==1) {           //záró gomb inaktív és jégoldó státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(5) LOW && state==1) {         //záró gomb még mindig inaktív és még jégoldó státusz van
      digitalWrite(3, LOW);                       //motor zárás inaktív
    }
  }
  if (digitalRead(4) HIGH && state==0) {          //nyitó gomb aktív és alap státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(4) HIGH && state==0) {       //nyitó gomb még mindig aktív és még alap státusz van
       digitalWrite(2, HIGH);                     //motor nyitás aktív
       time+2000=kesleltetes                      //most+2sec=késleltetés
     }
  }
  if (digitalRead(4) LOW && state==0) {           //nyitó gomb inaktív és alap státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(4) LOW && state==0) {         //nyitó gomb még mindig inaktív és még alap státusz van
      digitalWrite(2, LOW);                       //motor nyitás inaktív
      kesleltetes=-1                                  //késleltetés alap állapotban
    }
  }
  if (digitalRead(5) HIGH && state==0) {          //záró gomb aktív és alap státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(5) HIGH && state==0) {       //záró gomb még mindig aktív és még alap státusz van
       digitalWrite(3, HIGH);                     //motor nyitás aktív
       time+2000=kesleltetes                      //most+2sec=késleltetés
     }
  }
  if (digitalRead(5) LOW && state==0) {           //záró gomb inaktív és alap státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(5) LOW && state==0) {         //záró gomb még mindig inaktív és még alap státusz van
      digitalWrite(3, LOW);                       //motor zárás inaktív
      kesleltetes=-1                                  //késleltetés alap állapotban
    }
  }
  if (digitalRead(5) HIGH && time==kesleltetes) {          //záró gomb aktív és alap státusz van
     state=2
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino tanfolyam

Hozzászólás Szerző: Robert »

Hiba!
Sorosporton irasd ki:
kesleltetes=-1

Az unsigned long értéke:
0...sokig megy.
Most mit lehet egy negatív (_TARTOMÁNYON KÍVÜLI_) értékkel kezdeni?
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Robert írta:Hiba!
Sorosporton irasd ki:
kesleltetes=-1
Tehát egy long típusú változó nem lehet -1 értékű.
Egyébként a kód vége előbb lemaradt így azt pótolom. Itt még a kommentezés nincs meg.

Kód: Egész kijelölése

unsigned long time;                              //jelenlegi idő
long kesleltetes=-1;                               //késleltetés változó
int state=0;                                     //státusz állapota
/*
státusz állapot:
0= alap állapot
1= jégoldás
2= automata mód nyitás
3= automata mód zárás
4= kulcsos zárás 
*/
void setup() {
    pinMode(2, OUTPUT);                           //motor nyit
    pinMode(3, OUTPUT);                           //motor zár
    pinMode(4, INPUT);                            //nyitó gomb
    pinMode(5, INPUT);                            //záró gomb
    pinMode(6, INPUT);                            //ajtó nyomógomb
    pinMode(7, INPUT);                            //félállás nyomógomb
    pinMode(8, INPUT);                            //jegesedésnél tiltás törlése, jégoldó nyomógomb
    pinMode(9, INPUT);                            //túláram figyelő
    digitalWrite(2, LOW);                         //relé alap állapotban
    digitalWrite(3, LOW);                         //relé alap állapotban
}
void loop () {
  if (digitalRead (8) HIGH && state==0) {         //jégoldó gomb aktív
    delay 2;                                      //prell kivédése
    if (digitalRead (8) HIGH && state==0) {       //jégoldó gomb még mindig aktív
      state=1;                                    //státusz váltás, jégoldó aktív 
    }
  }
  if (digitalRead (8) LOW && state==1) {          //jégoldó gomb inaktív
    delay 2;                                      //prell kivédése
    if (digitalRead (8) LOW && state==1) {        //jégoldó gomb még mindig inaktív
      state=0;                                    //státusz váltás, alap állapot.
    }
  }
  if (digitalRead(4) HIGH && state==1) {          //nyitó gomb aktív és jégoldó státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(4) HIGH && state==1) {       //nyitó gomb még mindig aktív és még jégoldó státusz van
       digitalWrite(2, HIGH);                     //motor nyitás aktív
     }
  }
  if (digitalRead(4) LOW && state==1) {           //nyitó gomb inaktív és jégoldó státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(4) LOW && state==1) {         //nyitó gomb még mindig inaktív és még jégoldó státusz van
      digitalWrite(2, LOW);                       //motor nyitás inaktív
    }
  }
  if (digitalRead(5) HIGH && state==1) {          //záró gomb aktív és jégoldó státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(5) HIGH && state==1) {       //záró gomb még mindig aktív és még jégoldó státusz van
       digitalWrite(3, HIGH);                     //motor nyitás aktív
     }
  }
  if (digitalRead(5) LOW && state==1) {           //záró gomb inaktív és jégoldó státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(5) LOW && state==1) {         //záró gomb még mindig inaktív és még jégoldó státusz van
      digitalWrite(3, LOW);                       //motor zárás inaktív
    }
  }
  if (digitalRead(4) HIGH && state==0) {          //nyitó gomb aktív és alap státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(4) HIGH && state==0) {       //nyitó gomb még mindig aktív és még alap státusz van
       digitalWrite(2, HIGH);                     //motor nyitás aktív
       time+2000=kesleltetes                      //most+2sec=késleltetés
     }
  }
  if (digitalRead(4) LOW && state==0) {           //nyitó gomb inaktív és alap státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(4) LOW && state==0) {         //nyitó gomb még mindig inaktív és még alap státusz van
      digitalWrite(2, LOW);                       //motor nyitás inaktív
      kesleltetes=-1                              //késleltetés alap állapotra
    }
  }
  if (digitalRead(5) HIGH && state==0) {          //záró gomb aktív és alap státusz van
     delay 2;                                     //prell kivédése
     if (digitalRead(5) HIGH && state==0) {       //záró gomb még mindig aktív és még alap státusz van
       digitalWrite(3, HIGH);                     //motor nyitás aktív
       time+2000=kesleltetes                      //most+2sec=késleltetés
     }
  }
  if (digitalRead(5) LOW && state==0) {           //záró gomb inaktív és alap státusz van
    delay 2;                                      //prell kivédése
    if (digitalRead(5) LOW && state==0) {         //záró gomb még mindig inaktív és még alap státusz van
      digitalWrite(3, LOW);                       //motor zárás inaktív
      kesleltetes=-1                              //késleltetés alap állapotra
    }
  }
  if (digitalRead(5) HIGH && time==kesleltetes) {          //záró gomb aktív és alap státusz van
     state=3;
  }
  if (digitalRead(4) HIGH && time==kesleltetes) {
    state=2;
  }
  if (state==2 && (digitalRead(7) HIGH || digitalRead(9) HIGH) {
    digitalWrite (2, LOW);
    digitalWrite (3, LOW);
    state=0;
    kesleltetes=-1;
  }
  if (state==3 && digitalRead(9) HIGH) {
    digitalWrite (2, LOW);
    digitalWrite (3, LOW);
    state=0;
    kesleltetes=-1;
  }
}
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Kiírattam soros portra a változómat. -1-et ír. Egyébként kiröhögni ér, mert ha megnézed az if-ek után ahol van ÉS/VAGY kapcsolat a zárójelek lemaradtak továbbá a digitalRead (pin) == HIGH/LOW kimaradt mindenhonnan az egyenlőség jel. 8O :mrgreen: javítás alatt és kommentek megírása. Ha a javítások készen vannak akkor elméletileg még van egy szakaszom aztán kész a program. Kivéve ha nem jól csináltam azt hogy a "long kesleltetes=-1" alapértéke. A cél a nulla értéket elkerülni hogy ne szóljon közbe még véletlenül sem a "unsigned long time" változó 0-ra fordulásakor. Így jó az elmélet, vagy bukta és írhatom át az egészet? :|
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino tanfolyam

Hozzászólás Szerző: Robert »

long-ként definiáltad. Ekkor van -1 értéke. Unsigned longként nincs.
DE, a millis() összehasonlításban eltérő típusokat nem illik használni (long <>ULong, ill byte <> integer, stb). Egzotikus hibák lesznek....
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Robert írta:long-ként definiáltad. Ekkor van -1 értéke. Unsigned longként nincs.
DE, a millis() összehasonlításban eltérő típusokat nem illik használni (long <>ULong, ill byte <> integer, stb). Egzotikus hibák lesznek....
Igazad van. Nem szerencsés. Így már értem miért "értetted félre", valójában én vagyok tudatlan. :mrgreen: Most már értem, javítom. Valamint a kód javítása után megkérlek hogy majd nézd át. A fordító nem talált benne hibát már. Letesztelni sajnos most már nincs időm majd az holnap délután lesz összehajítva. Ha működik akkor féltve őrzött arany lesz számomra. :mrgreen:
Köszönöm a segítségedet. :D
U.I. Hogyan illetve hol érdemes definiálni a "most"-ot? ez a jelenlegi idő és ehhez fog majd ugye hozzájönni a késleltetés.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino tanfolyam

Hozzászólás Szerző: Robert »

A most az mint idő meg van. millis() függvény adja meg.
Bekapcsolás óta eltelt idő (msecben)


A 60 napos tanfolyásban az elejefelé van már róla szó!
McDeath
Újonc
Újonc
Hozzászólások: 10
Csatlakozott: 2015. június 3. szerda, 10:22

Re: Arduino tanfolyam

Hozzászólás Szerző: McDeath »

Robert írta:A most az mint idő meg van. millis() függvény adja meg.
Bekapcsolás óta eltelt idő (msecben)


A 60 napos tanfolyásban az elejefelé van már róla szó!
meg is van :) rendben köszönöm a többivel boldogulok :)
azért még a programot mellékelem, 89 92 sorban lesz alulról nem sokkal.

Kód: Egész kijelölése

unsigned long time;                              //jelenlegi idő
unsigned long kesleltetes;                       //késleltetés változó
int state=0;                                     //státusz állapota
/*
státusz állapot:
0= alap állapot
1= jégoldás
2= automata mód nyitás
3= automata mód zárás
4= kulcsos zárás 
*/
void setup() {
    pinMode(2, OUTPUT);                           //motor nyit
    pinMode(3, OUTPUT);                           //motor zár
    pinMode(4, INPUT);                            //nyitó gomb
    pinMode(5, INPUT);                            //záró gomb
    pinMode(6, INPUT);                            //ajtó nyomógomb
    pinMode(7, INPUT);                            //félállás nyomógomb
    pinMode(8, INPUT);                            //jegesedésnél tiltás törlése, jégoldó nyomógomb
    pinMode(9, INPUT);                            //túláram figyelő
    digitalWrite(2, LOW);                         //relé alap állapotban
    digitalWrite(3, LOW);                         //relé alap állapotban
}
void loop() {
  if ((digitalRead(8) == HIGH)&& (state==0)) {         //jégoldó gomb aktív
    delay (2) ;                                      //prell kivédése
    if ((digitalRead(8) == HIGH)&& (state==0)) {       //jégoldó gomb még mindig aktív
      state=1;                                    //státusz váltás, jégoldó aktív 
    }
  }
  if (digitalRead (8) == LOW && state==1) {          //jégoldó gomb inaktív
    delay (2) ;                                      //prell kivédése
    if (digitalRead (8) == LOW && state==1) {        //jégoldó gomb még mindig inaktív
      state=0 ;                                    //státusz váltás, alap állapot.
    }
  }
  if (digitalRead(4) == HIGH && state==1) {          //nyitó gomb aktív és jégoldó státusz van
     delay (2) ;                                     //prell kivédése
     if (digitalRead(4) == HIGH && state==1) {       //nyitó gomb még mindig aktív és még jégoldó státusz van
       digitalWrite(2, HIGH);                     //motor nyitás aktív
     }
  }
  if (digitalRead(4) == LOW && state==1) {           //nyitó gomb inaktív és jégoldó státusz van
    delay (2) ;                                      //prell kivédése
    if (digitalRead(4) == LOW && state==1) {         //nyitó gomb még mindig inaktív és még jégoldó státusz van
      digitalWrite(2, LOW);                       //motor nyitás inaktív
    }
  }
  if ((digitalRead(5) == HIGH) && (state==1)) {          //záró gomb aktív és jégoldó státusz van
     delay (2);                                     //prell kivédése
     if ((digitalRead(5) == HIGH) && (state==1)) {       //záró gomb még mindig aktív és még jégoldó státusz van
       digitalWrite(3, HIGH);                     //motor nyitás aktív
     }
  }
  if ((digitalRead(5) == LOW) && (state==1)) {           //záró gomb inaktív és jégoldó státusz van
    delay (2);                                      //prell kivédése
    if ((digitalRead(5) == LOW) && (state==1)) {         //záró gomb még mindig inaktív és még jégoldó státusz van
      digitalWrite(3, LOW);                       //motor zárás inaktív
    }
  }
  if ((digitalRead(4) == HIGH) && (state==0)) {          //nyitó gomb aktív és alap státusz van
     delay (2);                                     //prell kivédése
     if ((digitalRead(4)== HIGH) && (state==0)) {       //nyitó gomb még mindig aktív és még alap státusz van
       digitalWrite(2, HIGH);                     //motor nyitás aktív
       kesleltetes=time+2000;                      //most+2sec=késleltetés
     }
  }
  if ((digitalRead(4) == LOW) && (state==0)) {           //nyitó gomb inaktív és alap státusz van
    delay (2);                                      //prell kivédése
    if ((digitalRead(4) == LOW) && (state==0)) {         //nyitó gomb még mindig inaktív és még alap státusz van
      digitalWrite(2, LOW);                       //motor nyitás inaktív
      kesleltetes=0;                              //késleltetés alap állapotra
    }
  }
  if ((digitalRead(5) == HIGH) && (state==0)) {          //záró gomb aktív és alap státusz van
     delay (2);                                     //prell kivédése
     if ((digitalRead(5) == HIGH) && (state==0)) {       //záró gomb még mindig aktív és még alap státusz van
       digitalWrite(3, HIGH);                     //motor nyitás aktív
       kesleltetes=time+2000;                      //most+2sec=késleltetés
     }
  }
  if ((digitalRead(5) == LOW) && (state==0)) {           //záró gomb inaktív és alap státusz van
    delay (2);                                      //prell kivédése
    if ((digitalRead(5) == LOW) && (state==0)) {         //záró gomb még mindig inaktív és még alap státusz van
      digitalWrite(3, LOW);                       //motor zárás inaktív
      kesleltetes=0;                                             //késleltetés alap állapotra
    }
  }
  if ((digitalRead(5) == HIGH ) && (time==kesleltetes) && (millis()<4294967295)) { //záró gomb aktív és az idő megegyezik a késleltetett idővel  
     state=3;                                                    //automata mód zárás státusz
  }
  if ((digitalRead(4) == HIGH ) && (time==kesleltetes) && (millis()<4294967295)) { //nyitó gomb aktív és az idő megegyezik a késleltetett idővel
    state=2;                                                     //automata mód nyitás státusz
  }
  if ((state==2) && ((digitalRead(7) == HIGH) || (digitalRead(9) == HIGH))) { //nyitó státusz és (félállás vagy túláram) van
      digitalWrite (2, LOW);                                                  //nyitás lekapcsolás
    digitalWrite (3, LOW);                                                    //zárás lekapcsolás
    state=0;                                                                  //státuszjelző alap helyzet
    kesleltetes=0;                                                            //késleltetés alap helyzet
  }
  if ((state==3) && (digitalRead(9) == HIGH)) {                               //záró státusz és túláram van 
    digitalWrite (2, LOW);                                                    //nyitás lekapcsolás
    digitalWrite (3, LOW);                                                    //zárás lekapcsolás
    state=0;                                                                  //státuszjelző alap helyzet
    kesleltetes=0;                                                            //késleltetés alap helyzet
  }
}

A végidő automatikusan definiált vagy azt is meg kell adni? (kiszámoltam és beraktam mert csak ott annál a két pontnál van szükség rá. :)
Válasz küldése