Chyba v programu pro Arduino

karol

Chyba v programu pro Arduino
« kdy: 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);
}
}
« Poslední změna: 30. 07. 2012, 15:52:52 od Petr Krčmář »


Jméno:

Re:Ardino
« Odpověď #1 kdy: 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

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Ardino
« Odpověď #2 kdy: 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
}

Jméno:

Re:Ardino
« Odpověď #3 kdy: 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
}

Re:Ardino
« Odpověď #4 kdy: 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");
}
Děkuji za možnost editace příspěvku.


Jméno:

Re:Ardino
« Odpověď #5 kdy: 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.

Re:Ardino
« Odpověď #6 kdy: 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.