Vypsaní textu pouze jednou při stisknutém tlačítku

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od rejze69 » 28 črc 2018, 12:57

Použil jsem to tady

Kód: Vybrat vše

 void timeSwitch(){ //casovy spinac okruhu
  bool h12;
  bool PM;
  if ((unsigned long)(millis() - readingTswitch >= 61000)) { //cas 1min 1sec do dalsiho porovnani po shodě
  for(int i=1; i<4; i++) { //smycka pro vyhodnoceni casu sepnuti pro tri okruhy
    if(Clock.getHour(h12, PM)== EEPROM.read(20+i)&& Clock.getMinute()== EEPROM.read(30+i)
    && EEPROM.read(40+i)>0) { //pokud EEPROM.read = 0 okruh je vypnuty
      Ok[i] = true; //povoli sepnuti v nastaveny cas
      readingTswitch = millis(); //povoleni dalsiho porovnani   
    }
  }
  }
  if(Ok[1]==true && o[1]>1) { //paklize nadesel cas sepnuti okruhu1 a neuplynuly dny mezi zalivkami
      o[1]--; //odecti den
      Ok[1]=false; //zakaz zalivku
      if(o[1]==1 && OdlFlag==true){ //jestlize bylo nastaveno odlozeni a dny do zalivky dosahly 1
        Stop24(); //zavolej funkci odlozeni(zresetuje odlozeni do vychoziho stavu)
      }
  }
  if(Ok[2]==true && o[2]>1) { //paklize nadesel cas sepnuti okruhu a neuplynuly dny mezi zalivkami
      o[2]--; //odecti den
      Ok[2]=false; //zakaz zalivku
}
  if(Ok[3]==true && o[3]>1) { //paklize nadesel cas sepnuti okruhu a neuplynuly dny mezi zalivkami
      o[3]--; //odecti den
      Ok[3]=false; //zakaz zalivku
}
if(Ok[1]==true) { //Po predchozich porovnanich trva stav true
  digitalWrite(Okr1,HIGH); //Sepni zavlazovani okruhu 
   mPrev[1]=Clock.getMinute(); //ulozeni aktualni minuty
   m[1]=EEPROM.read(51); //Nacteni nastavene doby zalivky v minutach
   Ok[1]=false;          //vynulovani okruhu pro pristi cyklus
   o[1]=EEPROM.read(41);   //nacteni prednastavene frkvence dnu zalivky pro pristi cyklus
} 
if(digitalRead (Okr1)) {  //pokud je sepnuto rele okruhu 
   if (mPrev[1] != Clock.getMinute()) { //kdyz se neshoduji aktualni minuty s predchozimi,uplynula minuta
  m[1]--;                               //sniz pocet minut do konce zalivky
  mPrev[1]=Clock.getMinute();           //znovu uloz aktualni minutu pro dalsi porovnani
   }  
   if(m[1]<=0) {                        //kdyz dosahne pocet minut do konce zalivky nuly
   	digitalWrite(Okr1,LOW);             //Vypni rele (ukonci zalivku okruhu )
   }	
}
   
Důvod je ten, že původně testovanou proměnnou v okamžiku sepnutí nuluji a připravuji to na další cyklus.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů