duinozone.cz - Arduino a Raspberry fórum

Autor Téma: problem z delay  (Přečteno 2919 krát)

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #15 kdy: Leden 01, 2017, 20:59:10 odpoledne »
Super zacinam tomu trochu rozumiet. Ako dam teraz napríklad na svetelny senzor oneskorenie  alebo nejaku nahradu za delay aby nezastavilo cely procesor?  kvôli pripadnym bleskom alebo comu aby tam nevznikalo sekundove cvakanie?

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #16 kdy: Leden 01, 2017, 21:07:38 odpoledne »
nechápu ...

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #17 kdy: Leden 01, 2017, 21:38:57 odpoledne »
Proste ak dojde k tomu ze podmienka pre navrat do pôvodného stavu je splnena tak aby rele k nej priradene ostalo napr este 1 min zopnute.

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #18 kdy: Leden 01, 2017, 22:45:17 odpoledne »
no jsou 3 varianty:
1. použiješ nějáké drobné zpoždění (100ms) v každé smyčce. Pri aktivaci alarmu nastavis nejakou promenou "dobeh" na 60x10 (kolik smycek má projit nez skonci alarm). Pri každem ohlaseni alarmu nastavis promennou na 600. Při každé smyčce kdy je "dobeh" > 0 odečteš 1.
Když bude "dobeh" > 0 pak sepni alarm, jinak vypni alarm.
2. pouzije3 funkci millis() pod9vej se do exampů arduina v Basic bude blink whitout delay. tam je to hezky popsane. Použiješ prostě strojový čas procesoru a řekneš mu, kdy má přestat alarm. Jinak budeš ten čas posouvat.
3. použiješ přerušení. Vezmeš si nějáký interní časovač (timer 1) a když je aktivní alarm tak vyresetuješ časovač (nastavýš ho podobně jako na 1. variantě). až dojede nastavený čas, tak přerušení si zavolá něáký podprogram a ten vypne alarm.

Mimo SW je tu ještě HW řešení. Co kdybys nezdržoval procesor a to zpoždění si udělal na sireně:
http://mujweb.cz/masinky2003/casovy_spinac.html

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #19 kdy: Leden 10, 2017, 11:08:36 dopoledne »
nazdar
tak som si nehal myslienky a vsetko prelezat v hlave

robym si na leto do bazenu taky maly pocitac  co bude riadit cerpadlo a ventil od solaru na zaklade teplot.

zatial sa mi podarilo svetko urobyt podla predtsav no zatial nameisto dallas teplotných senzorou mam iba termistory no ale to potom.

problem mam z motorom a z koncovými spinacmi. niako to neviem spravit. malo by to fungobat tak ze ked sa zvysi teplota na solare nad nadstavenu teplotu tak ma aktivovat motor teda v jednom pripade bude aktivovane rele 1, rele 2, a rele motor on, a bude zopnute az kym nedojde paka motora a nestlaci jeden zo sw. potom sa deaktivuje rele motor on. V druhom pripade tiez bude cakat na teplotu ale zase nizsiu  alo je nadstavena a budu rele1, rele2 deaktivovane ale znova sa aktivuje motor on cize pojde druhym smerom a zase caka kym nestlaci jeden zo sw



Kód: [Vybrat]
#include <LiquidCrystal.h>            //kniznica LCD

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);  //LCD pini komunikacia

#define LCDled 8                      //LCD LED podsvietenie displeja pin 8
#define MotorRELE1 9
#define MotorRELE2 10
#define MotorON 11
#define Cerpadlo 12

int TeplotaBazena = A3;
int TeplotaSolar = A4;
int VentilONsw = A1;
int VentilOFFsw = A2;


