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.