[OPGELOST] While programmeerprobleem, na één whilecyclus variabele "inf"

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 = PulsPeriode
freqVermenigvuldiger;
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

Ik zou opnieuw beginnen en dan eerst analyseren wat er moet gebeuren.
Je gebruikt millis() als ijk. Dus de maximale frequentie zou 1000 hz zijn. Echter je wilt nog eens een onderverdeling hebben van 0-100%. Dan hou je nog 1000/100 is 10 hz over.
Je moet dus met micros() gaan werken.
Dan is de theoretische frequentie 10000 hz.
Verder zou ik de functie map() uitzoeken.
Gebruik altijd unsigned long voor micros en millis.
En realiseer je dat serial je hele timing verkloot op de hogere frequenties.
Maak een plaatje en werk die uit

Bedankt voor je suggesties, ik ga vanavond aan de slag met unsigned variabelen.
Die serial zit er natuurlijk alleen even ik voor debug doeleinden.

Ik haal uit je reply nog niet zo snel een antwoord op mijn vraag: hoe komt het dat in mijn while constructie de variabele PulsduurHoog na één cyclus niet meer gedefinieerd is? Even afgezien van wat ik er mee wil bereiken. Signed\unsigned zal dat toch niet op z'n geweten hebben? Maar ik hoop het, we zullen zien vanavond.

Inf krijg je als je deelt door 0. Maar er zoveel mis met jouw code dat ik er niet eens energie in ga steken....

delen door nul did the trick: bij het bepalen van de tijd (=1/frequentie)
Na paar aanpassingen nog loopt het nu als een zonnetje. Bedankt en spaar je energie met dit weer.

En hoe ziet die sketch er nu uit?