Show Posts
Pages: [1]
1  Using Arduino / Programming Questions / Re: need help with a switch in switch statement reading a keypad on: December 12, 2012, 02:53:39 pm
Quote
How do i get it to work in a blocking way ?

      char subkey = customKeypad.getKey();
      // Wait until a key IS pressed
      while(subkey == NO_KEY)
      {
         subkey = customKeypad.getKey();
      }


      switch  (subkey)
      {
      case '*':

Hi PaulS,

This did the trick.
It is working now,

One question, how do i break from the second switch case statement directly to the main loop.
when i now break from the second switch case statement i still have to push the # key to end the first switch case statement.

Geetings Adriaan
2  Using Arduino / Programming Questions / Re: need help with a switch in switch statement reading a keypad on: December 12, 2012, 02:50:39 am
Code:
Void loop();
{
  BLA BLA BLA
Post your code, then maybe you can get help.

Hi,

It is not important to display the used code that is replaced by the BLA BLA line ( its only lcd.print stuff)
it is not important for the question.

@ PaulS
How do i get it to work in a blocking way ?

Greetings Adriaan
3  Using Arduino / Programming Questions / need help with a switch in switch statement reading a keypad on: December 11, 2012, 04:24:52 pm
Greetings all.

i hav a problim with reading a keypad in a switch / case statement ( the first is working but when i want to use a second one it won't work )
It is a simple YES NO question where an LCD shows the Question and you press de * for Yes or the # for NO

how do i get to the second switch case statement ( it is not working )
And if it is corrected and working, how do i get back to the main loop and go on the run the code further on at the end of the switch case statements

basic senario.

1. question to be answerd with YES or NO
2a. When answer is YES execute code after Case # ( from first switch case statement)
2b. When answer is NO execute code after Case* ( from first switch case statement and enter next switch case statement )
3a. When answer to second question is YES execute code after Case # ( from second switch case statement and return to main loop and run code further on beyound switch statements)
3b. When answer to second question is NO execute code after Case * ( from second switch case statement and return to main loop and run code further on beyond switch statements)

i hope someone can help me with this.
i am working on it for quite some time now and don't seem to get it clear.



Code:
Void loop();
{
  BLA BLA BLA
    lcd.print("# = YES / * = NO");
  char keyone = customKeypad.getKey();
  switch (keyone)
  {   
  case '*':
    {
      BLA BLA
        lcd.print("Next questiont");
      lcd.print("# = YES / * = NO");
      char subkey = customKeypad.getKey();
      switch  (subkey)
      {
      case '*':
        {
          lcd.print("Next question");
          should i use break or return here
        }
      case '#':
        {
          lcd.print("Some text for #");
          should i use break or return here what does a return do her and what does a break do here
          what sould i use to break out of the second switch loop to go back to the main loop ( so out of the first swicht loop too)
        }
      default:
        {
          return;
        }           
      }
    }
  case '#':
    {
      lcd.print("some text2 ");
      break; 
    }
  default:
    return;
  }

  some default code to run further on

}


Greetings Adriaan
4  Using Arduino / Programming Questions / Re: running switch case statement in switch case statement to read keypad twice on: December 08, 2012, 02:36:01 pm
Hi first of all in my editor its perfectly lined up but when i paste the code here it is getting a horrible layout.

sorry the code was already changed, the line firstkey = NO_KEY; sould not have been there. ( was for testing)

Still it won't read the keypad for the second

Code:
void lokadresisGoed()  {
   \\some code to reset outputs
   for (int f = 0; f < 5; f++) {
        p = (locadres[f] - '0');
        switch (p)
        {
          case 0:
            {
           //some code to send zero to outputs
            break;
            }
          case 1:

The array is "locadres", based on the content of the array bitwise the actions case 0 and case 1 are then put to work.
so if bit one is a 5, case 5 wil come in action.

after the readout of the 4 bits are done the program should move on to the next question where the kepad comes back in action to type a * or a # to get an YES or NO
the case * and case # after the question should result in some actions.

My technical english is not af good as yours ( i'm just a Dutch Guy )

Greeting Adriaan
5  Using Arduino / Programming Questions / running switch case statement in switch case statement to read keypad twice on: December 08, 2012, 12:16:43 pm
Geerings all.

i have a problem to read for the second time the keypad in a switch case senario.

i am reading a keypad to fill an 4 digit array and when i press # it wil start to reed the array bit for bit and does som actions based on the read action.
so it reads a 1 it is putting some outputs to high.
that part is working fine.

One of the steps is when it reads a bit with the value 4 it shoud start a second question witch should hav actions on the keypad again.
and based on that is should take further actions based on the autcome of that keypad entry.

but it wont start the second keypad read. ( it is a switch case inside a switch case )

whats wrong with the code ( or my way of thinking this was right )

Greetings adriaan

Code:
void lokadresisGoed()
  {
\\some code to reset outputs

  for (int f = 0; f < 5; f++)
    {
        p = (locadres[f] - '0');
        switch (p)
        {
          case 0:
            {

//some code to send zero to outputs
           
break;
            }
          case 1:
            {

//some code to send one to outputs
           
break;
            }
          case 2:
            {

//some code to send two to outputs
break;
            }
          case 3:
 
   
// and so on for 3 to 9
 
    break; 
            }
          case 9:
            {

              //some code to send nine to outputs

              break; 
            }
          default:
            {             
 
            //some code to set all outputs to off

            }
        }
    }
       
//some code to ask if the direction is correct and run the direction test
// to be answered with #=Yes / *=NO

//This part is not working.
//only when i press 2 times the # key it will go back to the main program

char firstkey = customKeypad.getKey();
        firstkey = NO_KEY;
        if (firstkey != NO_KEY)
        {   
          switch(firstkey)
            {
             case '*':
               {
                  // some code to run when * is pressed
  // some code with an question on the lcd
  // answered with #=yes / *=NO
 
                  char subkey = customKeypad.getKey();
                  if (subkey !=NO_KEY)
                    {
                     switch(subkey)
                       {
                       case '*':
{
         
//some code to change direction and run the direction test

break;
}
                       case '#':
    {
                         
  //some code run when direction is correct
 
  }
                       default:
                        { 
                        }
                       }
                    }
}
             case '#':
               {
               
//Some code run when direction is correct

             default:
             {
             }
            }
        }           
    }     
         


void loop () {                                                                       
  char key = customKeypad.getKey();                                                 
  if (key != NO_KEY)                                                                 
  {
    switch(key)                                                                     
    {
      case '#':                                                                     
        lcd.clear();                                                                 
        lcd.setCursor(0,0);                                                         
        lcd.print("type adres ");                                               
        lcd.setCursor(0,1);                                                           
        lcd.print("Adres :  ");                                                     
        lcd.setCursor(16,1);                                                             
        lcd.print("A=Enter  C=clear");                                                       
        lcd.setCursor(8,1);                                                             
        z=0;                                                                         
        break;                                                                         
      case 'A':                                                                   
        delay(100);                                                                 
        lokadresisGoed();                                                         
        break;                                                                     
      case 'C':
        delay(100);
        memset(locadres,0,sizeof(locadres));                                         
        lcd.clear();                                                                 
        lcd.setCursor(0,0);                                                           
        lcd.print("Type adres ");                                               
        lcd.setCursor(0,1);                                                           
        lcd.print("Adres :  ");                                                     
        lcd.setCursor(16,1);                                                           
        lcd.print("A=Enter  C=Clear");                                                       
        lcd.setCursor(8,1);                                                           
        z=0;
        break;
      default:                                                                       
//        Serial.println(key);
        lcd.print(key);                                                             
        locadres[z]=key;                                                           
        z++;                                                                         
    }
  }
}


6  International / Nederlands / If Else in Switch Case problemen on: December 08, 2012, 07:27:14 am
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.
}


7  International / Nederlands / Re: op keypad een nummer intoetsen en die dan naar uitgangen sturen on: November 30, 2012, 04:49:36 pm
Tja snel he,

op zich heb ik wel eens wat gelezen uit een array ( doe ik in deze ook ) alleen op welke manier moet je 1 teken lezen, en dan de volgende , enz.

trouwens de tekens moeten van link naar rechts worden gelezen, de code wordt ook van links naar rechts gevuld.
b.t.w. de code begint nooit met een 0.

Groetjes Adriaan
8  International / Nederlands / Re: op keypad een nummer intoetsen en die dan naar uitgangen sturen on: November 30, 2012, 04:40:19 pm
op dit moment heb ik dit stukje code lopen

Code:
void readKeypad(){
  char key = customKeypad.getKey();                                                 
  if (key != NO_KEY)  {
    switch(key)  {
      case '#':                                                                       
        lcd.clear();                                                                 
        lcd.setCursor(0,0);                                                           
        lcd.print("toest code");                                                 
        lcd.setCursor(0,1);                                                             
        lcd.print(" A=Enter  C=Wis ");                                                       
        z=0;                                                                           
        break;                                                                         
      case 'A':                                                                       
        delay(100);                                                                 
        codeOKcheck();                                                       
        break;                                                                   
      case 'C':
        delay(100);
        memset(code,0,sizeof(code));                                             
        z=0;
        break;
      default:                                                                       
        code[z]=key;                                                               
        z++;                                                                   
    }
  }
}

void loop () {                                                                       
  readKeypad();                                                                   
}

de void (code) geeft puur en aleen tekst op het LCD dat de code goed is.
 
alleen dan zou ik graag willen dat hij positie voor postitie uit het array leest en hiermee een betreffende uitgang aanstuurd ( van de demultiplexer uiteraard )
door een binaire waarde op de demuxer te zetten zodat 1 uitgang hoog wordt)

Code:
//uitgang cijfer 2
void geeftwee(){
  digitalWrite(INHIBIT,1);
  delay(100);
  digitalWrite(BIT0,0);
  digitalWrite(BIT1,1);
  digitalWrite(BIT2,0);
  digitalWrite(BIT3,0);
  digitalWrite(INHIBIT,0);
  delay(100);
}

heb je een idee om dit code technisch op te lossen ?

Groetjes Adriaan
9  International / Nederlands / op keypad een nummer intoetsen en die dan naar uitgangen sturen on: November 30, 2012, 03:27:04 pm
Hoi Allemaa,

ik ben kompleet nieuw in de arduino wereld en heb al een aantal dingen gebouwd, ( geweldige taal )
nu ben ik bezig met een matrix keyboard 4x4 om daar een nummer mee in te toetsen zodat deze ( via een LCD bevestigd moet worden met accoord ) en dat deze daarna een aantal uitgangen achter elkaar aanstuurd.

de "code" kan tussen de 1 en 4 cijfers zijn. dus als tje ware van 1 tot 9999
deze stop ik nu in een INT en dat lukt ook allemaal, ook het weergeven van de ingetoetste waarde komt op het LCD en de bevestiging lukt ook.

Dit was even het voorwoord en dan Nu het probleem.
ik wil deze "code" op een aantal uitgangen zichtbaar maken, dus b.v.
als ik als "code" "264" intoets dan moet b.v. eerst uitgang 2 hoog worden met een delay(100) en dan weer laag en dan uitgang 6 hoog enz.

op welke manier kan ik dit realiseren omdat de "code" telkens anders kan zijn varierend van 1 tot 9999.
dus de  "array"  is eigenlijk 4 plaatsen alleen kan het zo zijn dat alleen plaats 1 gevuld is bij een "code" van b.v.  "5".

ik hoor graag hoe ik dit moet aanvliegen.

ik hoop dat jullie het een beetje begrijpen.

samenstelling project arduino one, matrix keypad, LCD, CD4514  4 to 16 multiplexer. ( de multiplexer is om de code de verschillende uitgangen hoog te laten zijn )

Groetjes Adriaan
Pages: [1]