Ik doe iets helemaal fout... maar wat?

Arduino specifieke Software
Berichten: 52
Geregistreerd: 15 Okt 2015, 21:14

Ik doe iets helemaal fout... maar wat?

Berichtdoor snewpers » 28 Okt 2015, 23:49

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:
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

Berichten: 52
Geregistreerd: 15 Okt 2015, 21:14

Re: Ik doe iets helemaal fout... maar wat?

Berichtdoor snewpers » 29 Okt 2015, 01:05

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 :)

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Ik doe iets helemaal fout... maar wat?

Berichtdoor shooter » 30 Okt 2015, 09:41

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.
paul deelen
shooter@home.nl

Berichten: 52
Geregistreerd: 15 Okt 2015, 21:14

Re: Ik doe iets helemaal fout... maar wat?

Berichtdoor snewpers » 30 Okt 2015, 17:56

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!

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 89 gasten