Arduino Menü mit LED

OP #5417913
Lesenswert?

Hallo. Ich habe gerade erst begonnen mit der Arduino programmierung und 
stehe daher noch fast am Anfang und stehe gerade vor einem Problem.

Ich möchte ein Menü erstellen welches ein paar Unterpunkte aufweist wo 
in jedem Unterpunkt eine unterschiedliche LED ein bzw. ausgeschaltet 
wird. Ich habe schon ein paar Zeilen geschrieben das Fnktioniert auch im 
großen und ganzen nur gibt es noch ein paar Kleinigkeiten die noch nicht 
100% funktionieren.

Ich möchte die LED´s mit einem Tastendruck z.B.: "Steuerung" einschalten 
dann kommt im LCD die Schrift "Steuerung Ein" die Schrift erlischt nach 
1,5 Sekunden wieder. Das ist noch nicht das Problem. Jetzt möchte ich 
die LED wieder mit dem gleichen Tastendruck wieder ausschalten dann wird 
im LCD geschreiben "Steuerung Aus". Das bedeutet das ich einen Zähler 
bei der Taste brauchen werde (0 und 1), nur weis ich nicht und finde 
auch nichts vernünftiges wie man das programmiert. Des weiteren möchte 
ich dann z.B.: bei "Blinker Links" genau das gleiche prozedere haben nur 
das "Steuerung" unverändert bleibt.

Habt ihr eine Lösung wie ich das realisieren kann bzw. kennt ihr ein 
gutes Buch wo das genau beschrieben wird (für Anfänger).

Ich danke jetzt schon für die Hilfe.

Christofer
Angehängte Dateien:
#5417919
Lesenswert?

ich glaube nicht, dass deine Programmierumgebung mit "Bildchen" (png) 
"gefüttert" wird. Sogar 5 verschiedene Bildchen, welche man einzeln 
aufrufen muss, um sich einen Überblick über das gesamte Kunstwerk zu 
verschaffen.

Diese Vorgehensweise, deinen Code in deiser Weise der Öffentlichkeit zu 
präsentieren ist .... sub-optimal.

Es ist wesentlich sinnvoller, deinen Code als Text (perAnhang oder 
eingebettet) zu senden. Somit könnten Hilfswillige dir im Code 
entsprechende Hinweise einbetten.

Oder glaubst du, jemand gibt dir Tips wie: Bildchen nr. 3, 5 cm vom 
oberen Rand entfernt, da ist der Fehler?
OP #5417923
Lesenswert?

//Taster Zaehler



int taste = 7;
int zaehler = 0;
int set =0;
int LED = 4;

void setup ()
{
  Serial.begin(9600);
  pinMode (taste, INPUT);
  digitalWrite (taste, HIGH);
  pinMode (LED, OUTPUT);
}

void loop ()

{
  if (digitalRead(taste) == LOW && set == 0)
  {
    zaehler++;
    Serial.print (zaehler);
    set=1;
    digitalWrite (LED, HIGH);

  }
  if (digitalRead(taste) == HIGH && set == 1)
  {
    delay(250);
    set=0;
  }
  zaehler = zaehler &  1;
}
OP #5417925
Lesenswert?

#include <LiquidCrystal.h> // LCD Bibliothek

LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // LCD Ausgänge definieren

int upButton = 2; // Button Ausgang definieren
int downButton = 6; // Button Ausgang definieren
int selectButton = 7; // Button Ausgang definieren
int backButton = 1;
int HauptMenu = 1;
int UnterMenu = 1;

void setup() {

  lcd.begin(16,2); // LCD Anzeigengröße definieren (16 Zeichen und 2 
Spalten)
  pinMode(upButton, INPUT_PULLUP); // Button als INPUT_PULLUP definieren
  pinMode(downButton, INPUT_PULLUP); // Button als INPUT_PULLUP 
definieren
  pinMode(selectButton, INPUT_PULLUP); // Button als INPUT_PULLUP 
definieren
  pinMode(backButton, INPUT_PULLUP); // Button als INPUT_PULLUP 
definieren
  updateHauptMenu ();
}

void loop() {
if (!digitalRead (downButton)) //Button Auslesen
  {
    HauptMenu++; //Menu zählt um eines hinauf
    updateHauptMenu ();
    delay(100); //Verzögerung
    while (!digitalRead(downButton)); // Liest den Button nochmals aus
  }
if(!digitalRead(upButton))
  {
    HauptMenu--; //Menu zählt um eines weniger
    updateHauptMenu ();
    delay(100); //Verzögerung
    while (!digitalRead(upButton)); // Liest den Button nochmals aus
  }
if(!digitalRead(selectButton))
  {
    executeAction(); // führt die aufgeforderte Aktion aus
    updateHauptMenu ();
    delay(100); //Verzögerung
    while (!digitalRead(selectButton)); // Liest den Button nochmals aus
  }
}

