Ik doe iets helemaal fout... maar wat?
4 berichten
• Pagina 1 van 1
Ik doe iets helemaal fout... maar wat?
Hoi, Alles wat met Arduino te maken heft is nieuw voor me en hoewel ik me suf lees/leer is de syntax soms toch lastig... to say the least
Ik heb een sketch voor een stopwatch/timer.
Ik gebruik de while() zodat de onderdelen alleen actief zijn op het moment dat alle voorwaarden in die functie overeenkomen.
Het probleem is dat de while() niet stopt bij de loop functie welke wordt aangesproken. Nu heb ik een vermoeden hoe dat komt maar weet dan nog steeds niet de oplossing.
De while voor starten:
[code// start gedrukt, rijderselectie =1 en StopWaarde =0, dus uit, nu dus subloop draaien tot stop == low (aan))
while ( StartWaarde ==1 && RijderState ==1 && StopWaarde==0)
{
Serial.println("\n### Tijd_1_Rijder ###");Tijd_1_Rijder();
} // while end[/code]
De while voor stoppen:
Deze while wordt actief op het moment dat startwaarde ==1 wordt (na drukken van knop). Dit werkt maar het probleem zit 'm in de loop die wordt aangeroepen denk ik.
De Tijd_1_Rijder() loop:
De EindTijd_1_Rijder() loop:
De output hiervan is:
De loop blijft maar draaien (duh) maar kom er niet meer uit. Ik wil de eerste while (starten van tijd) aanzetten (1x!) en dan weg uit de loop... wachten tot stopknop gedrukt wordt zodat while 2 actief wordt en de tijden gaat meten. Als ik nu een keer op start klik blijft de data gewoon lopen zonder dat er een wachttijd is tussen de start en stop knop...
kan iemand mij hiermee helpen aub?
Thx
Ik heb een sketch voor een stopwatch/timer.
Ik gebruik de while() zodat de onderdelen alleen actief zijn op het moment dat alle voorwaarden in die functie overeenkomen.
Het probleem is dat de while() niet stopt bij de loop functie welke wordt aangesproken. Nu heb ik een vermoeden hoe dat komt maar weet dan nog steeds niet de oplossing.
De while voor starten:
[code// start gedrukt, rijderselectie =1 en StopWaarde =0, dus uit, nu dus subloop draaien tot stop == low (aan))
while ( StartWaarde ==1 && RijderState ==1 && StopWaarde==0)
{
Serial.println("\n### Tijd_1_Rijder ###");Tijd_1_Rijder();
} // while end[/code]
De while voor stoppen:
- Code: Alles selecteren
// stop gedrukt, rijderselectie =1 en StopStatus = 1, dus aan!, nu dus subloop draaien voor resultaat
while ( StartWaarde ==1 && RijderState ==1 && StopWaarde==1)
{
EindTijd_1_Rijder();
} // while end
Deze while wordt actief op het moment dat startwaarde ==1 wordt (na drukken van knop). Dit werkt maar het probleem zit 'm in de loop die wordt aangeroepen denk ik.
De Tijd_1_Rijder() loop:
- Code: Alles selecteren
void Tijd_1_Rijder() // Start 1 rijder Modus, Start
{
if(R1Nieuw > 0){R1Oud = R1Nieuw;R1Nieuw = 0.00;} // Staat al een tijd! dus huidige tijd naar oude tijd
StartTijd= time = millis(); // Starttijd noteren
Serial.print(StartTijd);Serial.println(" Starttijd"); // Serieel tijdelijk
StopWaarde=1;
} // Start 1 rijder Modus, Einde
De EindTijd_1_Rijder() loop:
- Code: Alles selecteren
void EindTijd_1_Rijder() // Einde 1 rijder Modus, Start
{
EindTijd = time = millis();Serial.println(EindTijd); // == starttijd + random
R1Nieuw = (EindTijd - StartTijd); // Verstreken tijd in MS
Serial.print("NIEUW ");Serial.println(R1Nieuw/1000.0); // <-- dit moet naar bovenste DIGITS
Serial.print("OUD ");Serial.println(R1Oud/1000.0); // <-- dit moet naar onderste DIGITS
StopWaarde=0; // Tijdelijk want stopwaarde volgt door knop!
} // Einde 1 rijder Modus, Einde
De output hiervan is:
- Code: Alles selecteren
### Tijd_1_Rijder ###
1613 Starttijd
1630
NIEUW 0.02
OUD 0.02
### Tijd_1_Rijder ###
1684 Starttijd
1700
NIEUW 0.02
OUD 0.02
Etc etc etc
De loop blijft maar draaien (duh) maar kom er niet meer uit. Ik wil de eerste while (starten van tijd) aanzetten (1x!) en dan weg uit de loop... wachten tot stopknop gedrukt wordt zodat while 2 actief wordt en de tijden gaat meten. Als ik nu een keer op start klik blijft de data gewoon lopen zonder dat er een wachttijd is tussen de start en stop knop...
kan iemand mij hiermee helpen aub?
Thx
Advertisement
Re: Ik doe iets helemaal fout... maar wat?
Is al opgelost maar kan post niet meer bewerken. Oplossing was een extra int Var=0 mee te geven bij alle voorwaarden en deze te wisselen (var=1) in de loop. Halve dag naar gekeken en gepield maar weer wat meer te weten gekomen uiteindelijk
Re: Ik doe iets helemaal fout... maar wat?
ja als je de routine ingaat dan een flag aanzetten (dat de routine al gedaan is, want de startsituatie blijft wel even bestaan natuurlijk.)
dat zelfde ook doen als je stopt.
om preciezer te zijn kun je interrupt gebruiken (lekker bijleren toch)
en switch case voor de toestanden waar je in bent.
dat zelfde ook doen als je stopt.
om preciezer te zijn kun je interrupt gebruiken (lekker bijleren toch)
en switch case voor de toestanden waar je in bent.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Ik doe iets helemaal fout... maar wat?
Hoi
Interrupt? Haha weer wat on te leren, is niet erg Dat met de switch case had ik al gedaan maar dat ging helemaal niet zo lekker. Ik had de aanwijzingen van de arduino site gedaan maar het resultaat was niet echt zoals het moest. Heb toen maar over de while gelezen en dat leek me beter. In ieder geval werkt het nu helemaal top! (heb de digit displays nog niet binnen en moet ALLES nog leren over SPI)...
Bedankt weer!
Interrupt? Haha weer wat on te leren, is niet erg Dat met de switch case had ik al gedaan maar dat ging helemaal niet zo lekker. Ik had de aanwijzingen van de arduino site gedaan maar het resultaat was niet echt zoals het moest. Heb toen maar over de while gelezen en dat leek me beter. In ieder geval werkt het nu helemaal top! (heb de digit displays nog niet binnen en moet ALLES nog leren over SPI)...
Bedankt weer!
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 73 gasten