Pages: [1]   Go Down
Author Topic: If Else in Switch Case problemen  (Read 726 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Allemaal,

ik ben wat acties aan het uitvoeren op basis van keypad toets aanslagen.
ik heb een switch case lopen waarin ik op basis van een toets een actie wil uitvoeren
Bepaalde acties vragen om een extra actie die dan ook weer een toest aanslag vereisen.
dus eigenlijk een case in case.
Als deze case in case actie dan klaar is moet hij weer opnieuw met de vraag beginnen.

ik maak ergens een fout, want hij gaat niet terug naar het begin. ( wel als ik 2 keer op het # druk )

enig idee wat ik fout in de code heb staan ? ( af aanwijzingen hoe ik het anders moet doen zijn natuurlijk zeer welkom naar mij als beginner )

hieronder een deel van de code welke zeer ingekort is om het wat leesbaarder te houden

Groeten Adriaan

Code:
void readKeypad(){
  char key = customKeypad.getKey();                                                  // lees de toets die gedrukt wordt en plaats deze in de variabele key
  if (key != NO_KEY)                                                                 // blijf in de loop totdat er een toets wordt gelezen
  {
    switch(key)                                                                      // als een toets wordt gedrukt kijk of aan 1 van de volgende voorwaarden wordt voldaan
    {
      case '#':                                                                      // als de toest die gedrukt is een # is dan voer wat hieronder staat uit
      //zet tekst met vraag op lcd en wacht op toetsen tot de A wordt gedrukt
      break;                                                                       // sla de rest van de procedure over en ga naar default: 
      case 'A':                                                                      // als de toets die gedrukt is een A is dan voor wat hieronder staat uit
          //zet vraag op lcd met druk B als goed en # voor opnieuw
          key = NO_KEY;
          while (key == NO_KEY)
           {
             key = customKeypad.getKey();
              if (key == 'B')
                {
                delay(100);
                //lees de gedrukte toetsen array uit en voer daarmee onderstaande opdrachten uit. ( 4 positi
                  for (int f = 0; f < 5; f++)
                  {
                  p = (locadres[f] - '0');
                  switch (p)
                    {
                    case 0:
                      {
                        break; 
                      }
                      .......
                       // case 1 tot en met 8
                      .......
                    case 9:
                      {
                        //doe iets als gedrukte toets is 9
                        break; 
                      }
                    default:
                      {             
                      //doe iets als niets van bovenstaande geld
                      }
                    }
                  }

                  //zet tekst op scherm met vraag richting goed druk # richting fout druk *

                  key = NO_KEY;
                  while (key == NO_KEY)
                  {
                    key = customKeypad.getKey();
                    if (key == '*')
                    {
                      //geef keer opdracht
                      //zet weer tekst op lcd met vraag richting goed druk # richting fout druk *
                      key = NO_KEY;
                      while (key == NO_KEY)
                      {
                      key = customKeypad.getKey();
                      if (key == '*')  // controleer of er een toets wordt gedrukt.
                        {
                        break;
                        }
                      if (key == '#')
                        {
                        // geef akkord opdracht 
                        }
                      else key = NO_KEY;
                      }
                    if (key == '#')
                    {
                      //geef akkoord opdracht
                    }
                    else key = NO_KEY;
                   }
                  }
                }
              if (key == '#')                                                                 // als # wordt gedrukt voer onderstaand uit
                {
                delay(100);                                                                   // voor extra debounce
                break;
                }
              else key = NO_KEY;
            }
           memset(locadres,0,sizeof(locadres));                                               // maak het array locadres leeg voor de volgende ronde
           break;                                                                       // sla de rest van de procedure over en ga naar default:
      case 'C':
        delay(100);
        memset(locadres,0,sizeof(locadres));                                         // maak het array locadres leeg voor de volgende ronde
        z=0;
        break;
      default:                                                                       // voer wat hierna komt standaard uit
        Serial.println(key);
        lcd.print(key);                                                              // plaats het ingetoetste cijfer op het lcd
        locadres[z]=key;                                                             // vul het array lokadres met het gedrukte cijfer
        z++;                                                                         // ga naar de volgende positie in het array
    }
  }
}

void loop () {                                                                       // start de main loop en stop nooit weer
  readKeypad();                                                                      // spring naar subroutine toetsenbordlezen met vraag om lokadres in te voeren.
}


Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1920
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Carfreak
Het is geen goed idee om meerdere getkey functies te hebben. Zo verlies je het overzicht en krijg je problemen zoals je omschrijft.
Wat je beter kan doet is een vlag zetten in welke status je zit. Dus als je een speciale toest aanslaat doe je
Modus = X


nu kan je al je cases onder elkaar zetten met telkens een switch voor
switch (Modus)
case X:
{
switch (key)
...

Ik hoop dat het wat duidelijk is.
Met vriendelijke groet
Jantje

Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Pages: [1]   Go Up
Jump to: