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

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

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

#1 Příspěvek 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
Naposledy upravil(a) jiri255 dne 06 čer 2015, 18:03, celkem upraveno 1 x.
Uživatelský avatar
rnbw
Příspěvky: 37419
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#2 Příspěvek od rnbw »

Mas opacne tie znamienka. Asi preto, ze pises tie podmienky neprirodzene naopak: 26 < teplota namiesto teplota > 26.
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#3 Příspěvek 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 :-(
Uživatelský avatar
rnbw
Příspěvky: 37419
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#4 Příspěvek 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.
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#5 Příspěvek 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.
Naposledy upravil(a) Cowley dne 06 čer 2015, 13:54, celkem upraveno 2 x.
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#6 Příspěvek 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ě.
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#7 Příspěvek od jiri255 »

Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#8 Příspěvek 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.
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#9 Příspěvek 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);
          }
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#10 Příspěvek 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.
hakamusai
Příspěvky: 939
Registrován: 17 dub 2007, 00:00

#11 Příspěvek 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);
 }
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#12 Příspěvek 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);
          }
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#13 Příspěvek od Cowley »

Ano. Takhle je to OK.
To co navrhoval hakamusai je dobre jen pokud je namerena teplota v celych cislech.
Uživatelský avatar
jiri255
Příspěvky: 168
Registrován: 18 dub 2013, 00:00

#14 Příspěvek od jiri255 »

...teplota není v celých číslech, tak to tedy nechám takto.
Děkuji za kontrolu ;-) je to vyřešené :-)
Uživatelský avatar
Cowley
Příspěvky: 3557
Registrován: 04 úno 2005, 00:00

#15 Příspěvek od Cowley »

Rado se stalo.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“