void setup() {
 
  pinMode(LCDled, OUTPUT);
  pinMode(VentilONsw, INPUT);
  pinMode(VentilOFFsw, INPUT);
  pinMode(MotorRELE1, OUTPUT);
  pinMode(MotorRELE2, OUTPUT);
  pinMode(MotorON, OUTPUT);
  pinMode(Cerpadlo, OUTPUT);

  digitalWrite(Cerpadlo, HIGH);
  digitalWrite(MotorRELE1, HIGH);
  digitalWrite(MotorRELE2, HIGH);
  digitalWrite(MotorON, HIGH);
 
  digitalWrite(LCDled, HIGH);
  lcd.begin(16, 2);
  lcd.print(" Pool controll");
  lcd.setCursor(0, 1);
  lcd.print(" solar system");
  delay(5000);
  lcd.clear();
}

void LCD() {
  lcd.setCursor(0, 0);
  lcd.print("cp=");
  lcd.setCursor(8, 0);
  lcd.print("vt=");
  lcd.setCursor(0, 1);
  lcd.print("tB=   C");
  lcd.setCursor(8, 1);
  lcd.print("tS=   C");
}

void ventilSolar() { 
  digitalWrite(MotorRELE1, HIGH);
  digitalWrite(MotorRELE2, HIGH);

}

void ventilFilter() {
  int VentilOFF = analogRead(VentilOFFsw);        //tu je problem z tym motorom na ventil
 
  digitalWrite(MotorRELE1, LOW);
  digitalWrite(MotorRELE2, LOW);
  digitalWrite(Cerpadlo, LOW);

    if(VentilOFF == 0) {                        //
    digitalWrite(MotorON, LOW);
  } else if(VentilOFF == 1) {
    digitalWrite(MotorON, HIGH);
  }
}

void loop() {
  LCD();
//------------------inicializacia--------------------------
  int MeranaTeplota1 = analogRead(TeplotaBazena);
  int MeranaTeplota2 = analogRead(TeplotaSolar);
//-------------------teplotne senzory---------------------- 
  lcd.setCursor(3, 1);
  lcd.print(MeranaTeplota1);
 
  lcd.setCursor(11, 1);
  lcd.print(MeranaTeplota2);
//-------------------teplota bazen--------------------------
  if(MeranaTeplota1 > 330 ) {
    digitalWrite(Cerpadlo, LOW);
    lcd.setCursor(3, 0);
    lcd.print("on ");
  } 
  if(MeranaTeplota1 < 320 ) {
    digitalWrite(Cerpadlo, HIGH);
    lcd.setCursor(3, 0);
    lcd.print("off");
  }
//------------teplota slolarny panel / ventil-----------------
  if(MeranaTeplota2 > 330 ){
    ventilFilter();
    lcd.setCursor(3, 0);
    lcd.print("on ");
    lcd.setCursor(11, 0);
    lcd.print("solar");
  }
  if(MeranaTeplota2 < 320 ){
    ventilSolar();
    lcd.setCursor(11, 0);
    lcd.print("filt ");
  }

  delay(250);
}

a tiez este neviem ako budem nadstavovat teploty ale to zatial´nebudem rierit najsko musim mat tie senzory teploty.

a neviem sem pridat obrazok by som sem dal aj schemu toho motora z rele .
« Poslední změna: Leden 22, 2017, 18:37:24 odpoledne od Yenda »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #20 kdy: Leden 10, 2017, 12:59:42 odpoledne »
je treba zjistit zapojeni toho ventilu a jeho kocaku. vetsinou je ventil jako servopohon s 3 bodovym rizenim takze stredni vodic a pak 2 vodice jedim pridavas druhyn uberes. koncaky jsou pro nastaveni koncovych poloh a funguji tak ze se pres ne natahnou ty dva ovladaci vodice. pak je regulace jednoducha. chces otevrit ventil das prikaz otevri a drzis ho po dobu pozadavku na otevreni. servo zacne otevirat ventil dojede na koncak prerusi tento napajeni pro tento smer a servo zustane otevrene. chces zavrit tak vypnes rele pro otevreno a zapnes rele pro zavreni serva to zacne zavirat az dojede na koncak ten rozpoji napajeni pro tento smer a je zavreno. musis mu hlavne ty stavy drzet min.tu dobu co mu trva cela jedna cesta treba 90s. z toho ti pak vyplyne ze i to mereni a cele reseni je zbytecne delat extremne rychle. staci ti reakcni casy okolo 5-10s. pokud to mas takto resene jak jsem psal v zacatku tohoto mailu tak ti doslo ze se vse muze zjednodusit na 1 rele prepinajici smer 1 rele na cerpadlo a 1 rele na uv. kdyztak me prosim oprav jak to mas ty resene...

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #21 kdy: Leden 13, 2017, 12:06:34 odpoledne »
no trochu som to poupravoval bude tam ovladanie ventilu z 3mi vodicmi takze staci 1 rele  8)

chcel by som to doplnit o casovac iba denny plaan max 2 spinacie casi. potrebujem k tym hodinam aj nejaky hardware?
pripadne nejaky jednoduchy kod na taketo nieco nemas? ovladanie z 3 tlacitkami  a aby som vedel menit hodnotu teploty v bazene.  toto co som spravil funguje bezproblemovo. nizsie je kod co sa mi podarilo poskladat  :)

dakujem za odpovede

Kód: [Vybrat]
#include <LiquidCrystal.h>            //kniznica LCD

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);  //LCD pini komunikacia

#define Cerpadlo 10
#define Ventil 11
#define SERIESRESISTOR 26
#define TeplotaBazen A1
#define TeplotaSolar A2


int LCDled = 9;
int fotorezistor = A0;
int inputValue = 0;

void setup() {
  //-----------------nadstavenie pinou-----------
  pinMode(LCDled, OUTPUT);
  pinMode(Cerpadlo, OUTPUT);
  pinMode(Ventil, OUTPUT);
  //------------------nulovanie rele---------------
  digitalWrite(Cerpadlo, HIGH);
  digitalWrite(Ventil, HIGH);
  //-------------------uvodna obrazovka------------
  lcd.begin(16, 2);
  digitalWrite(LCDled, HIGH);
  lcd.setCursor(0, 0);
  lcd.print(" Pool controll");
  lcd.setCursor(0, 1);
  lcd.print(" solar system");
  delay(5000);
  lcd.clear();
}
  //------------nadtavenie textou obrazovky-------
void LCD1() {
  lcd.setCursor(0, 0);
  lcd.print("CP=");
  lcd.setCursor(8, 0);
  lcd.print("VT=");
  lcd.setCursor(0, 1);
  lcd.print("tB=");
  lcd.setCursor(8, 1);
  lcd.print("tS=");
}


