Forum: Mikrocontroller und Digitale Elektronik Menü programmieren


von Wolle G. (wolleg)


Lesenswert?

Ich hoffe, dass ich die Frage richtig gestellt habe.
Ich hätte gern einen Programmvorschlag, mit dem ich folgendes erreichen 
kann:

Aktuell habe ich 6 Taster, mit dem ich 3 Vorgänge auslöse.
An einem Heizkörperthermostat werden dazu durch je 2 Taster folgende 
Vorgänge ausgelöst:
a1) Ventil auffahren
a2) Ventil zufahren
b1) Sollwert höher stellen
b2) Sollwert tiefer stellen
c1) Heizung hochfahren (EIN, morgens auf einen vorgewähltem 
Temperaturwert fahren)
c2) Heizung runterfahren (AUS, abends)

Es gibt ja schon Lösungen, wie man das mit 3 Tasten machen kann. Leider 
habe ich nichts gefunden oder falsch gesucht.
1. Taster einmal drücken --> Taster 2+3 Ventil auf/zufahren
2. Taster zweimal drücken -->  Taster 2+3 Sollwert ändern
3. Taster dreimal drücken -->  Taster 2+3 Heizkörper EIN/AUS
4. .... noch offen

Hinweis: meine Programmierkünste ('C') (sowie englisch) sind nur schwach 
ausgeprägt
µC: MSP430Fxxx,

von Stefan F. (Gast)


Lesenswert?

Wolle G. schrieb:
> 1. Taster einmal drücken
> 2. Taster zweimal drücken
> 3. Taster dreimal drücken

Man sollte kein Interesse daran haben, ein Bedienfeld derart maximal 
unkomfortabel zu gestalten.

von Andreas B. (bitverdreher)


Lesenswert?

Wolle G. schrieb:
> Hinweis: meine Programmierkünste ('C') (sowie englisch) sind nur schwach
> ausgeprägt
Dann lernst Du es am besten oder beauftragst eine Firma damit.
Erwartest Du jetzt ernsthaft daß sich jetzt jemand eine Woche lang 
hinsetzt und das Programm für Dich schreibt?
Davon abgesehen ist die vorhandene Steuerung schon durchdacht genug. Da 
muß man eigentlich nichts mehr vermurksen.

von Wolle G. (wolleg)


Lesenswert?

Andreas B. schrieb:
> Davon abgesehen ist die vorhandene Steuerung schon durchdacht genug. Da
> muß man eigentlich nichts mehr vermurksen.
danke für die Lorbeeren, aber ich möchte meine Ansteuerung verbessern, 
um meine Leiterplatte noch weiter verkleinern zu können.
> Erwartest Du jetzt ernsthaft daß sich jetzt jemand eine Woche lang
> hinsetzt und das Programm für Dich schreibt? eine Woche lang hinsetzt und
> das Programm für Dich schreibt?
So lange habe noch nicht einmal ich für die 6 Tasteransteuerung + 
PID-Regler-programmierung gebraucht.
Aber vielleicht kann mir doch noch jemand mit einem konkreten Verweis 
o.ä.  helfen.

von Stefan F. (Gast)


Lesenswert?

Du musst dein Programm schon selbst gestalten, oder jemanden dafür 
bezahlen.

Von nichts kommt nichts.

von Absolut (Gast)


Lesenswert?

Von mir erhältst du Absolution für dein Vorhaben.

von Peter D. (peda)


Lesenswert?

Wolle G. schrieb:
> Es gibt ja schon Lösungen, wie man das mit 3 Tasten machen kann.

Nun, dann schaltet man mit der ersten Taste ein Switch/Case weiter 
(Statemaschine). Die einzelnen Case werten dann die anderen beiden 
Tasten aus. Am einfachsten geht das mit einer Entprell-Lib, die fertige 
Ereignisse an das Main übergibt.
Man muß natürlich auch eine Anzeigemöglichkeit haben, in welchem State 
man gerade ist.

von Wolle G. (wolleg)


Lesenswert?

Stefan ⛄ F. schrieb:
> oder jemanden dafür bezahlen.
Wie viel Euro möchtest Du dafür haben?  Man muss ja mal rechnen.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Wolle, benötigst du ein komfortables / zweckmäßiges Bedienkonzept, oder 
Hinweise, wie man dieses (oder dein schon beschriebenes) algorithmisch 
umsetzt?

von Andreas B. (bitverdreher)


Lesenswert?

Wolle G. schrieb:
> Hinweis: meine Programmierkünste ('C') (sowie englisch) sind nur schwach
> ausgeprägt

Wolle G. schrieb:
> So lange habe noch nicht einmal ich für die 6 Tasteransteuerung +
> PID-Regler-programmierung gebraucht.

Das passt nicht zusammen.
Wenn Du dieses Programm schon selbst geschrieben hast, warum  zeigst Du 
es dann nicht?
Ansonsten: Peda hat gesagt wie es geht.

von verzweifelter Bediener (Gast)


Lesenswert?

Wolle G. schrieb:

> danke für die Lorbeeren, aber ich möchte meine Ansteuerung verbessern,
> um meine Leiterplatte noch weiter verkleinern zu können.

Und langfristig bereitet dir eine möglichst kleine Leiterplatte 
tatsächlich mehr Freude als ein durchdachtes Bedienkonzept? Sachen 
gibts...

von Gustl B. (gustl_b)


Lesenswert?

Ein beliebiges Menü mit Unterpunkten und Untermenüs muss man minimal in 
eine Richtung durchlaufen können dank wraparoud, man muss Einträge 
setzen können und wieder löschen und man muss aus einer Ebene in einer 
darüber gelangen können. Das geht mit 3 Tasten.

Guck dir Menüs von Geräten mit wenigen Tasten an wie 
Computerbildschirme. Oder auch DECT Telefone.

von Heiko (Gast)


Lesenswert?

Peter D. schrieb:
> Switch/Case weiter
> (Statemaschine)

Ist ein Programm bestehen aus Switch/Case-Anweisungen bereits eine 
Statemaschiene? Wie definiert man die Transitionen mit Switch-Case?

von Schlaumaier (Gast)


Lesenswert?

Ich Programmiere auf meine Arduino Menüs mit viel mehr Möglichkeiten mit 
3 Tasten ohne so ein Mist aber mit einen einfachen 2 * 16 Display.

Taste 1 : PLUS
Taste 2 : MINUS
Taste 3 : MENÜ oder OK.

Alle Tasten sind während des Betrieb mit anderen Funktionen belegt.
Je nach Projekt ist die Menü-Taste auch doppelt belegt (dann 3 Sekunden 
Auslösung für Menü-Funktion) oder direkt.

Funktioniert so.

Menü-Taste Auslösen = Menü wird aufgerufen mit Eintrag 1, Restliche 
Einträge werden mit kurzen Druck weiter geschaltet. 3 Sek. Druck oder 
Eintrag "Menü verlassen" verlässt das Menü.  Menüs in Loop-Schleife.

+ o. - schaltet auf nächsten Eintrag.  MENÜ ändert der Wert Mit 
Loop-Reihe  bei vorgegebenen Werten = z.b. 18 - 20 - 22- 24 - 30 - 18 - 
..... oder JA / NEIN )

Besonderheit : Menu - Taste länger (3 Sek) halten = zurück aus den Menü 
o. Untermenü Je nach meiner Laune.

Das Menü kann auch Untermenüs haben. Dann Springt MENÜ als OK halt ins 
Menü.

Und das ohne so ein Theater wie der TO da macht.

Mein aktuelles Projekt hat z.Z. 14 Einträge. Da würde ich mit der Art 
des TO irre werden.

Und ein billiges Display gehört m.M.n. eh zu jeden Projekt/Gerät. Damit 
der User Rückmeldungen bekommt was Sache ist. Ich entwickele zwar nur 
für mich, aber ich will wissen was halt Sache ist.

Ja nach Laune, Platz oder Geld (bei 4 x 16/20er Display)wird in der 
letzten Zeile des Display die Tastenbelegung angezeigt.

von Stefan F. (Gast)


Lesenswert?

Wolle G. schrieb:
> Wie viel Euro möchtest Du dafür haben?

Nein Danke. Ich habe kein Interesse an dem Projekt. Ich mache in 
Freizeit lieber Sachen, die Spaß machen, als so einen Käse.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Wolle G. schrieb:
> Ich hoffe, dass ich die Frage richtig gestellt habe.
> Ich hätte gern einen Programmvorschlag, mit dem ich folgendes erreichen
> kann:

Variante mit zwei Tasten / Bedienelementen:

Drei LEDs geben die aktuelle Funktion aus (Ventil, Sollwert, Heizung).

Taste 1 verkleinert den Wert, Taste 2 vergrößert ihn.

Wird Taste 1 gedrückt und gehalten, kann mit Taste 2 die Funktion 
geändert werden.

Eventuell springt die Funktion nach einiger Zeit wieder auf "Sollwert" 
zurück, damit der Wert auch ohne Funktionswahl einstellbar ist.

Variante mit einer Taste / einem Bedienelement:

Ein Drehgeber mit Tastenfunktion = ergibt wieder drei Tasten plus eine 
eventuelle Nutzung eines langen Tastendrucks als vierte Taste.

Die Programmierung machst Du aber selber.

von Wolle G. (wolleg)


Angehängte Dateien:

Lesenswert?

verzweifelter Bediener schrieb:
>> um meine Leiterplatte noch weiter verkleinern zu können.
>
> Und langfristig bereitet dir eine möglichst kleine Leiterplatte
> tatsächlich mehr Freude als ein durchdachtes Bedienkonzept?
Die Größe eines elektronischen Thermostatkopfes mit seiner Elektronik 
setze ich mal als bekannt voraus.
Diese Größe wird wieder angestrebt.
Die zu ersetzende Elektronik hatte auch nur 3 Tasten.

Peter D. schrieb:
>Nun, dann schaltet man mit der ersten Taste ein Switch/Case weiter
>(Statemaschine). Die einzelnen Case werten dann die anderen beiden
>Tasten aus.
So was mit -Switch/Case- habe ich schon mal gelesen. Leider aber wenig 
bis keine Ahnung von der Anwendung.

Im Anhang einen Ausschnitt aus meinem Programm zur aktuellen 
Tastensteuerung.
Eigentlich hatte ich gedacht, dass jemand nur seinen Schubkasten öffnen 
muss, um eine Lösung zu finden. (einfaches menü)
Früher gab es mal Forenteilnehmer (z.B. Rufus oder Buchegger), die mir 
immer gern geholfen haben, wenn ich Probleme bei der Programmierung 
hatte.

Schlaumaier schrieb:
> Funktioniert so.
>
> Menü-Taste Auslösen = Menü wird aufgerufen mit Eintrag 1, Restliche
> Einträge werden mit kurzen Druck weiter geschaltet. 3 Sek. Druck oder
> Eintrag "Menü verlassen" verlässt das Menü.

Genau. So was, o. ä., suche ich in C vorzugsweise für MSP430Fxxx

Stefan ⛄ F. schrieb:
> Wolle G. schrieb:
>> Wie viel Euro möchtest Du dafür haben?
>
> Nein Danke. Ich habe kein Interesse an dem Projekt.
Wie sang doch Roberto Blanko: "Ein bisschen Spaß muss sein..." oder
https://www.youtube.com/watch?v=hQ8tY0c-s04

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Angehängte Dateien:

Lesenswert?

Ist ja gruselig. ;-)

1) habe ich das Ganze mal korrekt eingerückt damit es lesbar wird. 
Gewöhn Dir das an, sonst wirst Du bei Deiner Hilfesuche einige zur 
Flucht veranlassen (Kate hat eine Funktion dazu, sonst hätte ich das 
auch nicht gemacht).
2) Die Tastenabfrage machst Du am besten erst mal mit einer ordentlichen 
Debounce Routine. Das mit der direkten Abfrage wird nichts, glaube es 
einfach. (Stichwort: Tastenprellen). Die Debounceroutine gibt es von 
Peda in der Artikelsammlung. Kopieren, nicht drüber nachdenken und 
glücklich sein. Wobei es natürlich nicht schaden kann, das auch zu 
verstehen. ;-)
3) Schau Dir an, wie Statemaschinen funktionieren. Wenn Du dieses 
Bedienkonzept wirklich so machen willst: Bsp. für die States der ersten 
Taste:
- 1x gedrückt (hier wird geprüft, ob Timeout 1 abgelaufen ist: ja, dann 
Ventil steuern. Nein dann Status 2x gedrückt setzen)
- 2x gedrückt (hier wird geprüft, ob Timeout 1 abgelaufen ist: ja, dann 
Sollwert steuern. Nein dann Status 3x gedrückt setzen)
- 3x gedrückt (hier wird geprüft, ob Timeout 1 abgelaufen ist: ja, dann 
Heizung steuern. Nein dann komplett raus, da Fehlbedienung)

Timeout 1 für diese Auswahl (hier mußt Du Dir eine Zeit ausdenken, bis 
der Tastenzähler 1-3) wieder zurückgesetzt wird. Bsp. 1-2s, danach wird 
der entsprechende Wert gesetzt.
Timeout 2 für den kompletten Einstellvorgang. Bsp. 5-10s, danach alle 
Zähler zurück und Einstellwert übernehmen.
4) Verdacht: Du hast noch nie mit Timern programmiert. Lerne es. Ohne 
die geht das nicht.
Diese Timeouts kannst Du mit der Debounceroutine zusammen in einen Timer 
setzen.

Es ginge auch ohne Statemaschine, wenn Du einen der Taster mit 2 
Positionen verwendest (halb- /ganz durchgedrückt hat jeweils einen extra 
Kontakt). Dann wäre ohne Drücken der ersten Taste Ventil, halb 
durchgedrückt Sollwert, ganz durchgedrückt Heizung.

Ah, ja, was Rufus oder Buchegger betrifft: Diese Herren haben immer sehr 
gute Tips gegeben (habe ich immer sehr gerne gelesen). Aber Deine SW 
hätten sie bestimmt nicht geschrieben.

von Stefan F. (Gast)


Lesenswert?

Andreas B. schrieb:
> Schau Dir an, wie Statemaschinen funktionieren.

Weil das hier so oft gefragt wird, habe ich dazu mal einen kleinen 
AUfsatz mit Bildchen geschrieben: 
http://stefanfrings.de/multithreading_arduino/index.html

von A. S. (Gast)


Lesenswert?

Wolle G. schrieb:
> Eigentlich hatte ich gedacht, dass jemand nur seinen Schubkasten öffnen
> muss, um eine Lösung zu finden. (einfaches menü)

Die Schublade gibt es fürs Tastenentprellen von Peter.

Der Rest sind 10 Zeilen Konzept, die mit 100 Zeilen deiner Aufgabe 
gefüllt werden. Und ja nach Aufgabe gibt es 20 Variationen dieser 10 
Zeilen Konzept.

Wichtig sind:
-welches Zeitkonzept fährst Du? Spsloop oder ist deine Pause1 mehr als 
10ms?
-welches Möglichkeiten hat deine Anzeige? 2x7seg, dotmatrix, LEDs?
- was bist Du bereit zu lernen? Pointer? Strukturen? Refaktoring? 
Tastenentprellen?

Prinzipiell geht es mit 6 Tasten hier auch ohne entprellen, dann ist 
aber Pause wohl eher 200-500ms lang und das ganze Programm sehr 
ineinander verwoben.

von W.S. (Gast)


Lesenswert?

Wolle G. schrieb:
> 1. Taster einmal drücken

Noch ein Vorschlag zum Tieferlegen der Benutzbarkeit: 1 Taste und 
Morsecode.

Aber mit 3 Tasten und einem Display kriegt man das hin:
Taste 1 = rauf
Taste 2 = Enter
Taste 3 = runter

Man manövriert mit Tasten 1+3 zu dem Eintrag, den man ändern will, 
drückt Enter und kann dann mit Tasten 1+3 den Wert ändern. Nochmal Enter 
und man ist wieder im Manövrier-Modus. Und wo man ist und was jeder 
Eintrag grad für einen Wert hat, kann man am Display ablesen.

W.S.

von A. S. (Gast)


Lesenswert?

W.S. schrieb:
> Man manövriert mit Tasten 1+3 zu dem Eintrag, den man ändern will,
> drückt Enter und kann dann mit Tasten 1+3 den Wert ändern.

Das macht bei 3 Aufgaben und wolles Kenntnissen wenig Sinn.

Es reicht eine Taste, die durch die 4 Punkte durchtickert (3+Default) 
und dann die anderen beiden +/- resp. an/aus.

Mit enter wird die Bedienung hier komplizierter und aufwändiger. M.e. 
macht enter erst Sinn, wenn das Menü mehrdimensional ist oder mehr als 
etwa 10 Einträge hat.

Auf der anderen Seite: mit 4 Tasten (also noch Escape, bzw Menü Up) ist 
dann jedes noch so komplexe Menü relativ einfach möglich, mit Zahlen 
eingeben etc.. Hier aber alles Overkill.

von Stefan F. (Gast)


Lesenswert?

W.S. schrieb:
> Man manövriert mit Tasten 1+3 zu dem Eintrag, den man ändern will,
> drückt Enter und kann dann mit Tasten 1+3 den Wert ändern. Nochmal Enter
> und man ist wieder im Manövrier-Modus. Und wo man ist und was jeder
> Eintrag grad für einen Wert hat, kann man am Display ablesen.

So funktioniert das Thermostat meiner Heizungsanlage. Und ich finde es 
eine dreiste Unverschämtheit, dafür auch noch 240€ zu verlangen. Mit dem 
Ding haben sich sogar die Monteure der Anlage schwer getan.

von Al. K. (alterknacker)


Lesenswert?

....mit Einsatz einer Farb/Leuchtdiode oder Minipiper kann man das sogar 
mit
einer Taste lösen.
Aber ohne Bedienanweisung wird dies nicht gehen.
Ist ein Experimental-Lösungsvorschlag welchen ich für die Praxis nicht 
Nutzen würde.

...es ist mir aufgefallen das auch Lösungsvorschläge nicht ohne nach 
treten auskommen.
;-))
MfG

: Bearbeitet durch User
von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Al. K. schrieb:
> ....mit Einsatz einer Leuchtdiode oder minipiper kann man das sogar mit
> einer Taste lösen.
> Aber ohne Bedienanweisung wird dies nicht gehen.
> Ist ein Experimental-Lösungsvorschlag welchen ich für die Praxis nicht
> Nutzen würde.

da kommen wir wieder zu meiner eingangs gestellten Frage (bzw. 
"Behauptung"): Es sollte erst mal klar sein, wie das Bedienkonzept 
aussieht: Wieviele Tasten, welche in welcher Reihenfolge, wieviele 
Menuepunkte, wieviele Masken etc.)

Danach kann man sich dran geben, über Interupts oder Register oder 
Variablen-Namen nachzudenken.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

In meiner Jugendzeit hatte ich mal ein Pager.(Google was das ist). Da 
ich nur das billigste Modell hatte (45 DM) hatte er nur eine Taste. Hat 
funktioniert aber war grausig. Wichtig aber war. Er hatte ein Display.

Man KANN wenn ein Display da ist, immer alles mit einer Taste steuern, 
selbst Einstellungen.

ABER das was man an Technik (Schaltern) spart, muss man durch viel mehr 
Code und größeren Speicher sich erkaufen.

Meine (s.o.) Methode ist einfach zu bedienen, spart Code und *sorry 
Stefan* hat keine AUTOMATISCHE Rücksprungfunktion. Der Grund ist 
einfach. Es kostet Code und ich bin Faul. ;)

Aus diversen Gründen wird sogar der Code "angehalten". Was bedeutet der 
MC warten bis das Menü verlassen wird. Projekt bedingt ist das nämlich 
nicht erforderlich das er weiter läuft.

Weil über das Menü nur Einstellungen für die Eigenschaft der anderen 
Tasten und den Ablauf des Programms gemacht werden, die beim Druck der 
Taste START/STOP abgefragt wird und den zu folge reagiert werden.

P.S. In einen anderen Tread hier habe ich ein Tipp für ein prima 
Tasten-Board bekommen was hoffentlich morgen geliefert wird. ;) (ca. 3 
Euro aus DE)

von Stefan F. (Gast)


Lesenswert?

Wenn sich schon der Programmierer schon keinen  Plan erstellen kann, wie 
das Menü funktionieren soll, wie sollen dann die Anwender damit klar 
kommen? Die müssen die Logik doch auch verstehen können!

von Schlaumaier (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn sich schon der Programmierer schon keinen  Plan erstellen kann, wie
> das Menü funktionieren soll, wie sollen dann die Anwender damit klar
> kommen? Die müssen die Logik doch auch verstehen können!

Deshalb ist mein Menü auch PERFEKT. ;) Ich bin beides. Programmierer und 
Anwender. hihi.  Und wir beide verstehen uns. hihi.

von oszi40 (Gast)


Lesenswert?

Schlaumaier schrieb:
> Deshalb ist mein Menü auch PERFEKT

A)ALLES, was man nicht hat, macht auch keine Probleme.
B)Mit nur 3 Tasten rumfummeln kann den User wenig Spaß machen, besonders 
wenn später die Tasten prellen.

von Schlaumaier (Gast)


Lesenswert?

oszi40 schrieb:
> B)Mit nur 3 Tasten rumfummeln kann den User wenig Spaß machen, besonders
> wenn später die Tasten prellen.

Ein Menü ist zum Einstellen da. Da fummelt man 1 x herum und meist nie 
wieder.

Und es hat keiner gesagt das es keine Entprell-Routine bei mir gibt.
Das ist in meinen Augen Standard und nicht der Rede wert.

Ach übrigens das Menü meiner Nikon-Spiegelreflex-Kamera wird auch nur 
mit 3 Tasten bedient. ;) Und die hat viel mehr Einstellungen wie meine 
Projekte. Aber sie hat auch ein (schöneres) Display.

von A. S. (Gast)


Lesenswert?

Al. K. schrieb:
> ....mit Einsatz einer Farb/Leuchtdiode oder Minipiper kann man das sogar
> mit einer Taste lösen.

Naja, das ist kein Hexenwerk.

So wie man mit einer Taste die Menüs durchklimpern kann, kann man mit 
einer andern Taste auch jeweils nur toggeln oder incrementieren (kein 
decrement)

Um das ganze mit einer Taste zu machen, muss man halt entweder lang 
(Menü) und kurz (wert ändern) unterscheiden, oder mit timeouts arbeiten 
(z.b. Grundstellung nach 5s: jeder Tastendruck toggelt Menüpunkt, nach 
2s Pause blinkt der Wert und man kann den toggeln)

von Hmmm (Gast)


Lesenswert?

Schlaumaier schrieb:
> hat keine AUTOMATISCHE Rücksprungfunktion. Der Grund ist
> einfach. Es kostet Code und ich bin Faul. ;)

Ob Du mit einer Zeile Code verhinderst, dass man nach dem letzten 
Eintrag weiterspringt, oder stattdessen mit einer Zeile Code zum ersten 
Eintrag springst, macht keinen Unterschied.

Schlaumaier schrieb:
> Aus diversen Gründen wird sogar der Code "angehalten". Was bedeutet der
> MC warten bis das Menü verlassen wird.

Der erste der diversen Gründe ist, dass Du keine State Machines bauen 
kannst?

Schlaumaier schrieb:
> Ich bin beides. Programmierer und
> Anwender. hihi.  Und wir beide verstehen uns. hihi.

Damit hast Du unbeabsichtigt auf den Punkt gebracht, warum viele 
Produkte (insbesondere Software) von Endanwendern als umständlich 
empfunden werden.

In diesem konkreten Fall (gerade mal 3 Menüeinträge) ist eine Menütaste 
zum Auswahl des Eintrags in Kombination mit "+"- und "-"-Tasten völlig 
ausreichend. Ein Feedback (idealerweise ein LCD, mit LEDs ist es schon 
wenig elegant) ist natürlich notwendig.

von Schlaumaier (Gast)


Lesenswert?

Hmmm schrieb:
> In diesem konkreten Fall (gerade mal 3 Menüeinträge) ist eine Menütaste
> zum Auswahl des Eintrags in Kombination mit "+"- und "-"-Tasten völlig
> ausreichend. Ein Feedback (idealerweise ein LCD, mit LEDs ist es schon
> wenig elegant) ist natürlich notwendig.

Was ich in meinen Ersten Eintrag hier sehr genau beschrieben habe.

Hmmm schrieb:
> Der erste der diversen Gründe ist, dass Du keine State Machines bauen
> kannst?

Nein, der Grund ist das es nicht erforderlich ist, und der 2. ist das 
ich zu Faul bin.

SÄMTLICHE Informationen werden bei Druck der Taste START o. einer andere 
Taste abgefragt und danach abgearbeitet. Ich versuche es mal zu 
erklären.

Die Taste "M-1" gibt eine Zeiteinheit vor an das System.  Mit der Taste 
+ und Minus wird dieser Wert verringert. Start löst eine Funktion aus 
die genau so lange läuft wie dieser Wert eingestellt ist.

Im Menü wird für die Taste "M-1" der Wert vorgegeben der bei ihren Druck 
erscheint.

Ach die Tasten sind im Normal Betrieb.

M-1 , M-2, M-3, M-4, +10, +5, +1, Clear (Setz alles auf Anfang), Menü, 
Start , Stop.

Nach Druck auf Start sind alle Tasten geblockt bis auf Stop. Nach Druck 
auf  STOP (oder Ablauf der Zeit) sind alle wieder frei.

Es ist im Prinzip einen Digitale Eieruhr die aber via Infrarot und 
andere Technik diverse Funktionen auslöst. Die M-Tasten sind 
gespeicherte Werte damit ich nicht jedes mal die Zeit einstellen muss. 
Diese könnte ich zwar im Code hinterlegen aber ich mag es etwas 
flexibler.

Was das Display angeht. Mir reichen die China-Text-Display via i2c 
völlig aus. Preiswert, einfach anzusteuern und ich muss wenig Coden.

Code :
lcd.Initialize(0x27, 16, 2)
lcd.Backlight = True
lcd.SetCursor(1,0)
lcd.Write("Startzeit")

;)

von Hmmm (Gast)


Lesenswert?

Schlaumaier schrieb:
> Was ich in meinen Ersten Eintrag hier sehr genau beschrieben habe.

Nein. Ich meine, dass man die Menütaste direkt zum Durchblättern benutzt 
und die "+"- und "-"-Tasten ausschliesslich für die Veränderung der 
Werte benutzt werden.

