Stránka 1 z 2

podmínky

Napsal: 14 dub 2019, 12:46
od paclikc
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

Re: podmínky

Napsal: 14 dub 2019, 13:33
od martinius96
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

Re: podmínky

Napsal: 14 dub 2019, 13:50
od paclikc
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? :?:

Re: podmínky

Napsal: 14 dub 2019, 13:53
od Riso
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);
  }

Re: podmínky

Napsal: 14 dub 2019, 13:55
od martinius96
Nerobíš merania cez digitalRead() funkciu. To je problém. Riso to napísal správne, takto ti to bude fungovať.

Re: podmínky

Napsal: 14 dub 2019, 14:02
od paclikc
Díky :D
Teď z učebních důvodu : Vysvětlíte mi proč byl můj zápis špatně? :?

Diky

Re: podmínky

Napsal: 14 dub 2019, 16:26
od SkullKeep
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áš.

Re: podmínky

Napsal: 24 dub 2019, 12:48
od BB Scary
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?

Re: podmínky

Napsal: 24 dub 2019, 13:44
od gilhad
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

Re: podmínky

Napsal: 10 črc 2019, 20:46
od paclikc
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);
    }
  } 
}