Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: karol 29. 07. 2012, 11:07:37

Název: Chyba v programu pro Arduino
Přispěvatel: karol 29. 07. 2012, 11:07:37
Dobry den

Mohol by mi niekdo najst chybu v programe.Nechce mi to zapnut led aj ked splnym podmienku if.

Kód: [Vybrat]
int Parkovacky = A0;     
int Stretavacie = A1;
int Mazanie = A2;
int Stava = A3;

int stav = LOW;

int t = 1500;

void setup() {
 
  pinMode(Parkovacky, OUTPUT);
  pinMode(Stretavacie, OUTPUT);
  pinMode(Mazanie, INPUT);
  pinMode(Stava, INPUT);
  Serial.begin(9600);

 
}

void loop() {
 
 
  //Serial.print(stav );
  Serial.print(Mazanie );
  Serial.print(Stava );
 
  //int stav = digitalRead(Mazanie);
  //int stav = digitalRead(Stava);
 
  if (digitalRead(Mazanie=LOW) && digitalRead(Stava=HIGH)) digitalWrite(stav, HIGH);

  //if (digitalRead(Mazanie=HIGH) || digitalRead(Stava=HIGH)) digitalWrite(stav, HIGH);
   
  if (stav == LOW) {
   
    delay(t);
   
    digitalWrite(Parkovacky, LOW); 

    delay(t);
   
    digitalWrite(Stretavacie, LOW); 

}
else {

    delay(t);
   
    digitalWrite(Stretavacie, HIGH); 

    delay(t);
   
    digitalWrite(Parkovacky, HIGH);
}
}
Název: Re:Ardino
Přispěvatel: Jméno: 29. 07. 2012, 12:42:01
digitalRead(Mazanie=LOW) && digitalRead(Stava=HIGH)

"=" slouzi na prirazeni hodnoty promene, == k porovnavani, navic chces urcite porovnavat navratovou hodnotu z digitalRead() s LOW a ne Mazani s LOW, takze ne digitalRead(Mazanie == LOW) ale digitalRead(Mazanie) == LOW

a misto tech
int Parkovacky = A0;     
int Stretavacie = A1; atd.
by bylo lepsi pouzit #define
Název: Re:Ardino
Přispěvatel: eMko 30. 07. 2012, 07:16:58
ještě dodatek, že operátor = vrátí vždy true, pokud se podaří přiřadit.

int cislo = 3;

if (cislo = 4)
{
  printf("hehe"); // 4 do int dát lze => tohle se provede vždy
}
Název: Re:Ardino
Přispěvatel: Jméno: 30. 07. 2012, 08:55:53
ještě dodatek, že operátor = vrátí vždy true, pokud se podaří přiřadit.

To bych nerekl

Citace
int cislo = 3;

if (cislo = 4)
{
  printf("hehe"); // 4 do int dát lze => tohle se provede vždy
}

udela v podstate to same jako

int cislo = 3;
cislo = 4;
if (cislo)
{
  printf("hehe"); // 4 do int dát lze => tohle se provede vždy
}
Název: Re:Ardino
Přispěvatel: to_je_jedno 30. 07. 2012, 08:58:39
ještě dodatek, že operátor = vrátí vždy true, pokud se podaří přiřadit.

To bych nerekl

Citace
int cislo = 3;

if (cislo = 4)
{
  printf("hehe"); // 4 do int dát lze => tohle se provede vždy
}

udela v podstate to same jako

int cislo = 3;
cislo = 4;
if (cislo)
{
  printf("hehe"); // 4 do int dát lze => tohle se provede vždy
}
nepochopil jsi. bylo to dane jako rozdil oproti "spravnemu":
int cislo = 3;

if (cislo == 4)
{
  printf("hehe"); // 4 do int dát lze => tohle se provede vždy
} else {
  printf("ne, cislo neni 4. priradili jsme tam 3");
}
Název: Re:Ardino
Přispěvatel: Jméno: 30. 07. 2012, 09:14:37
Porad nechapu, prece kdyz napisu if(a=0); tak podminka nebude splnena, takze bych rekl ze "ještě dodatek, že operátor = vrátí vždy true, pokud se podaří přiřadit." neplati.
Název: Re:Ardino
Přispěvatel: Ondřej Novák 30. 07. 2012, 09:26:48
Porad nechapu, prece kdyz napisu if(a=0); tak podminka nebude splnena, takze bych rekl ze "ještě dodatek, že operátor = vrátí vždy true, pokud se podaří přiřadit." neplati.

Dost chaotický příspěvek, ale pokud vím, operátor = vrací jako výsledek to co má na pravé straně.
takže if (a=0) je stejné jako if (0). A platí, že if se provede jen tehdy, když podmínka je různá od nuly.