Vad missar jag här?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Vad missar jag här?

Inlägg av Henry »

Har denna kod där jag inte vill att något skall skickas förrän jag vet att den seriella bufferten är tom, således det första while. Den andra while för att inte göra något av det understa förrän data finns i bufferten och detta direkt efter så inget annat läggs där så jag vet att det kommer från rätt ställe

Utan den sista while funkar allt fint as is men så fort jag lägger till den sista while (samma med if som test) får det frispel och skickar ut det ovan på serieporten braaa många fler ggr än vad den skall och jag får inte ihop på vilket sätt den kan göra det på.

Det enda den verkar göra är att den hoppar till slutet av den förra while och gör allt efter i samma takt som loop men det skall den väl inte kunna göra utan bara loopa while raden tills frågan blir sann och stoppa loop från att röra sig ända till så sker?

Kod: Markera allt

void vac_value() {

  if ((millis() - time_now) >= period) {
    time_now = millis();

    while (Serial.available() == 0) {   //Finns det data loopa raden tills motsatsen händer, det nollställs efter några ms.

      Serial.print("@254PR3?;FF");

      vac_sent = HIGH;  //Används på ett annat ställe 


      while (Serial.available() > 0) {    //Finns ingen data loopa raden till så sker

        String data = Serial.readString();

        String vac = data.substring(7, 14);

        lcd.setCursor(4, 0);
        lcd.print(vac);

        vac_sent = LOW;

      }
    }
  }
}
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Vad missar jag här?

Inlägg av Icecap »

Boven: "while (Serial.available() == 0) {"
Ska vara "while (Serial.available() == 0);"
BJ
Inlägg: 8185
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Vad missar jag här?

Inlägg av BJ »

Dessutom verkar det ha blivit en förväxling
mellan kommentarerna "Finns det data" och
"Finns det ingen data".
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Vad missar jag här?

Inlägg av Henry »

Nej? :humm:

"while (Serial.available() > 0) { //Finns ingen data loopa raden till så sker "

Vilket ju är precis vad som händer; finns ingen data i bufferten så är det 0 och då blir det inte sant dådet skall vara mer än noll och om inte bara loopa. Så fort det finns data alltså > 0 mer än inget så blir det sant och det går då ur loopen och fortsätter med resten.

Icecap: hmm det där var helt nytt för mig aldrig kört med, varför då inte också på "while (Serial.available() > 0)" ?


Edit: tror jag kopplar nu, den loopar alltså även allt inom {} och således inga sådana, men går ur allt efter att det är sant. Det trodde jag inte att det var så det funkade eftersom det inte var sant i while raden och således då inte gå vidare alls, men jo.

Ok då lärde jag mig ännu en ny sak, tack. :)
BJ
Inlägg: 8185
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Vad missar jag här?

Inlägg av BJ »

Nej, så är det ju inte. ;) Den kör ju while-satsen
när villkoret är sant. :)
Och sätter man bara ett semikolon efter
så kör den bara den så länge villkoret är sant,
och sen hoppar ner och tar resten.
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Vad missar jag här?

Inlägg av Henry »

När det inte är sant kör den det som finns inom {} kontinuerligt tills det blir sant då den kör det hela en sista gång för att sedan gå ur while satsen, om det är sant direkt så körs det som finns inom {} direkt och bara en gång, det är i alla fall så det blir i programmet. Testade precis även enbart detta:

Kod: Markera allt

while (Serial.available() == 0) {

      Serial.print("@254PR3?;FF");
Och den printar ut konstant när ingen info finns i bufferten.

Trodde inte alls det fungerade på det viset, men nu vet jag och då således det där semikolonet för att bara vänta och inte köra något alls, perfekt. :)
Senast redigerad av Henry 20 mars 2020, 20:02:56, redigerad totalt 1 gång.
BJ
Inlägg: 8185
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Vad missar jag här?

Inlägg av BJ »

Jag håller inte med. :)
Användarvisningsbild
Henry
Inlägg: 23588
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Vad missar jag här?

Inlägg av Henry »

Håller med dig helt. :oops:

Seg i kolan idag. :vissla:

Fick det dock att skriva ut som fasen med koden ovan men det var för att jag glömt kvar kod från koden i början som lyckades köras istället. :roll:

Tack. :)
BJ
Inlägg: 8185
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Vad missar jag här?

Inlägg av BJ »

Okej. :)
Skriv svar