Hallo ich habe ein Problem oder komm eher nicht darauf. Ich habe einen Code wo ich auf meinem LCD-Display ein Menü mit dem Namen Autor stehen habe. Ich möchte jetzt gerne in dem Menü Autor wieder ein Menü haben wo ich unterschiedliche Infos wieder auswählen kann. Also grundsätzlich noch zu meinem Code das Menü wird mit dem Joystick gesteuert nach oben und unten ist im Menü durchgehen, Joystick nach rechts ist auswählen und nach links wieder zurück und das möchte ich auch im anderen Menü so beibehalten.
Das wäre der Code für das Menü Autor:
#include <LiquidCrystal.h>
//Definieren der Pins - Joystick
int PinX = A0;
int PinY = A1;
int PinSW = A2;
//Definieren der LCD-Pins - Display
const int rs=12, en=11, d4=5, d5=4, d6=3, d7=6 ;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//Werte von X, Y und SW - Joystick
int ValueX = 0; //Hoch und Runter
int ValueY = 0; //Links und Rechts
int ValueSW = 0;
//Menüeinträge - Display
const char* menu[] = {"Autor"};
const int menuLength = 1;
int menuIndex = 0;
//Menüzustand - Display
bool inSubMenu = false;
void setup()
{
//LCD initialisieren - Display
lcd.begin(16, 2);
lcd.clear();
Serial.begin(9600);
//pinMode - Joystick
pinMode(PinX,INPUT);
pinMode(PinY,INPUT);
pinMode(PinSW,INPUT);
}
void loop()
{
//Einlesen der Werte von X und Y
ValueX = analogRead(PinX);
ValueY = analogRead(PinY);
ValueSW = analogRead(PinSW);
//Ausgabe auf Serial Monitor
Serial.print("x = ");
Serial.print(ValueX);
Serial.print(", y = ");
Serial.println(ValueY);
delay(200);
if (!inSubMenu)
{
if (ValueX >= 900) //Hoch
{
menuIndex--;
if (menuIndex < 0)
{
menuIndex=menuLength-1;
delay(200);
}
}
if (ValueX <= 100) //Runter
{
menuIndex++;
if(menuIndex >= menuLength)
{
menuIndex = 0;
delay(200);
}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menu[menuIndex]);
lcd.setCursor(0,1);
lcd.print("Rechts Select");
if(ValueY >= 900) //Auswählen durch drücke
{
inSubMenu=true;
delay(200);
}
}
else
{
lcd.clear();
switch(menuIndex)
{
case 0:
lcd.setCursor(0,0);
lcd.print("Stegh");
break;
}
lcd.setCursor(0,1);
lcd.print("Links Zuruck");
if(ValueY<=100)
{
inSubMenu=false;
delay(200);
}
}
}
Und das wäre der Code für das Menü was ich gerne im Menü Autor hätte:
#include <LiquidCrystal.h>
//Definieren der Pins - Joystick
int PinX = A0;
int PinY = A1;
int PinSW = A2;
//Definieren der LCD-Pins - Display
const int rs=12, en=11, d4=5, d5=4, d6=3, d7=6 ;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//Werte von X, Y und SW - Joystick
int ValueX = 0; //Hoch und Runter
int ValueY = 0; //Links und Rechts
int ValueSW = 0;
//Autor Untermenü - Display
const char* Autormenu[] = {"Name", "Alter", "Klasse", "Hobby"};
const int Autormenulength = 4;
int AutormenuIndex = 0;
//Menüzustand - Display
bool inAutorMenu = false;
void setup()
{
//LCD initialisieren - Display
lcd.begin(16, 2);
lcd.clear();
Serial.begin(9600);
//pinMode - Joystick
pinMode(PinX,INPUT);
pinMode(PinY,INPUT);
pinMode(PinSW,INPUT);
}
void loop()
{
//Einlesen der Werte von X und Y
ValueX = analogRead(PinX);
ValueY = analogRead(PinY);
ValueSW = analogRead(PinSW);
//Ausgabe auf Serial Monitor
Serial.print("x = ");
Serial.print(ValueX);
Serial.print(", y = ");
Serial.println(ValueY);
delay(200);
if(!inAutorMenu)
{
if (ValueX >= 900) //Hoch
{
AutormenuIndex--;
if (AutormenuIndex < 0)
{
AutormenuIndex=Autormenulength-1;
delay(200);
}
}
if (ValueX < 100)
{
AutormenuIndex++;
if (AutormenuIndex >= Autormenulength)
{
AutormenuIndex = 0;
delay(200);
}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(Autormenu[AutormenuIndex]);
lcd.setCursor(0,1);
lcd.print("Rechts Select");
if(ValueY >= 900)
{
inAutorMenu = true;
delay(200);
}
}
else
{
lcd.clear();
switch(AutormenuIndex)
{
case 0:
lcd.setCursor(0,0);
lcd.print("Patricia Stegh");
break;
case 1:
lcd.setCursor(0,0);
lcd.print("18");
break;
case 2:
lcd.setCursor(0,0);
lcd.print("5BHME");
break;
case 3:
lcd.setCursor(0,0);
lcd.print("Fussball");
break;
}
lcd.setCursor(0,1);
lcd.print("Links Zuruck");
if (ValueY <= 100)
{
inAutorMenu = false;
delay(200);
}
}
}
Ich danke für die Hilfe und schönen Tag noch!