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?
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;
}
}
}
}
"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.
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.
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: