- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Arduino: Menü erstellen bei dem ich mehrere Variablen ändern kann.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2017
    Beiträge
    12

    Arduino: Menü erstellen bei dem ich mehrere Variablen ändern kann.

    Anzeige

    Praxistest und DIY Projekte
    Hallo miteinander,

    ich möchte sehr gerne eine kleine Messanlage bauen.
    Hierfür benötige ich ein kurzes Menü, welches über ein 16x2 LCD-Display angezeigt wird.
    Ein Joystick soll das Menü steuern können.
    Ich habe auch schon einmal ein Projekt mit einem Menü gemacht, allerdings habe ich damals eine Library verwendet, die für meine aktuelle Aufgabe nicht funktionsfähig ist.

    Menü soll so aufgebaut sein:

    Start Experiment (Durch Drücken des Joystick beginnt hier das Experiment)
    Einstellungen: Pulsdauer: x Millisekunden (x soll durch rechts & links Steuerung des Joystick veränderbar sein und angezeigt werden)
    Frequenz: y Sekunden (y soll durch rechts & links Steuerung des Joystick veränderbar sein und angezeigt werden)
    Dauer: t Stunden (t soll durch rechts & links Steuerung des Joystick veränderbar sein und angezeigt werden)

    Natürlich sollen alle Variablen x, y und t individuell einstellbar sein.

    Eigentlich ein nur sehr kleines Menü, allerdings hab ich große Schwierigkeiten das umzusetzen. Da ich noch ein ziemlicher Anfänger bin, deshalb bitte verständliche Antworten.

    Was ich nun anfangs benötige, wäre eine passende Library mit der ich ein solches Menü programmieren kann. Hat hier jemand vlt. schon mal eine passende verwendet?
    Auch hilfreich wäre ein Tipp wie ich das ganze möglichst einfach umsetzen könnte?

    Vielen Dank für eure Hilfe

  2. #2
    HaWe
    Gast
    Zitat Zitat von Rudi 19 Beitrag anzeigen
    Hallo miteinander,

    ich möchte sehr gerne eine kleine Messanlage bauen.
    Hierfür benötige ich ein kurzes Menü, welches über ein 16x2 LCD-Display angezeigt wird.
    Ein Joystick soll das Menü steuern können.
    Ich habe auch schon einmal ein Projekt mit einem Menü gemacht, allerdings habe ich damals eine Library verwendet, die für meine aktuelle Aufgabe nicht funktionsfähig ist.

    Menü soll so aufgebaut sein:

    Start Experiment (Durch Drücken des Joystick beginnt hier das Experiment)
    Einstellungen: Pulsdauer: x Millisekunden (x soll durch rechts & links Steuerung des Joystick veränderbar sein und angezeigt werden)
    Frequenz: y Sekunden (y soll durch rechts & links Steuerung des Joystick veränderbar sein und angezeigt werden)
    Dauer: t Stunden (t soll durch rechts & links Steuerung des Joystick veränderbar sein und angezeigt werden)

    Natürlich sollen alle Variablen x, y und t individuell einstellbar sein.

    Eigentlich ein nur sehr kleines Menü, allerdings hab ich große Schwierigkeiten das umzusetzen. Da ich noch ein ziemlicher Anfänger bin, deshalb bitte verständliche Antworten.

    Was ich nun anfangs benötige, wäre eine passende Library mit der ich ein solches Menü programmieren kann. Hat hier jemand vlt. schon mal eine passende verwendet?
    Auch hilfreich wäre ein Tipp wie ich das ganze möglichst einfach umsetzen könnte?

    Vielen Dank für eure Hilfe
    hallo,
    eine schnelle Google Suche
    https://www.google.de/search?q=Ardui...WvNILCXrP5mtAH
    liefert u.a.
    http://www.dserv01.de/2013/10/einfac...-16x2-display/

    ...das sieht doch schon mal ganz einfach aus. Auch wenn ich selber wenigstens 4-zeilige Displays verwenden würde (LCD2004), und eine 6. Taste für ESC/BACK.

  3. #3
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.075
    Siehe auch im abgeschlossenen Thread:
    https://www.roboternetz.de/community...-bei-Men%C3%BC

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    07.11.2017
    Beiträge
    12
    Erstmal Entschuldigung zur neu Eröffnung des threads, habe auf mehr Ansätze gehofft. Nun da hab ich dann selbst weiter recherchiert und nach einem passend Video folgenden Code entwickelt:
    Code:
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    
    const int numOfInputs = 5;
    const int inputPins[numOfInputs] = {30,31,32,33,34,};
    int inputState[numOfInputs];
    int lastInputState[numOfInputs] = {LOW,LOW,LOW,LOW,LOW};
    bool inputFlags[numOfInputs] = {LOW,LOW,LOW,LOW,LOW};
    long lastDebounceTime[numOfInputs] = {0,0,0,0,0};
    long debounceDelay = 5;
    
    //LCD Menu Logic
    const int numOfScreens = 3;
    int currentScreen = 0;
    String screens[numOfScreens][2] =
    {
      {"Pulsdauer","ms"}, 
      {"Frequenz", "s"}, 
      {"Wiederholungen","mal"}
    };
    
    int parameters[numOfScreens];
    int x = 0;
    int y = 0;
    int t = 0;
    int s = 0;
    
    void setup()
    {
      pinMode(40, OUTPUT);      
      pinMode(41, OUTPUT);
      pinMode(42, OUTPUT);      
      pinMode(43, OUTPUT); 
      for(int i = 0; i < numOfInputs; i++) 
        {
          pinMode(inputPins[i], INPUT);
          digitalWrite(inputPins[i], HIGH); // pull-up 20k
        }
        //Serial.begin(9600);
        lcd.begin();
      }
    
    void loop()
    {
      setInputFlags();
      resolveInputFlags();
    }
    
    void setInputFlags() {
      for(int i = 0; i < numOfInputs; i++) 
      {
        int reading = digitalRead(inputPins[i]);
        if (reading != lastInputState[i]) 
        {
          lastDebounceTime[i] = millis();
        }
        if ((millis() - lastDebounceTime[i]) > debounceDelay)
        {
          if (reading != inputState[i]) 
          {
            inputState[i] = reading;
            if (inputState[i] == HIGH)
            {
              inputFlags[i] = HIGH;
            }
          }
        }
        lastInputState[i] = reading;
      }
    }
    
    void resolveInputFlags() 
    {
      for(int i = 0; i < numOfInputs; i++) 
      {
        if(inputFlags[i] == HIGH) 
        {
          inputAction(i);
          inputFlags[i] = LOW;
          printScreen();
          //showxyt(i);
          Messunglaeuft(i);
        }
      }
    }
    
    void inputAction(int input) 
    {
      if(input == 0) 
      {
        if (currentScreen == 0) 
        {
          currentScreen = numOfScreens-1;
        }
        else
        {
          currentScreen--;
        }
      }
      if(input == 1) 
      {
        if (currentScreen == numOfScreens-1) 
        {
          currentScreen = 0;
        }
        else
        {
          currentScreen++;
        }
      }
      
      if(input == 2 && currentScreen == 0) 
      {
        parameterChangex(0);
        x = x+100;
      }
      if(input == 3 && currentScreen == 0) 
      {
        parameterChangex(1);
        x = x-100;
      }
      if(input == 2 && currentScreen == 1) 
      {
        parameterChangey(0);
        y = y+1000;
      }
      if(input == 3 && currentScreen == 1) 
      {
        parameterChangey(1);
        y = y-1000;
      }
      if(input == 2 && currentScreen == 2) 
      {
        parameterChanget(0);
        t++;
      }
      if(input == 3 && currentScreen == 2) 
      {
        parameterChanget(1);
        t--;
      }
     }
     
    void parameterChangex(int key) 
    {
      if(key == 0) 
      {
        parameters[currentScreen]= parameters[currentScreen]+100;
      }
      else if(key == 1) 
      {
        parameters[currentScreen]= parameters[currentScreen]-100;
      }
    }
    void parameterChangey(int key) 
    {
      if(key == 0) 
      {
        parameters[currentScreen]++;
      }
      else if(key == 1) 
      {
        parameters[currentScreen]--;
      }
    }
    
    void parameterChanget(int key) 
    {
      if(key == 0) 
      {
        parameters[currentScreen]++;
      }
      else if(key == 1) 
      {
        parameters[currentScreen]--;
      }
    }
    
    //void showxyt(int input)
    //{
    //  if (input == 4)
    //  {
    //  lcd.clear();
    //  lcd.print("x=");
    //  lcd.print(x);
    //  lcd.print("y=");
    //  lcd.print(y);
    //  lcd.print("t=");
    //  lcd.print(t);
    //  delay(1000);
    //  }
    //}
    
    void Messunglaeuft (int input)
    {
      while (input == 4 && t != 0 && s < t)
      {
      lcd.clear();
      lcd.print("Messunglaeuft");  
      lcd.setCursor(0,1);
      lcd.print("x=");
      lcd.print(x);
      lcd.print(" ");
      lcd.print("y=");
      lcd.print(y);
      lcd.print(" ");
      lcd.print("t=");
      lcd.print(t);
      lcd.print(" ");
      digitalWrite(40, HIGH);
      digitalWrite(41, HIGH);
      digitalWrite(42, LOW);
      digitalWrite(43, LOW); 
      delay(x/2);
      
      digitalWrite(42, HIGH);
      digitalWrite(43, HIGH);
      digitalWrite(40, LOW);
      digitalWrite(41, LOW); 
      delay(x/2);
      s++;
    
      digitalWrite(40, LOW);
      digitalWrite(41, LOW);
      digitalWrite(42, LOW);
      digitalWrite(43, LOW);
      delay(y);
      }
    
      if( s == t && t != 0)
      {
        lcd.clear();
        lcd.print("Messung");
        lcd.setCursor(0,1);
        lcd.print("abgeschlossen");
        s = 0;
      }
     
      
    }
    void printScreen() 
    {
     
      lcd.clear();
      lcd.print(screens[currentScreen][0]);
      lcd.setCursor(0,1);
      lcd.print(parameters[currentScreen]);
      lcd.print(" ");
      lcd.print(screens[currentScreen][1]);
      lcd.print(" ");
     
      //Variablen Test
      //(lcd.print("x=");lcd.print(x);lcd.print("y=");lcd.print(y);lcd.print("t=");lcd.print(t);
      
    }
    Ist jetzt noch mit 5 Tasten statt mit dem Joystick. Hab mich mit dem Joystick noch nicht ausreichend befasst. Funktioniert auch schon alles wie gewünscht. Solltet ihr Zeit haben, wäre es cool, wenn jemand den Code kurz überprüft und evtl Tipps zum beschönigen gibt. Da ich bisher nur ein Anfänger bin

    Viele Grüße

Ähnliche Themen

  1. UINT32 Variablen in verschiedenen ISR ändern
    Von Bumbum im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 27.03.2014, 20:23
  2. utoa für mehrere Variablen
    Von QuadV im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 25.12.2013, 23:26
  3. Variablen ändern sich durch Berechnung anderer Variablen
    Von Amri im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 03.05.2013, 18:30
  4. einfaches menü erstellen
    Von xbgamer im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 31.01.2010, 14:50
  5. Ein Menü erstellen
    Von pat2381 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 09.07.2007, 21:47

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests