Problem: Menüführung mit LCD

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 :slight_smile: Nur ich bin zurzeit ziemlich ratlos, wie ich die korrekte Funktion hinbekomme. Für sachdienliche Hinweise wäre ich euch dankbar!

Gruß,
Torsten

Hallo Torsten.b,

ich habe vor ein paar Monaten ein Morseprogramm modifiziert. Eine Anzeige hat es nicht, aber ich kann über 4 Tasten folgende Modi
einstellen

  • Ton hoch oder runter
  • Geschwindigkeit hoch oder runter
  • Buchstaben, Zahlen, Buchstaben oder Zahlen gemischt oder ganze Texte
  • Ton ein - aus

Der Text wird über USB ausgegeben.
Ein Relaisausgang ist auch drauf.

Eine Anpassung für eine Anzeige ist dann bestimmt kein Problem.

Gruß Kalli

Hi

bist du schon weitergekommen?

ich hab nahzu das gleiche problem =)