Du beschreibst eine Variante, bei der "+" und "-" zum Durchblättern 
benutzt werden und die Menü-Taste auch als Enter-Taste fungiert. Das ist 
erst in Menüs mit mehreren Ebenen (oder sehr vielen Menüpunkten) 
sinnvoll.

Bist Du eigentlich identisch mit Alexander K. aka "Pucki"?

von Schlaumaier (Gast)


Lesenswert?

Hmmm schrieb:
> Das ist
> erst in Menüs mit mehreren Ebenen (oder sehr vielen Menüpunkten)
> sinnvoll.

Schlaumaier schrieb:
> Mein aktuelles Projekt hat z.Z. 14 Einträge. Da würde ich mit der Art
> des TO irre werden.

Bei 14 Einträgen wovon ich geschrieben habe ist meine Art halt sinnvoll. 
Aber das kann der TO oder wer auch immer ja regeln wie er will.

Hmmm schrieb:
> Bist Du eigentlich identisch mit Alexander K. aka "Pucki"?

Wie kommst du darauf. ?

von Wolle G. (wolleg)


Lesenswert?

Erfolgsmeldung.
Ich habe jetzt mein Programm mit einem Eigenbaumenü ergänzt.
Taste 1 stellt den Menüpunkt ein.
Taste 2 + 3 öffnen und schließen das Ventil oder fahren den Sollwert 
hoch und runter oder....
Die Anzahl der Menüpunkte oder wie man das nennt, ist noch erweiterbar.

von Paula P. (Gast)


Lesenswert?

sehr gut.
Ich würde solche Fragen lieber in einem richtigen Forum stellen 
idealerweise direkt für C
Oder, da es dir nur ums prinzipielle geht in einem Basic oder Pascal 
Forum.
Die Leute dort sind bedeutend hilfsbereiter und liefern dir ungefragt 
auch gleich einen Quellcode, da es ihnen Spaß macht in diese Sprachen zu 
programmieren.
In C macht so etwas scheinbar niemand ma eben so aus Spaß an der 
Freude...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Paula P. schrieb:
> In C macht so etwas scheinbar niemand ma eben so aus Spaß an der
> Freude...

Nö, da gibts sowas schon fertig.
https://www.mikrocontroller.net/articles/Entprellung#Timer-Verfahren_.28nach_Peter_Dannegger.29
Ich kombiniere das oft mit einer Drehencoderroutine, weil ich die 
Einknopfbedienung schätze (Drehencoder mit einer Taste).
Ich würde Wolle empfehlen, die Routine auf den MSP430 zu portieren, und 
damit ist ein für alle Mal das Thema Tasten mit Entrprellung gelöst.

von alopecosa (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nein Danke. Ich habe kein Interesse an dem Projekt. Ich mache in
> Freizeit lieber Sachen, die Spaß machen, als so einen Käse.

Dann hast du entweder zu wenig zu tun in deiner Freizeit, oder dein tun 
hier im Forum macht dir tatsächlich Spaß.

Sachen gibts ...

von Paula P. (Gast)


Lesenswert?


von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Paula P. schrieb:
> und liefern dir ungefragt
> auch gleich einen Quellcode, da es ihnen Spaß macht in diese Sprachen zu
> programmieren.
> In C macht so etwas scheinbar niemand ma eben so aus Spaß an der
> Freude...

naja, wenn das Bedienkonzept unklar ist, dann nutzt die beste 
Programmiersprache der Welt nix. Aber:

Wolle G. schrieb:
> Erfolgsmeldung.
> Ich habe jetzt mein Programm mit einem Eigenbaumenü ergänzt.
> Taste 1 stellt den Menüpunkt ein.
> Taste 2 + 3 öffnen und schließen das Ventil oder fahren den Sollwert
> hoch und runter oder....
> Die Anzahl der Menüpunkte oder wie man das nennt, ist noch erweiterbar.

Wolle ist ja jetzt am Ziel. Ein (meines Erachtens verwendbares) 
Bedienkonzept, und das Programm läuft auch schon gemäß dieser Idee.

Also alles fertig, sämtliche weitere diskussionen "nutzen" ja dem Wolle 
nix mehr, da er ja alles hat was er braucht oder angefragt hat.

von Paula P. (Gast)


Lesenswert?

"naja, wenn das Bedienkonzept unklar ist, dann nutzt die beste
Programmiersprache der Welt nix. Aber:"
Keine Frage, aber doe Kommentare die hier wieder gekommen sind, sind 
hatl wieder ein Armutszeugnis für dieses Forum.
Ich hatte nicht ind er Art gelesen wie
"Mache s doch so..oder so..und in Quellcode würde das dann in etwa so 
doer so aussehen..
Wie immer kam nur Gepöbel und Wichtigtuerei von Leuten die offenbar 
besser einfach nicht antworten sollte...

von Rapper B (Gast)


Lesenswert?

"naja, wenn das Bedienkonzept unklar ist, dann nutzt die beste
Programmiersprache der Welt nix. Aber:"
Wenn man dann Kommentare gibt, wren hilfreiche Vorschläge sinnvoll und 
kein Geblubber

von W.S. (Gast)


Lesenswert?

Wegstaben V. schrieb:
> Es sollte erst mal klar sein, wie das Bedienkonzept
> aussieht

Du forderst also, daß die Leute hier zuerst nachdenken und wissen 
sollen, was sie tun, bevor sie es tun.

Nun, das ist sozusagen völlig konträr zu den in diesem Forum üblichen 
Verhaltensmustern. gelle?

Hier wird zuerst 'geproggt', 'gecodet', 'gebuggt' und dann gegreint, 
gejammert, geklagt - aber das füllt das Forum mit Beiträgen.

W.S.

von W.S. (Gast)


Lesenswert?

Paula P. schrieb:
> Ich würde solche Fragen lieber in einem richtigen Forum stellen
> idealerweise direkt für C

Wie kommst du auf so etwas?

Der Sinn der Sache besteht doch darin, daß jemand lernt, wie man eine 
Funktionalität konstruiert, einen Algorithmus ausarbeitet und ein 
Konzept entwickelt.

Und dazu ist keinerlei spezielle Programmiersprache erforderlich. Sowas 
geht zu allererst auf dem Papier mit Bleistift.

Was du vermutlich meinst, ist das blinde Kopieren ohne nachdenken zu 
müssen - und ohne dabei etwas tatsächlich selbst zu lernen.

Oder hab ich dich mißverstanden?

W.S.

von Wolle G. (wolleg)


Lesenswert?

Paula P. schrieb:
> Ich hatte nicht ind er Art gelesen wie
> "Mache s doch so..oder so..und in Quellcode würde das dann in etwa so
> doer so aussehen..
So war meine Ursprungsfrage gestellt.
Leider wurde aber zumeist nur viel Text produziert, ohne konkret meine 
Anfrage beantworten zu wollen.

Andreas B. schrieb:
> Ah, ja, was Rufus oder Buchegger betrifft: Diese Herren haben immer sehr
> gute Tips gegeben (habe ich immer sehr gerne gelesen). Aber Deine SW
> hätten sie bestimmt nicht geschrieben.
Ich würde eher sagen:
Es wäre vermutlich ein konkreter Quellcode geworden, den man nur noch an 
meine spezielle Anwendung hätte umstricken müssen.
Etwa so:
   while(1)
    {
     steuerungsmenue();
    if (reglerstart==1)regler(); // Regler wird nach Abtastrate 7x4s + 
900x4s =1h angestoßen
    }
void steuerungsmenue(void)
   {
    if (P3IN&BIT7)              //P3.7  Taster: menuepunkt hochzählen
    {
     pause1();
     menuepunkt = menuepunkt + 1;
     if (menuepunkt>3)menuepunkt = 0;
    }
    switch (menuepunkt)
   {
    case 1: ventilsteuerung_von_hand();break;
    case 2: sollwerteintellung();break;
    case 3: heizung_EIN_AUS();break;
 }
  }
Das wäre dann viel weniger Text gewesen, aber ein Lösungsvorschlag zu 
meinem Problem.

Bestimmt gibt es programmiertechnisch bessere Lösungen. Dann her damit.

von OldPapa (Gast)


Lesenswert?

Wolle G. schrieb:
> Bestimmt gibt es programmiertechnisch bessere Lösungen. Dann her damit.

Aber die hast Du doch jetzt mehrfach, auch vorgekaut, bekommen?!

>>>>>>> statemachine<<<<<<<<<<<<<

von Stefan S. (chiefeinherjar)


Lesenswert?

Wolle G. schrieb:
> if (P3IN&BIT7)              //P3.7  Taster: menuepunkt hochzählen
>     {
>      pause1();
>      menuepunkt = menuepunkt + 1;
>      if (menuepunkt>3)menuepunkt = 0;
>     }
Die Taste ist nicht entprellt. Und die "Pause" ist nicht wirklich 
sinnvoll.

Entprellung - Dieser Artikel ist dir bereits mehrmals vorgeschlagen 
worden. Da gibts sogar den berühmten Code von PeDa - komplett fix und 
fertig.

von Schlaumaier (Gast)


Lesenswert?

Wolle G. schrieb:
> Bestimmt gibt es programmiertechnisch bessere Lösungen. Dann her damit.

Es ist nicht wichtig ob es "programmiertechnisch bessere Lösungen" gibt. 
Es ist nur wichtig das der Coder und seine Nachfolger den Code lesen und 
verstehen können.

Zu C-64 Zeiten gab es von selbiger Zeitung ein Wettbewerb. Was geht 
alles an Code in eine PRG-Zeile. Das war dann perfekt optimierter Code 
und kein Schwein blickte da durch. ..

Ein Code sollte meiner Meinung nach einfach sein, gern ETWAS länger aber 
schön übersichtlich und gut strukturiert. Das reicht.

Ich persönlich tue mich oft sehr schwer Code-Schnipsel von MS zu 
verstehen. Was ich selbst geschrieben habe, da blicke ich nach 20 Jahren 
noch perfekt durch. Die Aussage ist getestet weil ein Kunde ein Prg. was 
ich vor 20 Jahren geschrieben habe, neulich erweitert haben wollte. Da 
war das schwerste den Code auf ein neues Entwicklungssystem zu 
porträtieren.

von malsehen (Gast)


Lesenswert?

Schlaumaier schrieb:
> Hmmm schrieb:
>> Bist Du eigentlich identisch mit Alexander K. aka "Pucki"?
>
> Wie kommst du darauf. ?

Ist er.
Es gab mal einen Beitrag unter "Schlaumaier",
da hat er versehentlich mit Pucki unterschrieben.
Finde ich noch...

Außerdem ist seine "Grammatik" unverkennbar.

von A. S. (Gast)


Lesenswert?

Wolle G. schrieb:
> Dann her damit.

Lösungen machen nur Sinn, wenn man die Ansätze deines Programms 
drumherum kennt. Daher die konkreten Fragen.

A. S. schrieb:
> Wichtig sind:
> -welches Zeitkonzept fährst Du? Spsloop oder ist deine Pause1 mehr als
> 10ms?
> -welches Möglichkeiten hat deine Anzeige? 2x7seg, dotmatrix, LEDs?
> - was bist Du bereit zu lernen? Pointer? Strukturen? Refaktoring?
> Tastenentprellen?

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Das Wichtigste am User-Interface-Design ist imho das weglassen.

Du schreibst, du hast 3 Doppelfunktionen:
a) Ventil auffahren, Ventil zufahren
   wofür ist das gut?

b) Sollwert höher stellen, Sollwert tiefer stellen
   nachvollziehbar, das ließe sich klar verständlich auf 2 Tasten 
mappen. "Feedback" fehlt aber. Was heißt höher? Von welchem Wert aus? Wo 
sind wir? Wenn du das nicht irgendwie hinkriegst (z.B. mit einem 
Display) bringen die 2 Tasten nichts.

c) Heizung hochfahren (EIN, morgens auf einen vorgewähltem 
Temperaturwert fahren), Heizung runterfahren (AUS, abends)
  Ein Ein/Aus-Schalter.


Du musst entscheiden, welche Hardware dein Gerät bekommt.
Mit Display sind nahzeu beliebig komplizierte Menüs möglich. Mit 4 
Cursortasten (ggf. zusätzlich Enter) kann man gut durch Menübäume 
navigieren.

Hast du nur 3 Taster und kein Display wird's schwierig. An/Aus geht z.B. 
über einen Taster wenn man z.B. eine (optional mehrfarbige) LED als 
Feedback spendiert. Ein Piepser ist auch eine Idee für Feedback, aber 
oft wenig intuitiv.

Vorschlag zur Vorgehensweise:
* Überleg' dir die Hardware
* Überlege dir ein Bedienkonzept
* Dokumentiere das in einem Zustandsdiagramm (ausgehend vom Ruhezustand, 
drücke ich Knopf 1, wass passiert dann? --> Knoten "Ruhezustand", Pfeil 
"Knopf 1", weiterer Zustand "Knoten 1",...). Du kannst dann die 
komplette Bedienung auf Papier durchspielen.

Erst wenn das rund ist, gehts ans programmieren.
Das ist dann aber nicht mehr so wild, die Zustände und Übergänge der 
Statemachine hast du ja schon.

von Wolle G. (wolleg)


Lesenswert?

OldPapa schrieb:
> Wolle G. schrieb:
>> Bestimmt gibt es programmiertechnisch bessere Lösungen. Dann her damit.
>
> Aber die hast Du doch jetzt mehrfach, auch vorgekaut, bekommen?!
Wie  weiter oben schon gesagt und von Paula P. richtig erkannt, bezog 
sich meine Frage nur nach einem Quellcodeschnipsel, vorzugsweise mit 
viel erklärendem Kommentar, damit auch ich verstehe, wie der Code 
funktioniert.
Zwischenzeitlich habe ich meinen Lösungsversuch mit switch/case 
„entwickelt“, der  nur 10 Zeilen umfasst und genau das macht, was vorher 
an Stelle  von 6 Tasten jetzt die gewünschten 3 Tasten machen.
Wie schon mal gesagt, gab es die Art der gewünschten Hilfe 
(Quellcodeschnipsel) z. B. von Rufus oder Buchegger.

Tilo R. schrieb:
> Vorschlag zur Vorgehensweise:
> * Überleg' dir die Hardware
> * Überlege dir ein Bedienkonzept
> * Dokumentiere das in einem Zustandsdiagramm (ausgehend vom Ruhezustand,
> drücke ich Knopf 1, wass passiert dann? --> Knoten "Ruhezustand", Pfeil
> "Knopf 1", weiterer Zustand "Knoten 1",...). Du kannst dann die
> komplette Bedienung auf Papier durchspielen.
>
> Erst wenn das rund ist, gehts ans programmieren.
Ich hatte angenommen, dass mein Problem, nämlich ein mir fehlender 
Programmschnipsel für die Umstellung von 6 Tasten auf 3 Tasten, bereits 
aus meinem 1. Beitrag ersichtlich ist.
Alles, was ich für nötig erachte (z. B. Flüssigkristallanzeige, 
Motorbrückenschaltung, Stellwegerfassung über Lichtschranke, digitales 
PID-Reglerprogramm, Temperaturerfassung mit DS18B20 sowie Datenerfassung 
auf SD-Karte) ist bereits fertig und funktioniert im Wesentlichen. 
(gutes Spielzeug)
Unzufrieden bin ich noch mit der Stellwegerfassung des Hubes. Aktuell 
kann ich die Weglänge des Ventilhubes auf 1/100mm erfassen. Allerdings 
fehlen nach einer Betriebzeit von einem Tag ca. 5-15 Hundertstel mm. 
Eine Erklärung für diese Fehlmessung habe ich noch nicht.
Eigentlich ist mein ursprüngliches Hilfeersuchen (ein Menü 
programmieren) ja schon durch.
Trotzdem mal die Frage: Wie wurde der Weg bei einer Computermaus, die 
über eine Kugel + Lichtschranke angesteuert wurde, erfasst?

: Bearbeitet durch User
von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Mit Hardware überlegen hatte ich nur die Bedien-Hardware gemeint, alles 
andere tut hier ja nichts zur Sache. Aber schön dass es größtenteils 
funktioniert.

Wolle G. schrieb:
> Trotzdem mal die Frage: Wie wurde der Weg bei einer Computermaus, die
> über eine Kugel + Lichtschranke angesteuert wurde, erfasst?

Das ging über 2 Walzen (für zwei Richtungen), an denen dann mit einer 
Achse Code-Rädchen befestigt waren, die mit je 2 Gabellichtschranken 
abgetastet wurden. (Code-Rad = hell/dunkel-Streifenmuster, 
Lichtschranken um 90° versetzt, so dass man die Bewegungsrichtung 
erkennen kann.)

von Peter M. (r2d3)


Lesenswert?

Hallo Hmmm,

Hmmm schrieb:
> Bist Du eigentlich identisch mit Alexander K. aka "Pucki"?

vielen Dank für den Hinweis. Passt! :)

Frei von Selbstzweifeln dringt Alexander K., der auch als Pucki oder 
schlaumeier firmiert, immer weiter in die unendlichen Tiefen von µc.net 
vor, um immer wieder neue Bewohner der Galaxie zu belehren.

Als letzter Universalgelehrter im deutschen Raum nach Leibniz steht im 
das zu - zumindest in seiner Selbstwahrnehmung.

Mangels positiven Reaktionen der Restforisten auf seine Beiträge 
entschloss sich Alexander K. dann, aber den Namen "schlaumeier" zu 
tragen.

Man kann seinen Namen wechseln, aber ohne Schizophrenie behält man 
dummerweise die Persönlichkeit.

Ob nun Unternehmen oder Foristen - Namenswechsel sind kein gutes 
Zeichen...

Letztens ließ ihn sein Instinkt eine Hitachi-Festplatte ablehnen:

Beitrag "Festplatte noch gut?"

Dumm nur, dass ein Blick auf die Backblaze-Statistik zu ganz anderen 
Ergebnissen führt, als die anekdotische Evidenz eines Computerfricklers.

Alexander K(ruger) (Mutter geborene Dunning) wird uns weiterhin viele 
konfuzianische Weisheiten vermitteln - unter welchem Namen ist egal - 
seine Handschrift ist unverkennbar.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Wolle G. schrieb:
> nämlich ein mir fehlender
> Programmschnipsel für die Umstellung von 6 Tasten auf 3 Tasten

Das wäre sowas wie hier unten. Es ist jedoch z.B. ersichtlich, dass die 
Tastaturbedienung nur über wohldosiert verstreute pause1 möglich ist. 
Wenn Du dich dazu nicht äußerst, wird der Beispielcode (zurecht) in der 
Luft zerrissen, obwohl er genau das macht, was Du möchtest (ggf. 
Flüchtigkeitsfehler). Hätte Dir so ein Code etwas gebracht?
1
#define T_MENU P3IN&BIT7
2
#define T_UP   P3IN&BIT6  
3
#define T_DOWN P3IN&BIT5
4
void tastensteuerung(void) 
5
{
6
int menu=0;
7
8
    if(T_MENU) {menu++; pause1();}
9
10
    switch(menu)
11
    {
12
    default: menu=0; /* das default hier macht automatisch auch den Überlauf */
13
             break;
14
    case 1:  /* Sollwert (hier sw) */
15
             if(T_UP)        {sw+=2; if(sw > 470) {sw=470;}}
16
             else if(T_DOWN) {sw-=2; if(sw < 200) {sw=200;}}
17
             else break; /* keine Pause wenn keine Taste. Sonst werden Tastendrücke nicht erkannt */          
18
             sollwert_anzeigen();
19
             pause1(); /* ohne diese Pause würde der Wert evt. nach Anschlag springen */
20
             break;
21
    case 2:  /* Ventil */
22
             if(T_UP)  {AUF=1; P5OUT &=~BIT5;}
23
             else      {AUF=0; P5OUT |= BIT5;}
24
             if(T_DOWN) {ZU=1; P3OUT &=~BIT0; if(ADC12MEM3 > 100) {hub=1;}}
25
             else       {ZU=0; P3OUT |= BIT0;}
26
             break;
27
    case 3:  /* Heizung EIN / AUS */
28
             if(T_UP)        {sw=440; ...} /* was immer da zu tun war */
29
             else if(T_DOWN) {sw=224; ...} /* "                       */
30
             break;
31
    }
32
}

