Beste mensen,
ik probeer een met een while instructie de tijdduur te bepalen dat een signaal "hoog" is, en ook laag. Ten behoeve van een blokgolf generatortje met mn UNO. Met 2 potmeters om frequentie en pulsbreedte te bepalen. Probleem: de while "loopt" eenmaal correct, serial.print print keurig de waardes van variabelen en berekende waardes. Na de eerste "while-lus" zegt serial.print ook keurig dat hij uit de lus is,
De tweede loop start, serial display print weer keurig het verloop van variabelen binnen de loop, op één variabele na: die wordt getoond als "inf". Ik gok op infinite, onbepaald. Juist op die waarde zit de conditie en blijkbaar levert de test altijd TRUE op, want de 2e whilelloop lijkt oneindig te duren.
Verder zit er nog een lcd schildje op met wat knoppen, dat werkt allemaal.
De variabele die na één keer ineens "inf" wordt is dus PulsduurHoog
Mijn vraag: hoe komt dat en hoe los ik het op??
Het is als volgt geprogrammeerd:
long starttijd;
float PulsduurHoog;
float PulsduurLaag;
dan void setup()
in de loop:
void loop() {
int potmeterPulsPeriodeWaarde = analogRead(A5);
int potmeterPulsBreedtePercentageWaarde = analogRead(A4);
float PulsPeriode = potmeterPulsPeriodeWaarde1000.0/1023.0;
float Frequentie = PulsPeriodefreqVermenigvuldiger;
float PulsBreedtePercentage = potmeterPulsBreedtePercentageWaarde/1023.0*100.0;
PulsduurHoog = 1/Frequentie * PulsBreedtePercentage * 1000;
PulsduurLaag = 1/Frequentie * (100.0-PulsBreedtePercentage) * 1000;
//HOOG:
starttijd = millis();
while(millis() - starttijd < PulsduurHoog) {
digitalWrite(OutputPin, HIGH);
Serial.print(millis());Serial.print(" ; ");Serial.print(starttijd);Serial.print(" ; ");
Serial.print(millis() - starttijd);Serial.print(" ; ");Serial.println(PulsduurHoog);
}
Serial.println("UIT WHILE-lus");
//LAAG:
}// Einde loop