podmínky

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
paclikc
Příspěvky: 9
Registrován: 14 dub 2019, 12:35
Reputation: 0

podmínky

Příspěvek od paclikc » 14 dub 2019, 12:46

Dobrý den.

nedaří se mi zprovoznit základní zápis "if"

Kód: Vybrat vše


int s_dest_cerpadlo = 22; //nastavení promenných
int d_dest_cerpadlo = 23;
int h_dest_cerpadlo = 24;
int s_akumulace = 25;
int d_akumulace = 26;
int h_akumulace = 27;
int s_studna = 28;
int d_studna = 29;
int h_studna = 30;
int hhhhhhhh = 31;
int cerpadlo_jimka = 50;
int xxxx = 51;
int cerpadlo_dest = 52;
int cerpadlo_studna = 53;


void setup(){ 
  pinMode(s_dest_cerpadlo, INPUT_PULLUP);//nastaví s_dest_cerpadlo jako vstup
  pinMode(d_dest_cerpadlo, INPUT_PULLUP);
  pinMode(h_dest_cerpadlo, INPUT_PULLUP);
  pinMode(s_akumulace, INPUT_PULLUP);
  pinMode(d_akumulace, INPUT_PULLUP);
  pinMode(h_akumulace, INPUT_PULLUP);
  pinMode(s_studna, INPUT_PULLUP);
  pinMode(d_studna, INPUT_PULLUP);
  pinMode(h_studna, INPUT_PULLUP);
  pinMode(cerpadlo_jimka, OUTPUT);
  pinMode(xxxx, OUTPUT);
  pinMode(cerpadlo_dest, OUTPUT);
  pinMode(cerpadlo_studna, OUTPUT);
  
}

void loop(){
  if ((h_dest_cerpadlo == HIGH) && (d_dest_cerpadlo == HIGH))
  
  digitalWrite(cerpadlo_dest, HIGH);


   else { 
   
       digitalWrite(cerpadlo_dest, LOW);

      }
  }
nemužu přijít na to kde dělám v zápise chybu :(

díky za reakce

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: podmínky

Příspěvek od martinius96 » 14 dub 2019, 13:33

oprava:
if sa ti splní vždy, keďže vstupy, ktoré overuješ sú input pullup, teda sú HIGH a nerobíš nové merania, ktoré by zmenili stav vstupu
Naposledy upravil(a) martinius96 dne 14 dub 2019, 13:56, celkem upraveno 1 x.

paclikc
Příspěvky: 9
Registrován: 14 dub 2019, 12:35
Reputation: 0

Re: podmínky

Příspěvek od paclikc » 14 dub 2019, 13:50

Díky za reakci.

IDE to přeloží bez problémů.

Jen při testech to nedělá co má, PULLUP by neměl vadit když spojím pin s GND mam LOW? Pokud jsem to pochopil dobře.

Nerozumím poznámce o novém měření, to se neprovede při každém průchodu LOOP? :?:

Riso
Příspěvky: 27
Registrován: 24 srp 2018, 15:36
Reputation: 0

Re: podmínky

Příspěvek od Riso » 14 dub 2019, 13:53

Skús to takto.

Kód: Vybrat vše


int s_dest_cerpadlo = 22; //nastavení promenných
int d_dest_cerpadlo = 23;
int h_dest_cerpadlo = 24;
int s_akumulace = 25;
int d_akumulace = 26;
int h_akumulace = 27;
int s_studna = 28;
int d_studna = 29;
int h_studna = 30;
int hhhhhhhh = 31;
int cerpadlo_jimka = 50;
int xxxx = 51;
int cerpadlo_dest = 52;
int cerpadlo_studna = 53;


void setup(){ 
  pinMode(s_dest_cerpadlo, INPUT_PULLUP);//nastaví s_dest_cerpadlo jako vstup
  pinMode(d_dest_cerpadlo, INPUT_PULLUP);
  pinMode(h_dest_cerpadlo, INPUT_PULLUP);
  pinMode(s_akumulace, INPUT_PULLUP);
  pinMode(d_akumulace, INPUT_PULLUP);
  pinMode(h_akumulace, INPUT_PULLUP);
  pinMode(s_studna, INPUT_PULLUP);
  pinMode(d_studna, INPUT_PULLUP);
  pinMode(h_studna, INPUT_PULLUP);
  pinMode(cerpadlo_jimka, OUTPUT);
  pinMode(xxxx, OUTPUT);
  pinMode(cerpadlo_dest, OUTPUT);
  pinMode(cerpadlo_studna, OUTPUT);
  
}

void loop(){
  if (digitalRead(h_dest_cerpadlo) && digitalRead(d_dest_cerpadlo))
    digitalWrite(cerpadlo_dest, HIGH);

  else 
    digitalWrite(cerpadlo_dest, LOW);
  }

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: podmínky

Příspěvek od martinius96 » 14 dub 2019, 13:55

Nerobíš merania cez digitalRead() funkciu. To je problém. Riso to napísal správne, takto ti to bude fungovať.

paclikc
Příspěvky: 9
Registrován: 14 dub 2019, 12:35
Reputation: 0

Re: podmínky

Příspěvek od paclikc » 14 dub 2019, 14:02

Díky :D
Teď z učebních důvodu : Vysvětlíte mi proč byl můj zápis špatně? :?

Diky

Uživatelský avatar
SkullKeep
Příspěvky: 290
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: podmínky

Příspěvek od SkullKeep » 14 dub 2019, 16:26

Testoval jsi podmínku, která byla nastavena jednou. Případná změna na PINech by neudělala požadovanou změnu, proto se tam dáva to digitalRead(číslo pinu). To načte z vstupu hodnotu ,kterou pak porovnáváš.
:twisted: :?: :arrow: :geek: P. Q. M.

BB Scary
Příspěvky: 5
Registrován: 05 kvě 2018, 18:29
Reputation: 0

Re: podmínky

Příspěvek od BB Scary » 24 dub 2019, 12:48

Hele sorry jestli se pletu. Taky jsem v arduinu ještě začátečník. Neměly by tam být ještě tyto { } závorky?

if (něco něco) {
udělej tohle;
} else {
udělej jinou věc;
}

Nebo to funguje i bez nich?

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: podmínky

Příspěvek od gilhad » 24 dub 2019, 13:44

Podívej se na programování v Céčku (teda spíš C++).
podminka je buď

if (podmínka) příkaz

nebo

if (podmínka) příkaz else příkaz

přičemž příkaz může být buď příkaz jednoduchý ukončený středníkem - třeba volání funkce , nebo blok uzavřený ve složených závorkách

viz například https://www.sallyx.org/sally/c/c12.php

paclikc
Příspěvky: 9
Registrován: 14 dub 2019, 12:35
Reputation: 0

Re: podmínky

Příspěvek od paclikc » 10 črc 2019, 20:46

Ahoj.
bohužel jsem začátečník amatér :-/

mohu mít takovýto zapís dvou ruzných "funkcí" v LOOPu?
nebo je na to nějaká jina finta? Nejlepší by byla rada od programatora který by řekl "takhle ne, to udělej přes switche , pomocí pole atd... :roll: :roll:

Kód: Vybrat vše

void loop(){
  if (digitalRead(s_dest_cerpadlo) && digitalRead(max_akumulace)) { // přečte minimální hladinu v jimce a maximalní hladinu v akumulaci
    if((cerpadlo_studna1 || !digitalRead(h_dest_cerpadlo)) && !digitalRead(d_dest_cerpadlo)){ //samodržné relé spinájící cerpadlo v jímce
  cerpadlo_dest1 = true;
  digitalWrite(cerpadlo_dest, LOW);
  blikej ();
}
    else{
  cerpadlo_dest1 = false;
  digitalWrite(cerpadlo_dest, HIGH);
    }
  }



              
  
 if (digitalRead(d_studna)) { // přečte minimální hladinu v jimce a maximalní hladinu v akumulaci
    if((cerpadlo_studna1 || !digitalRead(h_studna)) && digitalRead(d_studna)){ //samodržné relé spinájící cerpadlo v jímce
  cerpadlo_studna1 = true;
  digitalWrite(cerpadlo_studna, LOW);
}
    else{
  cerpadlo_studna1 = false;
  digitalWrite(cerpadlo_studna, HIGH);
    }
  } 
}

Odpovědět

Kdo je online

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