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
Programmcode als Bild? Das ist doch nicht ernst gemeint. Oder? Wie dumm kann man eigentlich sein?
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?
//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; }
#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
}
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.
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?
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.
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 ;-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.