void loop() {

  inputValue = analogRead(fotorezistor);      //PWM stmievanie podsvietenia obrazovky
  analogWrite(LCDled, inputValue/4 );         //PWM

  LCD1();
 
  float Bazen;
  float Solar;
//------------------inicializacia--------------------------
  Bazen = analogRead(TeplotaBazen);
  Solar = analogRead(TeplotaSolar);
//-------------------teplotne senzory---------------------- 
  Bazen = (1023 / Bazen) - 1;
  Bazen = SERIESRESISTOR / Bazen;
  lcd.setCursor(3, 1);
  lcd.print(Bazen);

  Solar = (1023 / Solar) - 1;
  Solar = SERIESRESISTOR / Solar;
  lcd.setCursor(11, 1);
  lcd.print(Solar);

//------------teplota porovnavanie -----------------
  if((Solar > Bazen + 3) && (Bazen < 27 )){     //ak je na solare o 3 stupne vyzsia teplota a v bazene menej ako 27 stupnou cerpadlo sa zapne a ventil sa prepne na solar
    digitalWrite(Cerpadlo, LOW);
    digitalWrite(Ventil, LOW);
    lcd.setCursor(3, 0);
    lcd.print("on ");
    lcd.setCursor(11, 0);
    lcd.print("solar");
  } else if(Bazen > 28){                        //ak je v bazene viac ako 28 stupnou ventil sa prepne na filtraciu a cerpadlo sa vypne
      digitalWrite(Cerpadlo, HIGH);
      digitalWrite(Ventil, HIGH);
      lcd.setCursor(3, 0);
      lcd.print("off");
      lcd.setCursor(11, 0);
      lcd.print("filt ");
  } else if(Solar < Bazen + 1){                 //ak je na solare menej ako o 1stupen ako je v bazene ventil sa prepne na filtraciu a cerpadlo sa vypne
      digitalWrite(Cerpadlo, HIGH);
      digitalWrite(Ventil, HIGH);
      lcd.setCursor(3, 0);
      lcd.print("off");
      lcd.setCursor(11, 0);
      lcd.print("filt ");
  }
  if
  delay(500);
}

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #22 kdy: Leden 13, 2017, 20:50:16 odpoledne »
je zvlastni ze nakonec se clovek vzdy dostane na otazku menu. menu neni slozite ale vetsinou trochu kostrbate. je opravdu otazka co po nem chces. to ci jsi psal tedy 2 casovase a nast teplot neni vse. k tomu musis dat i nastaveni hodin a aby to melo smysl tak i rtc modul pro rizeni casu (modul ma vlastni hodiny ktere jedou na baterii i pri vypnuti napajeni tim neztrati prehled o case). teploty bych radsi resil nastavenim pomoci trimru - jednoduche jak pro nastaveni tak i pro udrzeni hodnoty a i kod bude primitivni. cas by tak snadno nesel. najdes na webu tutorialy buduku ale poradny casovac abys pohledal. ja se do nej poustim u 2 roky a neni cas. zkus vyhledat "arduino menu" ja jsem parkrat pouzil jednu knihovnu a mam tutorial s popisem na posjirka.pise.cz   v posledni dobe jsem ale narazil na arduino liquid menu a jeste ji poradne nezkousel. navic casovac uz dlouho slibuju pri jineho bastlire na tomto foru a porad se do toho nemuzu dokopat resp. neni cas ....

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #23 kdy: Leden 14, 2017, 22:55:40 odpoledne »
hladal som po googli no nejako tomu nedokazem porozumiet a dost je aj takych kodou co nefunguju.  :-\
4 tlacitka   +,  -,  enter,  esc
menu si predstavujem takto nejako

ak sa nic nestlaci by som tam chcel mat obrazovku co tam uz mam natukanu co zobrazuje aktualne teploty , stav ventilu a cerpadlo

menu
hodiny
         hodiny
         hh.mm.ss
menu
teplota
        teplota
        tt.t°C      bazen
menu
casovac
        casovac 1 on
        hh.mm.ss
 
        casovac 2 off
        hh.mm.ss

        casovac 2 on
        hh.mm.ss

        casovac 2 off
        hh.mm.ss



dokazes mi z tym prosim nejako pomoct?

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #24 kdy: Leden 26, 2017, 17:55:38 odpoledne »
zdravim takze z menu mi nikto nepomoze?  :-\