von Rainer V. (a_zip)


Lesenswert?

Also ich mach so simple Sachen mit 2 Tastern und z.B. 4x20 LCD. LCD 
stellt die Menueebene dar, T1 springt durch die Befehle, T2 ist quasi 
Enter. Ist intuitiv, geht über beliebige Ebenen und ist schnell 
eingegeben und ist auch noch schnell programmiert.
Gruß Rainer

von Wolle G. (wolleg)


Lesenswert?

@ A. S.

Danke für den Programmschnipsel. So oder ähnlich hatte ich mir das 
vorgestellt mit meiner Äußerung: „Dann her damit“. Damit kann ich was 
anfangen und werde es mal testweise in mein Programm einbauen.

Rainer V. schrieb:
> T1 springt durch die Befehle, T2 ist quasi
> Enter. Ist intuitiv, geht über beliebige Ebenen und ist schnell
> eingegeben und ist auch noch schnell programmiert.

Und wie sieht jetzt konkret der Quellcode dazu aus?
Ich brauche in erster Linie Programmschnipsel (mit erläuternden 
Kommentar) .
siehe Beispiel A.S vom 5.1.21 14:07

von Stefan F. (Gast)


Lesenswert?

Wolle G. schrieb:
> So oder ähnlich hatte ich mir das vorgestellt
> Ich brauche in erster Linie Programmschnipsel
> mit erläuternden Kommentar.

Dann schau dir nochmal den Beitrag an, da hatte ich dir bereits vor 2 
Tagen ein Beispiel gegeben, das "so ähnlich" und "mit erläuternden 
Kommentar" war: Beitrag "Re: Menü programmieren"

> Und wie sieht jetzt konkret der Quellcode dazu aus?

Den musst du selbst entwickeln.

von Rainer V. (a_zip)


Lesenswert?

Stefan ⛄ F. schrieb:
> Den musst du selbst entwickeln.

...definitiv...

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

@Wolle G.

Ich war mal so frei und habe mich dem allgemeinen Trend dieser 
Diskussion, welcher aus verdammt viel dämlichem, erbärmlichem Geschwätz 
der üblichen Verdächtigen bestand, diametral gegenüber positioniert und 
mal ein einfaches Beispiel geschrieben. Siehe Anhang. Für den MSP430 
muss man noch die Bitmanipulation anpassen, aber das ist eher 
einfach.

https://www.mikrocontroller.net/articles/Bitmanipulation#Bitmanipulation_beim_MSP430

D.h. folgende Zeilen müssen etwa so angepaßt werden.
1
#define KEY_PIN         P2IN
2
#define KEY0            BIT7
3
#define KEY1            BIT6
4
#define KEY2            BIT5
5
#define ALL_KEYS        (KEY0 | KEY1 | KEY2)
6
#define REPEAT_MASK     (KEY1 | KEY2)       // repeat: key1, key2
7
8
get_key_press(KEY0)  // mehrfache Aufrufe ändern!

Logischerweise muss auch die IO- und Timerinitialisierung angepaßt 
werden, ebenso die ISR-Definition. Aber ich glaube das kriegst du hin.

von Wolle G. (wolleg)


Lesenswert?

Den Programmvorschlag von A.S. habe ich mit wenigen Änderungen getestet. 
läuft!
So habe ich die Variable menu aus der Funktion Tastensteuerung 
herausgenommen und als globale Variable (oder wie man das nennt) 
deklariert.
Die Funktion Tastensteuerung läuft ja in einer while(1)-Schleife in der 
main Funktion, sodass bei jedem Schleifendurchlauf die Variable menu auf 
0 gesetzt wurde. (oder sehe ich das falsch?)Der Zählvorgang blieb bei 1 
stehen.

Bei case 3  wurde vor else break eingefügt.

Ob das Ganze auch ohne eine while Schleife läuft, habe ich noch nicht 
getestet. Wahrscheinlich kann mir das jemand auch  sagen.

Den Programmvorschlag von Falk B. habe ich mir zunächst nur mal 
angesehen.
Welche Vorteile sind zu erwarten?

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Wolle G. schrieb:
> Den Programmvorschlag von Falk B. habe ich mir zunächst nur mal
> angesehen.
> Welche Vorteile sind zu erwarten?

Es gibt eine richtige Auswertung der Taster mit Entprellung. Da muss 
man nicht mit ominösen Pausen im Programmablauf rumeiern. Ein 
Tastendruck erzeugt EXAKT eine Reaktion in der Auswertung. Außerdem 
erreicht man dadurch Multitasking ohne die Verschwendung von 
CPU-Leistung durch Wartepausen.

Der Rest ist im prinzip gleich.

von A. S. (Gast)


Lesenswert?

Wolle G. schrieb:
> sodass bei jedem Schleifendurchlauf die Variable menu auf 0 gesetzt
> wurde. (oder sehe ich das falsch?)Der Zählvorgang blieb bei 1 stehen.
Ja, Fehler. Vor meinem int menu hätte "static" stehen müssen, dann ist 
es wie eine globale Variable, die aber nur innerhalb der Funktion 
zugreifbar ist.
> Bei case 3  wurde vor else break eingefügt.
Dürfte hier keine Auswirkung haben, ggf. Code posten.

Früher oder später solltest Du Dich jedoch mit sps-loop, Timing und 
entprellen beschäftigen.

Wolle G. schrieb:
> Ob das Ganze auch ohne eine while Schleife läuft, habe ich noch nicht
> getestet.

Nein, ein embedded Programm braucht irgendwo eine Schleife. Alternativ 
regelmäßiges retriggern durch Timer oder Interrupt. (Der vorgesehene Weg 
in c ist zwar eine leere for-Schleife, aber das Thema ist nur gut für 
unnötige Diskussionen ;-)

von W.S. (Gast)


Lesenswert?

Falk B. schrieb:
> einfaches Beispiel geschrieben. Siehe Anhang

Lausig - jedenfalls im Vergleich zu dem von A.S.
Viel Gedöns, keine Erläuterungen.
Der TO wird da nie und nimmer durchsteigen.

Soviel zu dem von dir bemängelten "verdammt viel dämlichem, erbärmlichem 
Geschwätz".

W.S.

von Falk B. (falk)


Lesenswert?

W.S. schrieb:
> Soviel zu dem von dir bemängelten "verdammt viel dämlichem, erbärmlichem
> Geschwätz".

Getroffene Hunde bellen. ;-)

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.