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