inak daju sa z millis spravit viacero casovacou v programe? nejako na to neviem prist  :(

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #25 kdy: Leden 26, 2017, 20:37:05 odpoledne »
ahoj radoslave, bohužel trochu nestíhám.menu pro nastavení hodin už plánuju dlouhou a pořád se n to nemůžu dostat...

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #26 kdy: Únor 01, 2017, 23:01:24 odpoledne »
tak jsem se konečně dostal na to vytvořit nastavovaci menu. Je to hodně roztáhle pro lepší orientaci. Normálně bych dal načítání tlačítek ve symčce časovače po 150 ms mimo hlavní program.Tady je ještě pokupě. Podívej se na to a myslím, že je to vcelkupochopitelné:
Kód: [Vybrat]
// lcd_keypad v01
// minimalni program
// by j.pospisil 2017
//-------------------
// OVLADANI:
// SIPKY NAHORU/DOLU - POHYB V ZÁKLADNÍCH OBRAZOKÁCH MENU
// SELECT - VSTUP DO PODMENU
// SIPKY VLEVO/VPRAVO - ZMĚNA HODNOTY


#include <LiquidCrystal.h>     // knihovna LCD - standard Arduino IDE
#include <Wire.h> // knihovna pro I2C - standardni Arduino IDE
#include "RTClib.h" // knihovna pro RTC modul http://navody.arduino-shop.cz/docs/texty/0/7/rtclib.zip

// konstanty
#define NONE 0
#define SELECT 1
#define LEFT 2
#define DOWN 3
#define UP 4
#define RIGHT 5

// promenne
int screen = 0; // cislo obrazovky
int curs_x = 0; // souradnice x kurzoru
int curs_y = 0; // souradnice y kurzoru
// casovace
int c1_h_s = 0; // casovac 1, hodina, start
int c1_m_s = 0; // casovac 1, minuta, start
int c1_h_c = 0; // casovac 1, hodina, cil
int c1_m_c = 0; // casovac 1, minuta, cil

int c2_h_s = 0; // casovac 2, hodina, start
int c2_m_s = 0; // casovac 2, minuta, start
int c2_h_c = 0; // casovac 2, hodina, cil
int c2_m_c = 0; // casovac 2, minuta, cil

int teplota_bazenu = 0; // promenna pro hodnotu teploty bazenu
int obnova_lcd = 0; // pocet smycek na obnovu LCD

// piny kde je pripojen LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// instance RTC
RTC_DS1307 DS1307;
DateTime datumCas;

void setup(){
  lcd.begin(16, 2);              // velikost LCD
  lcd.blink();                   // povoleni blikani kurzoru pro zvyrazneni editove hodnoty
  DS1307.begin();
}

void loop(){
  // nacteni casu z RTC
  datumCas = DS1307.now();
  // reakce na tlacitka
  switch (screen) {
    case 0:{ // 0 - UVODNI OBRAZOVKA
      switch (readButton()){
        case UP: {
          screen ++; // JDI DO MENU
          break;
        }
      }
      break;
    }
    case 1:{ // 1 - NASTAVENI HODIN
      switch (readButton()){
        case UP: {
          screen ++;
          break;
        }
        case DOWN: {
          screen --;
          break;
        }
        case SELECT: {
          screen = 10;
          break;
        }
      }
      break;
    }
    case 10: { // 10 - NASTAVENI HODIN - HODINY
      switch (readButton()){
        case LEFT: {
          DS1307.adjust(DateTime(datumCas.year(), datumCas.month(), datumCas.day(), datumCas.hour()-1, datumCas.minute(), datumCas.second()));
          break;
        }
        case RIGHT: {
          DS1307.adjust(DateTime(datumCas.year(), datumCas.month(), datumCas.day(), datumCas.hour()+1, datumCas.minute(), datumCas.second()));
          break;
        }
        case SELECT: {
          screen = 11;
          break;
        }
      }
      break;
    }
    case 11: { // 11 - NASTAVENI HODIN - MINUTY
      switch (readButton()){
        case LEFT: {
          DS1307.adjust(DateTime(datumCas.year(), datumCas.month(), datumCas.day(), datumCas.hour(), datumCas.minute()-1, datumCas.second()));
          break;
        }
        case RIGHT: {
          DS1307.adjust(DateTime(datumCas.year(), datumCas.month(), datumCas.day(), datumCas.hour(), datumCas.minute()+1, datumCas.second()));
          break;
        }
        case SELECT: {
          screen = 1;
          break;
        }
      }
      break;
    }
    case 2:{ // 2 - NASTAVENI TEPLOTY BAZENU
      switch (readButton()){
        case UP: {
          screen ++;
          break;
        }
        case DOWN: {
          screen --;
          break;
        }
        case SELECT: {
          screen = 20;
          break;
        }
      }
      break;
    }
    case 20: { // 20 - NASTAVENI TEPLOTY BAZENU - TEPLOTA
      switch (readButton()){
        case LEFT: {
          if(teplota_bazenu > 0) teplota_bazenu--;
          break;
        }
        case RIGHT: {
          if(teplota_bazenu < 50) teplota_bazenu++;
          break;
        }
        case SELECT: {
          screen = 2;
          break;
        }
      }
      break;
    }
    case 3:{ // 3 - NASTAVENI CASOVACE 1
      switch (readButton()){
        case UP: {
          screen ++;
          break;
        }
        case DOWN: {
          screen --;
          break;
        }
        case SELECT: {
          screen = 30;
          break;
        }
      }
      break;
    }
    case 30: { // 30 - NASTAVENI CASOVACE 1 - HODINA STARTU
      switch (readButton()){
        case LEFT: {
          if(c1_h_s > 0) c1_h_s--;
          break;
        }
        case RIGHT: {
          if(c1_h_s < 23) c1_h_s++;
          break;
        }
        case SELECT: {
          screen = 31;
          break;
        }
      }
      break;
    }
    case 31: { // 31 - NASTAVENI CASOVACE 1 - MINUTA STARTU
      switch (readButton()){
        case LEFT: {
          if(c1_m_s > 0) c1_m_s--;
          break;
        }
        case RIGHT: {
          if(c1_m_s < 59) c1_m_s++;
          break;
        }
        case SELECT: {
          screen = 32;
          break;
        }
      }
      break;
    }
    case 32: { // 30 - NASTAVENI CASOVACE 1 - HODINA KONCE
      switch (readButton()){
        case LEFT: {
          if(c1_h_c > 0) c1_h_c--;
          break;
        }
        case RIGHT: {
          if(c1_h_c < 23) c1_h_c++;
          break;
        }
        case SELECT: {
          screen = 33;
          break;
        }
      }
      break;
    }
    case 33: { // 30 - NASTAVENI CASOVACE 1 - MINUTA KONCE
      switch (readButton()){
        case LEFT: {
          if(c1_m_c > 0) c1_m_c--;
          break;
        }
        case RIGHT: {
          if(c1_m_c < 59) c1_m_c++;
          break;
        }
        case SELECT: {
          if(((c1_h_s*60) + c1_m_s) > ((c1_h_c*60) + c1_m_c)){ // kontrola nastaveni
            lcd.clear();
            lcd.print("Chyba nastaveni!");
            delay(1000);
            c1_h_c = c1_h_s; // prenastaveni hodnot
            c1_m_c = c1_m_s; // prenastaveni hodnot
          }
          screen = 3;
          break;
        }
      }
      break;
    }
    case 4:{ // 4 - NASTAVENI CASOVACE 2
      switch (readButton()){
        case UP: {
          screen = 0;
          break;
        }
        case DOWN: {
          screen --;
          break;
        }
        case SELECT: {
          screen = 40;
          break;
        }
      }
      break;
    }
    case 40: { // 40 - NASTAVENI CASOVACE 2 - HODINA ZACATKU
      switch (readButton()){
        case LEFT: {
          if(c2_h_s > 0) c2_h_s--;
          break;
        }
        case RIGHT: {
          if(c2_h_s < 23) c2_h_s++;
          break;
        }
        case SELECT: {
          screen = 41;
          break;
        }
      }
      break;
    }
    case 41: { // 41 - NASTAVENI CASOVACE 2 - MINUTA ZACATKU
      switch (readButton()){
        case LEFT: {
          if(c2_m_s > 0) c2_m_s--;
          break;
        }
        case RIGHT: {
          if(c2_m_s < 59) c2_m_s++;
          break;
        }
        case SELECT: {
          screen = 42;
          break;
        }
      }
      break;
    }
    case 42: { // 42 - NASTAVENI CASOVACE 2 - HODINA KONCE
      switch (readButton()){
        case LEFT: {
          if(c2_h_c > 0) c2_h_c--;
          break;
        }
        case RIGHT: {
          if(c2_h_c < 23) c2_h_c++;
          break;
        }
        case SELECT: {
          screen = 43;
          break;
        }
      }
      break;
    }
    case 43: { // 40 - NASTAVENI CASOVACE 2 - MINUTA KONCE
      switch (readButton()){
        case LEFT: {
          if(c2_m_c > 0) c2_m_c--;
          break;
        }
        case RIGHT: {
          if(c2_m_c < 59) c2_m_c++;
          break;
        }
        case SELECT: {
          if(((c2_h_s*60) + c2_m_s) > ((c2_h_c*60) + c2_m_c)){ // kontrola nastaveni
            lcd.clear();
            lcd.print("Chyba nastaveni!");
            delay(1000);
            c2_h_c = c2_h_s; // prenastaveni hodnot
            c2_m_c = c2_m_s; // prenastaveni hodnot
          }
          screen = 4;
          break;
        }
      }
      break;
    }
  }
  // zobrazeni LCD menu
  obnova_lcd ++; // pocitadlo smycek
  if(obnova_lcd > 3){ // kazdou 3 smycku obnov LD
    obnova_lcd = 0; // vynuluj promennou
    lcd.clear(); // smaz obrazovku
    switch (screen) {
      case 0: {// 0 - UVODNI OBRAZOVKA
        lcd.setCursor(0,0); // prvni radek
        desitky(datumCas.hour());
        lcd.print(datumCas.hour());
        lcd.print(":");
        desitky(datumCas.minute());
        lcd.print(datumCas.minute());
        lcd.setCursor(0,1); // nastav kurzor
        //lcd.print("DRUHY RADEK");
        lcd.noBlink();
        break;
      }
      case 1: {// 1 - NASTAVENI HODIN 
        lcd.setCursor(0,0); // prvni radek
        lcd.print("NASTAVENI");
        lcd.setCursor(0,1); // druhy radek
        lcd.print("HODIN");
        lcd.noBlink();
        break;
      }
      case 10:{ // obrazovka
        obr1x(); // obrazovka 1x
        lcd.blink();
        lcd.setCursor(0,1); // nastav kurzor
        break;
      }
      case 11:{ // obrazovka
        obr1x(); // obrazovka 1x
        lcd.blink();
        lcd.setCursor(3,1); // nastav kurzor
        break;
      }
      case 2: {// 2 - NASTAVENI TEPLOTY 
        lcd.setCursor(0,0); // prvni radek
        lcd.print("NASTAVENI");
        lcd.setCursor(0,1); // druhy radek
        lcd.print("TEPLOTY BAZENU");
        lcd.noBlink();
        break;
      }
      case 20:{ // 20 - NASTAVENI TEPLOTY  - TEPLOTA
        lcd.setCursor(0,0); // prvni radek
        lcd.print("TEPLOTA BAZENU");
        lcd.setCursor(0,1); // druhy radek
        lcd.print(teplota_bazenu);
        lcd.print(" C");
        lcd.blink();
        lcd.setCursor(0,1); // nastav kurzor
        break;
      }
      case 3:{ // 3 - NASTAVENI CASOVACE 1
        lcd.setCursor(0,0); // prvni radek
        lcd.print("NASTAVENI");
        lcd.setCursor(0,1); // druhy radek
        lcd.print("CASOVACE 1");
        lcd.noBlink();
        break;
      }
      case 30:{ // 30 - nastaveni casovace 1 -hodina zacatku
        obr3x(); // obrazovka 3x
        lcd.blink();
        lcd.setCursor(0,1); // nastav kurzor
        break;
      }
      case 31:{ // 31 - nastaveni casovace 1 - minuta zacatku
        obr3x(); // obrazovka 3x
        lcd.blink();
        lcd.setCursor(3,1); // nastav kurzor
        break;
      }
      case 32:{ // 32 - nastaveni casovace 1 - hodina konce
        obr3x(); // obrazovka 3x
        lcd.blink();
        lcd.setCursor(6,1); // nastav kurzor
        break;
      }
      case 33:{ // 33 - nastaveni casovace 1 - minuta konce
        obr3x(); // obrazovka 3x
        lcd.blink();
        lcd.setCursor(9,1); // nastav kurzor
        break;
      }
      case 4:{ // obrazovka
        lcd.setCursor(0,0); // prvni radek
        lcd.print("NASTAV");
        lcd.setCursor(0,1); // druhy radek
        lcd.print("CASOVAC 2");
        lcd.noBlink();
        break;
      }
      case 40:{ // 40 - nastaveni casovace 2 - hodina zacatku
        obr4x(); // obrazovka 4x
        lcd.blink();
        lcd.setCursor(0,1); // nastav kurzor
        break;
      }
      case 41:{ // 41 - nastaveni casovace 2 - minuta zacatku
        obr4x(); // obrazovka 4x
        lcd.blink();
        lcd.setCursor(3,1); // nastav kurzor
        break;
      }
      case 42:{ // 42 - nastaveni casovace 2 - hodina konce
        obr4x(); // obrazovka 4x
        lcd.blink();
        lcd.setCursor(6,1); // nastav kurzor
        break;
      }
      case 43:{ // 43 - nastaveni casovace 2 - minuta konce
        obr4x(); // obrazovka 4x
        lcd.blink();
        lcd.setCursor(9,1); // nastav kurzor
        break;
      }
    }
  }
  delay(150); // pauza
}

int readButton() { // otestuje jestli neni stisknuto tlacitko
  int Button = 0;
  if (analogRead(0) > 1000) Button = NONE;
  if (analogRead(0) < 790)  Button = SELECT; 
  if (analogRead(0) < 550)  Button = LEFT;
  if (analogRead(0) < 380)  Button = DOWN;
  if (analogRead(0) < 200)  Button = UP;
  if (analogRead(0) < 50)   Button = RIGHT;
 return Button; // navratova hodnota


void desitky(int cislo){ // zobrazi cislo ve tvaru %%
  if(cislo < 10 ){
    lcd.print("0");
  }
}

void obr3x(){
  lcd.setCursor(0,0); // prvni radek
  lcd.print("CASOVAC 1");
  lcd.setCursor(0,1); // druhy radek
  desitky(c1_h_s); // casovac 1, hodina, start
  lcd.print(c1_h_s);
  lcd.print(":");
  desitky(c1_m_s);
  lcd.print(c1_m_s);
  lcd.print("-");
  desitky(c1_h_c); // casovac 1, hodina, start
  lcd.print(c1_h_c);
  lcd.print(":");
  desitky(c1_m_c);
  lcd.print(c1_m_c);
}

void obr4x(){
  lcd.setCursor(0,0); // prvni radek
  lcd.print("CASOVAC 2");
  lcd.setCursor(0,1); // druhy radek
  desitky(c2_h_s); // casovac 1, hodina, start
  lcd.print(c2_h_s);
  lcd.print(":");
  desitky(c2_m_s);
  lcd.print(c2_m_s);
  lcd.print("-");
  desitky(c2_h_c); // casovac 1, hodina, start
  lcd.print(c2_h_c);
  lcd.print(":");
  desitky(c2_m_c);
  lcd.print(c2_m_c);
}

void obr1x(){
  lcd.setCursor(0,0); // prvni radek
  lcd.print("NASTAVENI HODIN");
  lcd.setCursor(0,1); // druhy radek
  desitky(datumCas.hour());
  lcd.print(datumCas.hour());
  lcd.print(":");
  desitky(datumCas.minute());
  lcd.print(datumCas.minute());
}


Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #27 kdy: Únor 03, 2017, 14:43:37 odpoledne »
zdravim  no tak som to zbehol zatial len tak ocami este nemam rtc modul takze az dojde skusim to nahodit a uvydim co to povie, inak vsetky tie tlacitka su pichnute do A0? cez odpopory?

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:problem z delay
« Odpověď #28 kdy: Únor 03, 2017, 15:08:02 odpoledne »

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:problem z delay
« Odpověď #29 kdy: Únor 08, 2017, 18:01:12 odpoledne »
no zdravim  nahral som to do arduino nano , povodny prograam od teba funguje len ked som do neho zacal nahadzovat moj program tak to zacalo blbnut konkretne ked som tam nahodil   na dallas teplotne senzory kniznice a samotny kod mam totiz pocit ako keby to robilo v programe delay a roby to tam bordel. nepoznam iny sposob ako spravit spravne nacitanie senzorou  aby boli hodnoty relevantne a pouzitelne :/