Ich besitze einen Drehregler und würde gerne damit ein Display ansteuern und bedienen. Für einen Einstieg wollte ich einen kleinen Taschenrechner Programmieren. Ziel soll es sein ein Menü aus Zahlen das ich mit dem Drehregler auswähle danach ein Multiplikator auswähle und die zweite Zahl auswähle. Anschließend wird mir das Ergebnis angezeigt. Also Quasi ein normaler Taschenrechner. Den Drehregler habe ich Programmiert und kann die Zahlen auswählen. Mir fehlt aber die Idee wie ich es anstelle das er ins "Zweite Menü" geht wo ich dann den Multiplikator auswählen kann. Ich verlange keinen fertigen Code oder ähnliches mich interessiert die generelle Programmierung eines Display die man dort ein Menü einbaut und dann zwischen diesen Menüs rum springt und zusätzlich mal dort einen Wert einstellt usw. Die meisten google Ergebnisse zeigen nur die Ein-/Ausgabe eines Display wie die Funktion printf als Beispiel.
The F. schrieb: > Den Drehregler habe ich Programmiert Auf welchem Zielsystem mit welcher Progrmmierumgebung? > mich interessiert die generelle Programmierung eines Display die man > dort ein Menü einbaut Man baut nicht "in ein Display ein Menü ein" sondern man baut eine Menüstruktur mitsamt Bedienkonzept auf und stellt die auf dem Display dar.
> Auf welchem Zielsystem mit welcher Progrmmierumgebung? Visual Studio 2017, Programmiersprache C >Man baut nicht "in ein Display ein Menü ein" sondern man baut eine >Menüstruktur mitsamt Bedienkonzept auf und stellt die auf dem Display dar. Ja genau die Menüstruktur interessiert mich. Ich habe keine Idee mit welcher Funktion ich diese Struktur realisieren könnte. Als erstes habe ich an switch(...) gedacht aber das geht nur bis zu einer gewissen grenze.
Du solltest Dir die Theorie(!) zu Zustandsautomaten (state machine) ansehen. Jedes Gerät wie z.B. ein Taschenrechner lässt sich damit recht gut beschreiben, und jeder Bedienvorgang mit einer Abfolge von Zustandsänderungen.
The F. schrieb: > Ich habe keine Idee mit welcher Funktion ich diese Struktur realisieren > könnte. Als erstes habe ich an switch(...) gedacht aber das geht nur bis > zu einer gewissen grenze. Na, das ist, wie wenn du sagst: "Ich möchte ein Baumhaus bauen und habe an einen Nagel gedacht, aber das geht nur bis zu einer gewissen Grenze" Ein switch oder ein if oder auch ein sonst eine Abrfage ist nur ein Sprachelement, das einen kleinen Teil der Aufgabe macht. Du brauchst zuerst einmal eine Struktur, wie du die einzelnen Elemente deines Taschenrechners ansteuern und ändern kannst. Und dann kannst du auswählen, welches davon bearbeitet werden soll. >> Auf welchem Zielsystem > Visual Studio 2017, Programmiersprache C Zielsystem bedeutet: worauf läuft dein Programm? Woran ist das Display angeschlossen? An einen PC?
Der Grundgedanke ist, dass Programmcode und Daten im Prinzip gleichwertig sind. Gleichwertig, weil sie jeweils den Ablauf eines Programms beeinflussen, wenn man das so hinschreibt. An sich ist der Gedanke trivial und begegnet einem im einfachsten Fall, wenn man Verzweigungen im Programmablauf beschreibt. Welcher der Zweige ausgeführt wird, hängt von einem Datum - einem Variableninhalt - ab. Ein einfaches Beispiel:
1 | main () { |
2 | int a = 0; |
3 | |
4 | a = funktion_a (); |
5 | |
6 | if (a < 15) |
7 | funktion_b (); |
8 | else
|
9 | funktion_c (); |
10 | }
|
Nichts anderes findet im wesentlichen in Menuesteuerungen statt. Nur das der Vergleich sich etwa auf die Betätigung einer Taste bezieht. Eine sehr einfach Anwendung des Prinzips der Gleichwertigkeit von Code und Daten in Bezug auf den Ablauf würde etwa so aussehen: Man verlagert etwa den Vergleich in eine Funktion aus. Die Funktion ergibt 0 oder 1 und je nach deren Ergebnis wird jeweils eine andere Funktion ausgeführt. Zusätzlich (damit das Beispiel auch nicht zu trivial ist) betrachtet man die davon abhängigen Funktionen auch als Daten (Funktionszeiger). Die Abstraktion bezieht sich hier sowohl auf den Code (nämlich was funktion_b und funktion_c jeweils tun, als auch auf den Vergleich.
1 | int Vergleich (int a, int b) { |
2 | if (a < b) |
3 | return 0; |
4 | else
|
5 | return 1; |
6 | }
|
7 | |
8 | main () { |
9 | struct Entscheidung { |
10 | int (* Vergl) (int, int); |
11 | void (* func0) (); |
12 | void (* func1) (); |
13 | } Kontrolle = { & Vergleich, & funktion_b, & funktion_c }; |
14 | |
15 | if (Kontrolle.Vergl (a, 15) == 0) |
16 | Kontrolle.func0 (); |
17 | else
|
18 | Kontrolle.func1 (); |
19 | }
|
Im Falle eines Menues, wären func0 und func1 etwa Funktionen, die beeinflussen, was das Display ausgibt. Sie können auch in einer komplizierten Anordnung von Strukturen etwa eine aktuelle Struktur auswählen. Genauso kann eine Abfolge von Menues etwa mittels Zeigern, die Strukturmitglieder sind, realisiert werden. (Rufus Erwähnung von Zustandsmaschinen ist in diesem Zusammenhang auch beachtenswert). Ich hoffe das gibt Dir eine Idee, worauf das Ganze hinausläuft.
Naja, für mich klingt das Einganspost ja schon eher nach "drehe ich am Rad kann ich schon mal n verschiedene Zahlen darstellen, aber dann fehlt mir der Plan" Und da kommt es eben schon mal drauf an ob der Drehregler (und da denke ich ist eher ein Drehencoder gemeint) auch eine Tastfunktion hat - sonst ist hier nämlich EndeGelände ...
State machine klingt etwas abgehoben, aber du willst zwei Zahlen miteinander wie im Taschenrechner miteinander verknüpfen und das Ergebnis sehen - z.B.: 1) Eingabe Zahl A 2) Eingabe der Verknüpfung wie [+], [-], [*], [/] 3) Eingabe Zahl B 4) Eingabe [=] liefert dann das Ergebnis 5) Gehe zu 1) Also: 1) Das Eindrehen der Zahl A (also die Drehregler-Abfrage) 2) wird mit Druck auf eine Taste, die mit [+], [-], [*], [/] beschriftet ist, beendet. Jetzt kennt der µC schon Zahl A und die Rechenoperation, speichert sie irgendwo ab und du kannst die nächste Zahl eindrehen. 3) Das Eindrehen der Zahl B (wieder die Drehregler-Abfrage) 4) wird mit Druck auf die Taste [=] beendet Der µC kann jetzt beide Zahlen verknüpfen und das Ergebnis anzeigen. Danach springt er zu 1) Bevor es funktioniert, wirst du dich mit Tastenentprellung und Tasten-Interpretation [+], [-], [*], [/] herumschlagen müssen, aber wenn es dann läuft, kannst du stolz auf dich sein!
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.