void updateHauptMenu()
  {
  switch (HauptMenu) {
    case 0:
      HauptMenu = 1;
      break;
    case 1:
      lcd.clear(); // LCD Löschen
      lcd.print(">Steuerung"); //LCD Ausgabe
      lcd.setCursor(0, 1); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Zeit abfragen"); //LCD Ausgabe
      delay(100);
      break; // Pause
    case 2:
      lcd.clear(); // LCD Löschen
      lcd.print(">Zeit abfragen"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Blinker Links"); //LCD Ausgabe
      delay(100);
      break; // Pause
    case 3:
      lcd.clear(); // LCD Löschen
      lcd.print(">Blinker Links"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Blinker Rechts"); //LCD Ausgabe
      delay(100);
      break; // Pause
    case 4:
      lcd.clear(); // LCD Löschen
      lcd.print(">Blinker Rechts"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Nebelschlussl"); //LCD Ausgabe
      delay(100);
      break; // Pause
    case 5:
      lcd.clear(); // LCD Löschen
      lcd.print(">Nebelschlussl"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Bremsleuchte"); //LCD Ausgabe
      delay(100);
      break; // Pause
   case 6:
      lcd.clear(); // LCD Löschen
      lcd.print(">Bremsleuchte"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Schlusslicht Li"); //LCD Ausgabe
      delay(100);
      break; // Pause
   case 7:
      lcd.clear(); // LCD Löschen
      lcd.print(">Schlusslicht Li"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(" Schlusslicht Re"); //LCD Ausgabe
      delay(100);
      break; // Pause
   case 8:
      lcd.clear(); // LCD Löschen
      lcd.print(" Schlusslicht Li"); //LCD Ausgabe
      lcd.setCursor(0, 2); // LCD fängt an Stelle 0,1 zum schreiben an
      lcd.print(">Schlusslicht Re"); //LCD Ausgabe
      delay(100);
      break; // Pause
   case 9:
      HauptMenu = 8;
      break;
  }
  }
  void executeAction() { // Handlung wenn SelectButton gedrückt wurde
  switch (HauptMenu) {
    case 1:
      action1(); //Ausführen von Aktion
      break; // LCD Löschen
    case 2:
      action2(); //Ausführen von Aktion
      break; // LCD Löschen
    case 3:
      action3(); //Ausführen von Aktion
      break; // LCD Löschen
    case 4:
      action4(); //Ausführen von Aktion
      break;  // LCD Löschen
  }
}
  void action1() { // Aktionen deklarieren
  lcd.clear();  // LCD Löschen
  lcd.print("Steuerung"); //LCD Ausgabe
  lcd.setCursor(0, 1); // LCD fängt an Stelle 0,1 zum schreiben an
  lcd.print("Ein"); //LCD Ausgabe
  delay(1500); // Pause
}
void action2() { // Aktionen deklarieren
  lcd.clear(); // LCD Löschen
  lcd.print(">Executing #2"); //LCD Ausgabe
  delay(1500); // Pause
}
void action3() { // Aktionen deklarieren
  lcd.clear(); // LCD Löschen
  lcd.print(">Executing #3"); //LCD Ausgabe
  delay(1500);// Pause
}
void action4() { // Aktionen deklarieren
  lcd.clear(); // LCD Löschen
  lcd.print(">Executing #4"); //LCD Ausgabe
  delay(1500); // Pause
}
#5417931
Lesenswert?

Dein Problem liegt nicht am Code bzw. hat der Code gar nichts mit deinem 
Problem zu tun. Du brauchst unbedingt mehr Grundlagen!

Wenn wir dir hier einfach die Lösung hinschreiben, dann klappt das zwar 
vielleicht, aber nutzt es dir nichts. Beim nächsten Problem bist du 
wieder auf dich gestellt.

An deiner Stelle würde ich mir ein C-Buch (ggf. auch online) suchen, um 
die Grundlagen und auch die Denkweise zu lernen und zu trainieren.
Gast #5417986
Lesenswert?

Christofer W. schrieb:
> #include <LiquidCrystal.h> // LCD Bibliothek
> ...
Kannst du dir vorstellen, längeren Code als ASCII-Datei anzuhängen?
Was meinst du, wofür es hier die Möglichkeit gibt, einen Dateianhang 
auszuwählen.

Wegstaben V. schrieb:
> Diese Vorgehensweise, deinen Code in deiser Weise der Öffentlichkeit zu
> präsentieren ist .... sub-optimal.

Zum Glück funktioniert für soetwas OCR recht zuverlässig. Sei froh, dass 
es kein Smartphone-Photoserie vom Bildschirm ist ;-)
Gast #5417988
Lesenswert?

Johannes O. schrieb:
> An deiner Stelle würde ich mir ein C-Buch (ggf. auch online) suchen, um
> die Grundlagen und auch die Denkweise zu lernen und zu trainieren.

Grundsätzlich richtig, aber in der Arduino Welt ist C++ das Maß der 
Dinge.
Ein C Buch wäre als nur sehr eingeschränkt hilfreich.
Gast #5417992
Lesenswert?

1. Du weisst überhaupt nicht, wie man einen Taster entprellt ausliest 
und nur auf sein runterdrücken reagiert.

char upButtonDown,upButtonPressed,anzeigeAktiv;
loop(void)
{
   upButtonDown=digitalRead(upButton);
   if(upButtonDown&&!upButtonPressed)
   {
     HauptMenu--; // nicht vorher auf 0 prüfen ?
     // kein delay
     updateHaup?A
   }
   // andere Tasten
   upButtonPressed=upButtonDown;
   if(anzeigeAktiv)
   {
      anzeigeAktiv--;
      if(!anzeigeAktiv)
      {
      }
   delay(10); // das einzige delay im ganzen Programm
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren