Forum: Mikrocontroller und Digitale Elektronik Arduino Menü mit LED


von Christofer W. (christofer)


Angehängte Dateien:

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

von Frank L. (hermastersvoice)


Lesenswert?

Programmcode als Bild? Das ist doch nicht ernst gemeint. Oder? Wie dumm 
kann man eigentlich sein?

von Wegstaben V. (wegstabenverbuchsler)


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?

von Christofer W. (christofer)


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;
}

von Christofer W. (christofer)


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
}

von Johannes O. (jojo_2)


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.

von Christofer W. (christofer)


Lesenswert?

OK ist so iel falsch. :P hahaha

Kann mir wer ein gutes Buch empfehlen?
Das Buch sollte auf Arduino zugeschnitten sein, oder nicht? Weil in C 
hat man vermutlich nicht all die Befehle die man im Arduino verwendet 
oder doch?

von Frank L. (hermastersvoice)


Lesenswert?

auf der Arduinoseite gibt es eine Sprachreferenz. Dort wird jeder Befehl 
sogar mit Beispielen erklärt. Was dort nicht erklärt wird ist das 
generelle Verständnis der Programmierung. Das kann man aber auch mit 
nicht auf Arduino zugeschnittenen Medien lernen.

von Forist (Gast)


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 ;-)

von Einer K. (Gast)


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.

von MaWin (Gast)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.