Forum: Mikrocontroller und Digitale Elektronik Arduino Menü mit LED


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christofer W. (christofer)


Angehängte Dateien:

Bewertung
-1 lesenswert
nicht 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)


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

von Wegstaben V. (wegstabenverbuchsler)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.