duinozone.cz - Arduino a Raspberry fórum

Autor Téma: casovac  (Přečteno 389 krát)

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
casovac
« kdy: Červen 06, 2017, 22:19:42 odpoledne »
zdravim
mam dokonceny jeden projekt len neviem preco po vytiahnuti zo zasuvky a znova pripojeni sa nezopne rele  ak je vo faze zopnutia tj ak cas mam nastaveny ze sa zopne o 8:00 a vypne sa o 20:00 vypadok napajania a obnovenie  sa udeje v tomto casovom rozmedzi  sa mi nezapne rele naspet ale zopne sa az o 8:00 na druhy den.

Kód: [Vybrat]
if ((datumCas.hour() == c1_h_s) && (datumCas.minute() == c1_m_s)) {
    digitalWrite(rele1, LOW);
  } if ((datumCas.hour() == c1_h_e) && (datumCas.minute() == c1_m_e)) {
    digitalWrite(rele1, HIGH);
  }

neviete ako to vyriesit?
ak treba dam sem aj cely kod

Offline astromik

  • Pokročilý bastlíř
  • ***
  • Příspěvků: 116
Re:casovac
« Odpověď #1 kdy: Červen 07, 2017, 18:19:15 odpoledne »
Protože ta podmínka znamená, že se relé sepne právě jen v 8:00 a rozepne ve 20:00.
Když zapneš Arduino třeba v 16:30, tak se podmínka přeskočí, protože není ani 8:00, ani 20:00.


Já bych to řešil tak, že bych aktuální čas převedl z hodin a minut na minuty a pak bych testoval, jestli je aktuální čas v požadovaném intervalu pro sepnuté relé.
Zhruba nějak takhle:
Kód: [Vybrat]
aktualni_cas = 60 * datumCas.hour() + datumCas.minute() ;

cas_zapnuti =  8 * 60 + 0 ;  //  8:00
cas_vypnuti = 20 * 60 + 0 ;  // 20:00


if (aktualni_cas > cas_zapnuti && aktualni_cas < cas_vypnuti)
  {
    digitalWrite(rele1, LOW);   // rele sepne
  }
else
  {
     digitalWrite(rele1, HIGH); // rele rozepne
  }

Pokud by bylo třeba mít relé sepnuté v intervalu přes půlnoc (například od 21:00 do 3:00), tak by tohle nefungovalo. Muselo by se to trochu upravit.

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:casovac
« Odpověď #2 kdy: Červen 07, 2017, 23:14:23 odpoledne »
No skusim to tak ale tie hodnoty chcem nastavovat v menu na lcd cize budu menene. Ako v tomto pripade tam dostanem tie nastavene hodnoty?  Myslim ze cez polnoc to nebudem potrebovat nastavit .

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:casovac
« Odpověď #3 kdy: Červen 10, 2017, 08:54:37 dopoledne »
takze trochu som sa s tym pohral a vyzera to tak ze to funguje aj z nastavovanymi hodnotamy.
Dakujem

Offline seta1J

  • Bastlíř začátečník
  • *
  • Příspěvků: 8
Re:casovac
« Odpověď #4 kdy: Červenec 22, 2017, 13:00:30 odpoledne »
Jak bylo uvedeno  == je nevhodné. Ale nahradit > 8 a >20 by myslím mohlo stačit. Třeba jen další proměnnou, kterou nastavovat a teprve po proběhnutí podmínek přepsat na výstup.

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:casovac
« Odpověď #5 kdy: Červenec 25, 2017, 11:48:07 dopoledne »
Zdravim takze zase som nieco porobyl a teraz mam dalsiu dilemu, ako spravit casovac v menu lcd  kde si nastavim cas dajme tomu 10minut a spustim po 10 min utach rele vypne a ostane vypnute az po opetovne spustenie. teda ako nacitat aktualny cas do premennej po stlaceni tlacidla napr select?

Offline seta1J

  • Bastlíř začátečník
  • *
  • Příspěvků: 8
Re:casovac
« Odpověď #6 kdy: Červenec 25, 2017, 17:09:21 odpoledne »
Ahoj. Předpokládám, že v tomto případě moc o přesnost nepůjde. Takže bych použil millis().

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:casovac
« Odpověď #7 kdy: Červenec 31, 2017, 15:29:26 odpoledne »
Zdravím. Napíšem podrobnejšie čo potrebujem. Potrebujem to na závlahový počítač ako manuálne spustenie sekcii. Časovače ktoré sa spúštaju z RTC mam spravené funkčné 2 nezávislé nastavitelné časy a v každom čase si viem nastaviť ktorá sekcia ako dlho pôjde, idú pekne za sebou. Len netuším ako spraviť akoby manuálne spustenie bud to kvoli jednorázovému spusteniu alebo kvoli servisu keď sa zazimováva systém. Čiže potrebujem bud načítať aktuálny čas z RTC keď potvrdím časy sekcii, alebo nejaký interný časovač ktorý sa spusti keď potvrdím časy sekcii.

Offline seta1J

  • Bastlíř začátečník
  • *
  • Příspěvků: 8
Re:casovac
« Odpověď #8 kdy: Červenec 31, 2017, 17:20:49 odpoledne »
Zdravím. Zabývám se tímto také i když asi trochu jiným pohledem a zatím jen teoreticky. Uvažuji základní nastavení : časovač1=např.7200sec, časovač2=60sec., proměnná korekce=0.
Po uběhnutí časovače1 se zkontroluje vlhkost. Pak nastavou 3případy.
1/ je sucho = zaliji časovač2+korekce, korekce = korekce+30sec.
2/ je v mezích = nezalévám
3/ je mokro = nezalévám, korekce = korekce-30sec.
zapamatuji stav  korekce - teď ještě nevím jak přesně nabízí se EEPROM ale váhám.

Korekce nesmí být <-120 a >120
« Poslední změna: Červenec 31, 2017, 19:55:28 odpoledne od seta1J »