Show Posts
Pages: [1]
1  Forum 2005-2010 (read only) / Deutsch / Problem: Menüführung mit LCD on: January 15, 2011, 08:52:26 am
Hallo Allerseits,

seit Weihnachten mit dem Arduino-Virus infiziert, versuche ich derzeit, eine Routine für die Einstellung verschiedener Parameter zu schreiben - mit bislang mäßigem Erfolg.

Das Gesamtprojekt: Ein Übungsgerät für Morsetelegraphie.  Während das Hauptmenü und die einzelnen Routigen funktionieren, ist es mir nicht möglich, eine Unterroutine für das Setup zum Laufen zu bewegen. Die Routine sieht folgendermaßen aus:


void setup_menue ()
{
  int setup_item=1; // Variablen für Menüpunkte Setup
  int max_setup=2; // Welche Menüpunkte gibt es?
  boolean auswahl1=false;
  boolean enter1=false;
  int i=0;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Setup:");
  delay(200);
  
  

    if (digitalRead(taster_up)==LOW)
    {
      setup_item++;
      auswahl1=true;
      if (setup_item>max_setup) // Schützt vor nicht vorhandenen Menüpunkten
      {setup_item=1;}
     delay(200);
    }
    
    if (digitalRead(taster_dwn)==LOW)
    {
      setup_item--;
      auswahl1=true;
      if (setup_item<1)
      {setup_item=max_setup;}
      delay(200);
    }
    
    if (digitalRead(taster_enter)==LOW)
    {
      enter1=true;
      auswahl1=true;
      delay(200);
    }
 
  
  switch(setup_item)
  {
    
    case 1:
    
      lcd.setCursor(0,1);
      lcd.print("Geschwindigkeit");
      auswahl1=false;
      
      if (enter1==true)
        {
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Geschwindigkeit");
          lcd.setCursor(0,1);
          lcd.print("WPM (10-60):");
          lcd.setCursor(12,1);
          lcd.print(wpm);
          enter1=false;
          delay(150);
        
    
         while (!enter1)
           {
              if (digitalRead(taster_up)==LOW)
              {
                wpm++;
                delay(200);
                if (wpm>60) // Tempo zu hoch?
                {wpm=60;}
                lcd.print("  ");
                lcd.setCursor(12,1);
                lcd.print(wpm);
                auswahl1=true;
                
              }
    
              if (digitalRead(taster_dwn)==LOW)
              {
                wpm--;
                delay(200);
                if (wpm<10) // Zu langsam?
                {wpm=10;}
                lcd.print("  ");
                lcd.setCursor(12,1);
                lcd.print(wpm);
                auswahl1=true;
                
              }
    
              if (digitalRead(taster_enter)==LOW)
              {
                enter1=true;
                auswahl1=true;
                lcd.setCursor(0,1);
                lcd.print("                ");
                lcd.setCursor(0,1);
                
              }
           }
         }
           lcd_spalte=0;
           cwspeed=int(1200/wpm); //Zeiten für eine Puntklänge errechnen
           dot=cwspeed;
           dash=cwspeed*3;  // Neue Geschwindigkeit übernehmen
           enter1=false;
           auswahl1=false;  
        
    break;
  
   case 2:
      lcd.setCursor(0,1);
      lcd.print("Tonhoehe");
      auswahl1=false;
      enter1=false;
    
    break;
  
  }
}



Das Problem: Bei Aufruf der Routine wird sie nach ca. 0.5 s automatisch wieder beendet. Halte ich der Enter-Taster gedrückt, springe ich ins Geschwindigkeit-Menü und kann die Geschwindigkeit ändern.

Ich bin sicher, es ist ein schlimmer Anfängerfehler - also nicht zu laut lachen :-) Nur ich bin zurzeit ziemlich ratlos, wie ich die korrekte Funktion hinbekomme. Für sachdienliche Hinweise wäre ich euch dankbar!

Gruß,
  Torsten
Pages: [1]