Forum: Mikrocontroller und Digitale Elektronik Programmieren eines Display


von The F. (frotzzi)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von The F. (frotzzi)


Lesenswert?

> 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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Theor (Gast)


Lesenswert?

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.

von G. H. (schufti)


Lesenswert?

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 ...

von Jacko (Gast)


Lesenswert?

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!

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Nextion, hier die Funktion "Gauge".

https://www.youtube.com/watch?v=eDn7LFyoEm8

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
Noch kein Account? Hier anmelden.