Stránka 1 z 1

ARDUINO - nastaveni rozsahu teplot v programu = VYŘEŠENO

Napsal: 06 čer 2015, 12:11
od jiri255
Zdravím,
chtěl bych požádat o radu ohledně definice podmínky pro rozsah teplot u ARDUINO Mega.
Mám podmínku, že pokud je teplota vyšší, jak 26°C, tak to sepne relé a pokud klesne pod 26°C, tak to relé vypne což funguje perfektně.

Kód: Vybrat vše

 
          if (26 < teplota1) {
          digitalWrite(2,LOW);         
          digitalWrite(6,LOW);
          } else {
          digitalWrite(2,HIGH);       
          digitalWrite(6,HIGH);
          }

Já bych tu podmínku potřeboval rozšířit o rozsah teplot a to tím způsobem, že pokud bude teplota menší než 26 budou obě relé LOW, pokud teplota bude v rozsahu mezi 27 až 29 bude relé 2 LOW a relé 6 HIGH a pokud bude teplota mezi 30 a 34 budou obě relé HIGH a v případě, že bude teplota nad 35 bude relé 2 HIGH a relé 6 LOW, tak jsem podmínku upravil viz níže jenže mám tam nějakou chybu, protože mi to nefunguje a dělá si to co chce :-(.

Kód: Vybrat vše

          if (26 < teplota1) {
          digitalWrite(2,LOW);       
          digitalWrite(6,LOW);
          } else if((27 > teplota1) && (29 < teplota1)){
          digitalWrite(2,LOW);         
          digitalWrite(6,HIGH);
          } else if((30 > teplota1) && (34 < teplota1)){
          digitalWrite(2,HIGH);         
          digitalWrite(6,HIGH);
          }
          else if(35 > teplota1){
          digitalWrite(2,HIGH);     
          digitalWrite(6,LOW);

Nevíte někdo v čem bych mohl mít chybu?
Předem děkuji za případnou pomoc

Napsal: 06 čer 2015, 12:23
od rnbw
Mas opacne tie znamienka. Asi preto, ze pises tie podmienky neprirodzene naopak: 26 < teplota namiesto teplota > 26.

Napsal: 06 čer 2015, 13:18
od jiri255
tak teď to trochu nechápu... na nějakém fóru řešili, že pokud je to zapsáno takto:

Kód: Vybrat vše

 if (teplota1 > 26)

tak je to špatně a dělá to chyby v programu a má to být zapsáno
nepřirozeně obráceně, tak jsem to tedy i použil do svého programu.
Pokud se nepletu, tak LOW znamená relé neběží a HIGH znamená relé běží?
Když to zapíšu takhle, tak že dám teplota1 > 26, tak mi to pracuje špatně jakoby naopak. Pokud dám tuto podmínku:

Kód: Vybrat vše

          if (teplota1 < 26) { 
          digitalWrite(2,LOW);         
          digitalWrite(6,LOW);
          } else {
          digitalWrite(2,HIGH);       
          digitalWrite(6,HIGH);
          }

tak by to mělo znamenat, že pokud je teplota menší, jak 26, tak má být relé vypnuto a pokud bude větší než 26 má být zapnuto?
Potom, ale zase v tom případě znamená HIGH vypnuto a LOW zapnuto,
protože, tak to i pracuje z relátkama :-(

Napsal: 06 čer 2015, 13:23
od rnbw
Prekladacu je to uplne jedno, ako to mas obratene. Ale ty si si "vdaka" tomu vyrobil nezmyselne podmienky, ktore nie su nikdy splnene (teplota je mensia ako 27 a sucasne vacsia ako 29).

Co znamena HIGH a LOW, to by si mal vediet ty podla zapojenia. Ak nevies, tak to vyskusaj jednoducho tak, ze tam daj natvrdo bez podmienky na jeden vystup LOW a na druhy HIGH a pozeraj, co to robi.

Napsal: 06 čer 2015, 13:44
od Cowley
A jak jsou na vystupu zapojena rele? Pres tranzistory?

Asi ano, protoze podle prvniho kodu pri LOW rele pritahne a pri HIGH odpadne

A podle posledniho mas opacne znamenko.

Napsal: 06 čer 2015, 13:50
od jiri255
vzal jsem to tedy a celé dle rady předělal

Kód: Vybrat vše

          if (teplota1 < 26) { 
          digitalWrite(2,HIGH);       
          digitalWrite(6,HIGH);
          } else if((teplota1 > 27) && (teplota1 < 29)){
          digitalWrite(2,HIGH);         
          digitalWrite(6,LOW);
          } else if((teplota1 > 30) && (teplota1 < 34)){
          digitalWrite(2,LOW);         
          digitalWrite(6,LOW);
          }
          else if(teplota1 > 35){
          digitalWrite(2,LOW);     
          digitalWrite(6,HIGH);

a obrátil i ta relé a teď mi to už funguje, tak jak jsem potřeboval :-) za což děkuji ...jen mi nejsou jasná ta HIGH a LOW proč to musí být obráceně.

Napsal: 06 čer 2015, 13:52
od jiri255

Napsal: 06 čer 2015, 13:57
od Cowley
Tak to LOW ovlada vstup na optronu. HIGH tedy znamena blokuj.
Jeste uprav program kde se ma teplota lamat. Takhle jak to mas ti pri 26st. nebude splnena zadna podminka. Podobne i ta druha zlomova teplota.

Napsal: 06 čer 2015, 15:02
od jiri255
aha, tak to jsem netušil díky za nápovědu, takže takto by to už mělo být v pohodě, že?

Kód: Vybrat vše

          if (teplota1 < 26) { 
          digitalWrite(2,HIGH);       
          digitalWrite(6,HIGH);
          } else if((teplota1 > 26) && (teplota1 < 29)){
          digitalWrite(2,HIGH);         
          digitalWrite(6,LOW);
          } else if((teplota1 > 29) && (teplota1 < 34)){
          digitalWrite(2,LOW);         
          digitalWrite(6,LOW);
          }
          else if(teplota1 > 34){
          digitalWrite(2,LOW);     
          digitalWrite(6,HIGH);
          }

Napsal: 06 čer 2015, 15:31
od Cowley
Taky ne. Takhle je taky 26 a ostatni zlomove teploty mimo "hru".
Jednomu smeru dej i podminku rovna se. Treba rovna se a je mensi.

Napsal: 06 čer 2015, 16:32
od hakamusai
jiri255> pokud nechceš použít rovná se,zkus to takhle:

Kód: Vybrat vše

 if (teplota1 < 27)
 {
 digitalWrite(2,HIGH);       
 digitalWrite(6,HIGH);                   
 }
 else if((teplota1 > 26) && (teplota1 < 30))
 {
 digitalWrite(2,HIGH);         
 digitalWrite(6,LOW);
 }
  else if((teplota1 > 29) && (teplota1 < 35))
 {
 digitalWrite(2,LOW);         
 digitalWrite(6,LOW);
 }
  else if(teplota1 > 34)
 {
 digitalWrite(2,LOW);     
 digitalWrite(6,HIGH);
 }

Napsal: 06 čer 2015, 16:52
od jiri255
a když to bude takhle zasahovat do sebe nebude to v programu delat paseku to < 27 , >26 , <30, <29, <35, >34 ?
takze mysleno asi takhle:

Kód: Vybrat vše

          if (teplota1 <= 26) { 
          digitalWrite(2,HIGH);       
          digitalWrite(6,HIGH);
          } else if((teplota1 > 26) && (teplota1 <= 29)){
          digitalWrite(2,HIGH);         
          digitalWrite(6,LOW);
          } else if((teplota1 > 29) && (teplota1 <= 34)){
          digitalWrite(2,LOW);         
          digitalWrite(6,LOW);
          }
          else if(teplota1 > 34){
          digitalWrite(2,LOW);     
          digitalWrite(6,HIGH);
          }

Napsal: 06 čer 2015, 17:11
od Cowley
Ano. Takhle je to OK.
To co navrhoval hakamusai je dobre jen pokud je namerena teplota v celych cislech.

Napsal: 06 čer 2015, 18:02
od jiri255
...teplota není v celých číslech, tak to tedy nechám takto.
Děkuji za kontrolu ;-) je to vyřešené :-)

Napsal: 06 čer 2015, 18:46
od Cowley
Rado se stalo.