Hallo, ich habe folgendes Problem. Ich habe ein 16x2 Lcd Display und möchte dafür gerne ein Menü, welches ich über einen Taster steuern kann. Folgende Funktionen soll es haben: Wenn ich den Taster zum ersten mal drücke, soll die Lcd Hintergrund Beleuchtung angehen. Beim Zweiten mal drücken, soll es von der Uhrzeit anzeige zur Temperatur anzeige überspringen. Und in jedem Fall, soll die Lcd Hintergrund Beleuchtung wieder in 10 sek. ausgehen. Hier nochmal die beiden Sketche: Uhrzeit: #include <DS3232RTC.h> #include <Time.h> #include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(void) { lcd.begin(16, 2); setSyncProvider(RTC.get); if(timeStatus() != timeSet) lcd.println("Unable to sync with the RTC"); else lcd.println("RTC has set the system time"); } void loop(void) { digitalClockDisplay(); delay(1000); } void digitalClockDisplay(void) { lcd.begin(16, 2); lcd.print(hour()); printDigits(minute()); printDigits(second()); lcd.print(' '); lcd.setCursor(0, 2); lcd.print(day()); lcd.print(' '); lcd.print(month()); lcd.print(' '); lcd.print(year()); } void printDigits(int digits) { lcd.print(':'); if(digits < 10) lcd.print('0'); lcd.print(digits); } Temperatur: #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); #include "DHT.h" #define DHTPIN 6 #define DHTTYPE DHT22 //DHT11, DHT21, DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(16, 2); lcd.print("DHT22 - Test!"); dht.begin(); lcd.clear(); } void loop() { delay(1000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { lcd.println("DHT22 konnte nicht ausgelesen werden"); } else { lcd.clear(); lcd.print(h); lcd.print(" %"); lcd.setCursor(0, 2); lcd.print(t); lcd.print(" C"); } } Ich bedanke mich schon mal im voraus für jegliche Hilfe ;) Lg Tobi
Tobias M. schrieb: > Hallo, > ich habe folgendes Problem. Ich habe ein 16x2 Lcd Display und möchte > dafür gerne ein Menü, welches ich über einen Taster steuern kann. > Folgende Funktionen soll es haben: Dann musst du das halt programmieren. Sind wir hier bei "Wünsch dir was"? Jetzt wurde dir schon 1-Wire, DHT Ansteuerung und LCD Ansteuerung KOMPLETT abgenommen. Jetzt müsstest du tatsächlich SELBER mal was programmieren, oh Schreck, gleich ins Forum und fragen. Irre, einfach nur Irre.
:
Bearbeitet durch User
Vielleicht weiß ich nicht wie man so etwas Programmiert !!!!! Ich habe ja auch nicht gesagt das ihr mir sowas Programmieren müsst. Ich habe gelegentlich um die Hilfe gebeten mir dabei zu Helfen. Oder wo für ist sonst ein Forum da ?????
Dieter S. schrieb: > Und was ist jetzt deine Frage ? Ich weiß nicht genau wie man so etwas Programmiert und wollte wissen ob es da schon irgendwelche Liberiers oder Beispiel Sketche gibt ?
Tobias M. schrieb: > Vielleicht weiß ich nicht wie man so etwas Programmiert !!!!! Dann lerne. Am besten in dem du schon mal anfängst. > Ich habe ja auch nicht gesagt das ihr mir sowas Programmieren müsst. Sondern du erwartest was?
Hört sich anfangs blöd an, ist aber so: Programmieren tut man mit einem Stift und Papier. Skizziere dir den Ablauf auf, dann erkennst du auch schnell kleine Denkfehler. Mach ich auch so. Danach die einzelnen Blöcke in Code umsetzten.
Denn sagen sie mir doch bitte, wo ich das programmieren von Menüs leren könnte ?
Wie DEIN Menü aussehen soll weißt nur DU! Du musst den Ablauf einfach mal aufzeichen. Niemand weiß ob du einen oder 100 Untermenüs benötigst oder was auch immer.
Bastler schrieb: > Hört sich anfangs blöd an, ist aber so: > > Programmieren tut man mit einem Stift und Papier. > > Skizziere dir den Ablauf auf, dann erkennst du auch schnell kleine > Denkfehler. Mach ich auch so. > Danach die einzelnen Blöcke in Code umsetzten. Ja, hört sich schon mal gut an. Allerdings wüsste ich denn nicht, wie ich das mit einem Taster ansteuern könnte.
Soll die Hintergrundbeleuchtung 10 Sekunden nach dem ersten Tastendruck oder 10 Sekunden nach dem letzten Tastendruck ausgehen? Was passiert wenn der Taster ein drittes mal gedrückt werden soll? Soll bei erneutem drücken des Tasters wieder auf die Uhrzeit gesprungen werden? Hast du dich schonmal ansatzweise mit der Programmierung in Arduiono auseinander gesetzt? Oder kopierst du seid beginn einfach irgendwelche Codeschnipsel zusammen und hoffst das sie funktionieren? Es wäre mit Sicherheit ratsam, wenn du dich erstmal mit den Grundlagen beschäftigst. Led ein und ausschalten auf Tastendruck. Das ganze vielleicht noch zeit gesteuert. Auch Zustandsautomaten ist ein Stichwort das du ergoogeln und verstehen lernen kannst. Einfach alles aus dem Forum vorgesagt bekommen ohne richtig selber zu werkeln ist doch auch langweilig, oder?
Ich habe meine Menüs immer gesplittet. Menü_Handling(); Menü_Anzeige(); In der einen Routine bearbeite ich die Tasteneingaben und ändere meine Zustandsautomaten. In der Anderen mach ich die Ausgabe entsprechend zu den Zustandsautomaten. Das Handling wird nur aufgerufen wenn eine Taste gedrückt wurde bzw. Zeit abgelaufen ist und die Anzeige erfolgt zyklisch (z.B. alle 100ms / 300ms / ...).
Tobias M. schrieb: > Ja, hört sich schon mal gut an. Allerdings wüsste ich denn nicht, wie > ich das mit einem Taster ansteuern könnte. Mach doch mal ein Programm welches beim Druck auf einen Taster eine LED blinken lässt. Ganz ohne fertigen Code und libs. Dann machst du ein Programm welches beim 1. Druck das Blinken einschaltet und bei 2. Druck wieder aus. Schon hast du Zustände gelernt. Und so weiter. Dann kommst du wieder mit LCD und Menüs.
>Arduino Menü erstellen
Ich nehm das Arduino Maxi mit Pommes und nem elektrolytischen Getränk
Ich programmier lieber python, das bringt spaß.
Für uC nehm ich auch das Forum XD
Tobias M. schrieb: > Wenn ich den Taster zum ersten mal drücke, soll die Lcd Hintergrund > Beleuchtung angehen. > Beim Zweiten mal drücken, soll es von der Uhrzeit anzeige zur Temperatur > anzeige überspringen. > Und in jedem Fall, soll die Lcd Hintergrund Beleuchtung wieder in 10 > sek. ausgehen. Wie schon gesagt wurde, wird dir keiner hier den Code vorprogrammieren. Das kannst du selbst können. Arbeite nach dieser Struktur:
1 | Deklariere eine Tastervariable als Integer mit dem Wert 0 |
2 | Wenn der Taster gedrückt wird, |
3 | erhöhe diese Variable um 1 |
4 | Wenn sie dann 1 ist |
5 | dann mach die Beleuchtung über einen IO-Pin an |
6 | und setze einen Timer, der nach 10 Sekunden diesen Pin wieder ausschaltet |
7 | Sonst |
8 | Wenn sie dann 2 ist |
9 | dann rufe die Funktion zur Uhrzeitumstellung auf |
Markus S. schrieb: > Soll die Hintergrundbeleuchtung 10 Sekunden nach dem ersten > Tastendruck > oder 10 Sekunden nach dem letzten Tastendruck ausgehen? Was passiert > wenn der Taster ein drittes mal gedrückt werden soll? Soll bei erneutem > drücken des Tasters wieder auf die Uhrzeit gesprungen werden? > > Hast du dich schonmal ansatzweise mit der Programmierung in Arduiono > auseinander gesetzt? Oder kopierst du seid beginn einfach irgendwelche > Codeschnipsel zusammen und hoffst das sie funktionieren? > > Es wäre mit Sicherheit ratsam, wenn du dich erstmal mit den Grundlagen > beschäftigst. Led ein und ausschalten auf Tastendruck. Das ganze > vielleicht noch zeit gesteuert. Auch Zustandsautomaten ist ein Stichwort > das du ergoogeln und verstehen lernen kannst. Einfach alles aus dem > Forum vorgesagt bekommen ohne richtig selber zu werkeln ist doch auch > langweilig, oder? Ja, ich habe mich schon damit auseinander gesetzt. Das Display Timeout könnte ich ja auch selber schreiben, nur ich weiß halt nicht wie ich ein Menü erstellen soll. Da würde mir halt schon ein einfachen Beispiel helfen. Die beiden Sketche sind aus dem Internet, Ja, allerdings habe ich sie umgeschrieben. Nun möchte ich allerdings einen neues Kapitel aufschlagen. Und das wäre halt das mit dem Menü. Soll die Hintergrundbeleuchtung 10 Sekunden nach dem ersten Tastendruck oder 10 Sekunden nach dem letzten Tastendruck ausgehen? Nach dem letzten Tastendruck Was passiert wenn der Taster ein drittes mal gedrückt werden soll? Soll bei erneutem drücken des Tasters wieder auf die Uhrzeit gesprungen werden? Ja, es soll denn wieder von Anfang an los gehen.
Tobias M. schrieb: > Ja, ich habe mich schon damit auseinander gesetzt. Das Display Timeout > könnte ich ja auch selber schreiben, nur ich weiß halt nicht wie ich ein > Menü erstellen soll. Da würde mir halt schon ein einfachen Beispiel > helfen. Die beiden Sketche sind aus dem Internet, Ja, allerdings habe > ich sie umgeschrieben. Nun möchte ich allerdings einen neues Kapitel > aufschlagen. Und das wäre halt das mit dem Menü. > > Soll die Hintergrundbeleuchtung 10 Sekunden nach dem ersten Tastendruck > oder 10 Sekunden nach dem letzten Tastendruck ausgehen? > > Nach dem letzten Tastendruck > > Was passiert > wenn der Taster ein drittes mal gedrückt werden soll? Soll bei erneutem > drücken des Tasters wieder auf die Uhrzeit gesprungen werden? > > Ja, es soll denn wieder von Anfang an los gehen. Könntest du selber schreiben? Dann schreib es selber. Für das Menü kannst du dir den Artikel zu State-Machines anschauen, da steht alles erforderliche drin. Generell würde das Benutzen der Suchfunktion oder Google ziemlich helfen. Sketche kannst du scheinbar auch finden. Ok, jetzt hast du die Fragen beantwortet. Gut. Jetzt kannst du sie nach und nach in ein Programm umwandeln. Wenn du denkst, hier mit Forderungen und Beschwerden weiterzukommen, bist du falsch gewickelt. Jeder der dir hier antwortet stand schonmal vor den selben Problemen wie du und hat es gelöst ohne andere den Code schreiben zu lassen. Du willst nicht, dass dir jemand den Code schreibt? Doch, genau das ist es was du willst. Du willst ein Beispiel haben, in dem du nur hier noch eine Variable umbenennen musst und hier noch einen Fall hinzufügen musst. Ein solches Beispiel wird dir hier niemand schreiben und mit weniger wirst du nicht zufrieden sein. Du bist es gewohnt, einen passenden Sketch zu suchen und anzupassen. Nur muss ich dich da enttäuschen, das ist nicht Programmieren, das ist Copy&Paste. Wenn du programmieren willst, dann setze dich mit deinem Problem auseinander und schreib den Code. Wenn dir dein Problem bisher zu hoch ist, setze dir Zwischenziele. Anders lernt man Programmieren nicht.
:
Bearbeitet durch User
Ganz einfach gesagt: Wenn Tastenvariable 0 -> Display im Normalzustand Wenn Tastenvaribale 1 -> Display im Menü 1 Wenn Tastenvariable 2 -> Display im Menü 2 Wenn Tastenvariable 3 -> Tastenvariable 0 Wenn Lichttimer 10 -> Lichtaus -> Tastendruck Beleuchtung ein - LichtTimer setzen Tastenvariable + 1 Nimm dir ein Stift zur Hand und mal dir das im Ablauf auf, wie du es haben willst - als Ablaufdiagramm. https://de.wikipedia.org/wiki/Programmablaufplan Poste das dann hier, du bekommst Hilfe, aber nichts fertiges Vorgekaut!
Bastler schrieb: > Programmieren tut man mit einem Stift und Papier. > > Skizziere dir den Ablauf auf, ganz genauso! Ich bin ja auch gerade dabei, ich skizziere mal den Weg: man erstellt ein struct screen struct screen { char zeile1[17]; char zeile2[17]; } man erstellt ein Array aus screens oder so char menu[MAX_SCREEN][MAX_LINES][MAX_CHAR+1]; ein Screen hat 2 Zeilen a 16 Zeichen die füllt man erst mal mit Leerzeilen aus 16 SPACE (dez=32) -> memcpy Dann kann man locker zu jeder Zeit in den Screen MEM schreiben Damit das LCD nicht das "flattern" bekommt wird das LCD nur 4x pro Sekunde aktualisiert (Timer) Welcher Screen gerade angezeigt wird wählst du ja aus aus dem Array
@Joachim... er bekommt nicht mal nen Ablauf hin. :-D Lass ihn erstmal die Statemachine mit dem Ablauf machen. Egal ob er erstmal auf das Screen bloß ne 1-2-3 schreibt. Das überfordert ihn sicherlich gleich wieder.
Hi
>@Joachim... er bekommt nicht mal nen Ablauf hin.
Macht nichts. Mit dem Ansatz von Joachim B.(jar) auch nicht.
MfG Spess
Hey cool, dem habt ihrs mal gezeigt! Der will ein lcd menu un will nicht programmieren lerne? Ja wo kommen wir den da hin! Ich kauf mir auch jedes monat ein Kuh weil ich eine tüte milch pro monat trinke.
TraurigAberWahr schrieb: > Ich kauf mir auch jedes monat ein Kuh weil ich eine tüte milch pro monat > trinke. Dann hast Du ja inzwischen 38 davon, so alt ist der letzte Beitrag. wendelsberg
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.