beginners vraagje void en loops in loops

IDE gerelateerde berichten
Berichten: 3
Geregistreerd: 18 Aug 2013, 20:10

beginners vraagje void en loops in loops

Berichtdoor carfreak » 18 Aug 2013, 20:44

Hallo allemaal.

ik ben een beginnend gebruiker op het gebied van arduino, heb er al eens wat leuke dingen mee in elkaar geknutseld maar wil nu verder naar het wat betere werk ( blinky kent iedereen wel )

nu loop ik tegen een loop probleempje aan

hoe spring ik terug vanuit een loop in een loop.

void setup()
{
zet wat dingen;
startup_screen();
}

void loop()
{
dispatcher();
}

void startup_screen()
{
zet wat tekst op lcd;
while(1)
{
lees touch screen en doe er wat mee;
if button setup is gedrukt
instellingen();
return;
if button ok is gedrukt
return;
}


void instellingen()
{
zet wat tekst op het lcd;
while(1)
{
lees touch screen en doe er wat mee;
if button naam_wijzigen is gedrukt
naam_wijzigen();
return;
if button terug is gedrukt
return;
}


het volgende werkt.

het weergeven van het startup_screen werkt.
de keuze knop 'ok' werkt en dan wordt er doorgegaan naar de main void en de void dispatcher wordt gestart.
de keuze knop 'setup' werkt ook dan wordt er doorgagaan naar de void instellingen.

onder instellingen gaat het mis.
als dan de knop 'terug' wordt gedrukt kom ik niet terug naar de eigenlijk te starten main loop.

hoe moet ik dit oplossen.

ik maak denk ik ergens een volgorde fout of denkfout maar kan eigenlijk niet een voorbeeld vinden hoe dit aan te vliegen.

Met vriendelijke groeten

Adriaan.

Advertisement

Berichten: 2
Geregistreerd: 18 Aug 2013, 22:41

Re: beginners vraagje void en loops in loops

Berichtdoor BartManNL » 18 Aug 2013, 22:50

Het is in elk geval geen goed gebruik om een while loop te starten waarbij je geen voorwaarden stelt aan hoe land de loop duurt.

carfreak schreef:void instellingen()
{
zet wat tekst op het lcd;
while(1)
{
lees touch screen en doe er wat mee;
if button naam_wijzigen is gedrukt
naam_wijzigen();
return;
if button terug is gedrukt
return;
}


Wat ik zelf zou doen is iets van
Code: Alles selecteren
while(!button_terug_is_gedrukt)
{
  code
}


Uit je tekst blijkt niet wat 'dispatcher' doet. Is het een idee om in de loop() de buttons uit te lezen en daarvandaan de betreffende functions aan te roepen?

Gebruikers-avatar
Berichten: 21
Geregistreerd: 17 Mei 2013, 19:30
Woonplaats: Twello

Re: beginners vraagje void en loops in loops

Berichtdoor Timpje » 18 Aug 2013, 22:55

Hallo Adriaan,

Wat ik zo in de snelheid waarmee ik gekeken heb (vlak voor het naar bed gaan :P) valt mij dit op:
Code: Alles selecteren
void startup_screen()
{
zet wat tekst op lcd;
while(1)
{
lees touch screen en doe er wat mee;
if button setup is gedrukt
instellingen();
return;
if button ok is gedrukt
return;
}


void instellingen()
{
zet wat tekst op het lcd;
while(1)
{
lees touch screen en doe er wat mee;
if button naam_wijzigen is gedrukt
naam_wijzigen();
return;
if button terug is gedrukt
return;
}


In dit stukje code gebruik je wanneer in "Void startup_screen zit gebruik van return, wanneer je in "void instellingen" zit maak je ook gebruik van return.
Zou die return niet vervangen kunnen/moeten worden door iets dat naar "void startup_screen" verwijst, weet even niet wat dit zou moeten zijn. Maar zal even kijken of ik dit kan vinden.

Mvg Tim

Edit: Ik heb iets gelezen over de "Goto" command, misschien is het iets voor je. Er staat ook dat het eigenlijk beter is om het niet te gebruiken maar soms best handig is.
De link : http://arduino.cc/en/Reference/Goto
Arduino Uno, duemilanove & wat losse Atmega 328 :)

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: beginners vraagje void en loops in loops

Berichtdoor nicoverduin » 19 Aug 2013, 21:55

Probeer dit maar:

Code: Alles selecteren
void instellingen()
{
zet wat tekst op het lcd;
while(1)
{
    lees touch screen en doe er wat mee;
    if button naam_wijzigen is gedrukt {
        naam_wijzigen();
        break;
    }
    if button terug is gedrukt {
        break;
    }
}


Door het break statement breek je uit een loop
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3
Geregistreerd: 18 Aug 2013, 20:10

Re: beginners vraagje void en loops in loops

Berichtdoor carfreak » 20 Aug 2013, 11:22

het is gelukt met een combinatie van return en break, vreemd genoeg moet je bij de ene een break geven en de andere een return. als je een void binnen een void aanroept.
om uit beide te kunnen ontsnappen.

groeten Adriaan.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: beginners vraagje void en loops in loops

Berichtdoor nicoverduin » 20 Aug 2013, 12:22

Ik gebruik alleen return als er iets is terug te geven. Anders is de return zinloos. Maar dan moet je functie ook beginnen met de return datatype.

Dus bijv:
Code: Alles selecteren
int functie () {
    zet wat op het scherm
    while (1) {
        if button naam_wijzigen is gedrukt {
            naam_wijzigen();
            return_code = naamwijzigen;
            break;
        }
        if button terug is gedrukt {
           return_code = terug;
           break;
        }
    }
    return return_code
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten