Guten Morgen sitze schon seit gestern über einem Problem und finde irgendwie keine vernüftige Lösung.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
|
Anzeige
|
Wäre hier ein break in der If-Anweisung angebracht?Guten Morgen sitze schon seit gestern über einem Problem und finde irgendwie keine vernüftige Lösung.
Gast
#3377000
> sitze schon seit gestern über einem Problem und finde irgendwie keine > vernüftige Lösung. Das da wäre? g457 schrieb: > Das da wäre? Ich möchte mit einem zweiten Taster den Zähler stoppen.
Gast
#3377036
Hmm, muesste das nicht if (SW2 != ein) heissen oder ähnlich? wie wärs mit folgendem Schema
Das ist: eine Hilfsvariable, die mit ihrem Wert (0 oder 1, FALSE oder TRUE) eine Aussage darüber macht, ob der Zähler laufen soll oder nicht. Ist die Aussage der Variable dergestalt, dass der Zähler laufen soll, dann macht das der Zähler dann auch: er wird hochgezählt und ausgegeben. Davon losgelöst ist die Steuerung dieser Variable. In deinem Fall können zb die beiden Schalter/Taster auf diese Variable einwirken. Das muss nicht so sein, ist bei dir aber so. Es wäre auch denkbar, dass diese Variable von anderen Dingen beeinflusst wird. Vieles ist möglich, aber wichtig ist, dass du das Vorhandensein der Schalter/Taster vom Zähler entkoppelt hast. Der Zähler 'hängt' nur an seiner Variablen - wie auch immer die dann beeinflusst wird.
Gast
#3377059
ist der konstrukt mit SW0 != ein mit ein |= SW0 gewollt? damit dürfte der Zahler erst mit dem losslaseen loslaufen. der zahler geht alle 150 ms um eins nach oben. der else zweig wird nur aktiev wenn du beide tasten drückst! damit ist SW0 == dem überschriebenen Ein. und dann und nur dann kann auch der else zweig aktiv werden. wobei beim losslassen das ganze wieder los düst, da die selbsthaltung nicht gelöscht wurde. Karl Heinz schrieb: > wie wärs mit folgendem Schema
Wofür an dieser Stelle ein Delay? F. Fo schrieb: > Karl Heinz schrieb: >> wie wärs mit folgendem Schema >
> > Wofür an dieser Stelle ein Delay? Damit er seinen Binärzähler auch hochlaufen sieht. Ob er denn delay in den Zählteil mit reinnimmt oder so wie hier in die Hauptschleife gibt, bleibt ihm überlassen.
Gast
#3377068
noch ein problem. selbst wenn du im else zweig die selbshaltung löscht, ist SW0 ja immernoch gedrückt, was dann wieder der startbedingung entspricht. Der vorschlag von Karl Heinz sieht da besser aus. Da muss man sich nicht das hirn so verrenken um zu kapieren was da einer machen will. Unbekannter schrieb: > Hmm, muesste das nicht if (SW2 != ein) heissen oder ähnlich? Das Programm funktioniert soweit ganz gut die Abruch bzw. Stopbedingung ist mein Problem. Sobald ich SW0 drücke startet das Programm. Wenn ich SW0 gedrückt halte stoppt das Programm und ich kann mit SW2 den Zähler auf null setzen. Dann startet das Programm von selbst wieder. Ich würde aber gerne das Programm stoppen und dann zurücksetzen und dann erneut mit SW0 starten. D.h. du hast 3 notwendige Funktionen * Zähler starten * Zähler stoppen * Zähler auf 0 setzen aber nur 2 Taster. Das geht dann so nicht, solange du dich nur auf einen gedrückten Taster konzentrierst. Du läufst gerade in das Problem hinein, dass du einen Tastendruck von einer gedrückten Taste unterscheiden lernen musst. Das wäre noch nicht so schlimm, wenn dir da nicht die notwendige Tastenentprellung einen Strich durch die Rechnung machen würde. Entprellung
Gast
#3377079
1. Wird der Schalter nicht aktualisiert. Es gibt nur eine Initialisierung der Variablen. 2. Lässt sich das delay nicht unterbrechen.
Gast
#3377080
Das ist das problem das ich erkannt habe. Beim Stoppen wird die selbshaltung nicht gelöscht. "ein" wird nicht wieder genullt. Selbst wenn du das machen würdest, hättest du das problem, das SW0 noch gedrúckt ist, ein != SW0 und somit im nächsten durchlauf die startbedingung wieder erfüllt ist. Karl Heinz schrieb: > D.h. du hast 3 notwendige Funktionen > > * Zähler starten > * Zähler stoppen > * Zähler auf 0 setzen > > aber nur 2 Taster. Das geht dann so nicht, solange du dich nur auf einen > gedrückten Taster konzentrierst. Alternativ würde ich vorschlagen, die Funktionen "Zähler auf 0 setzen" und "Zähler starten" zusammenzulegen. Karl Heinz schrieb: > wie wärs mit folgendem Schema Danke die Lösung scheint perfekt zu sein ich hab mir die ganze Zeit das Hirn verrenkt und bin eben nicht auf deinen Vorschlag gekommen. DANKE Karl Heinz schrieb: >> D.h. du hast 3 notwendige Funktionen >> >> * Zähler starten >> * Zähler stoppen >> * Zähler auf 0 setzen >> >> aber nur 2 Taster. Das geht dann so nicht, solange du dich nur auf einen >> gedrückten Taster konzentrierst. Ich will ja auch mit SW1 den Zähler stoppen @Karl Heinz Eigentlich würden deine gesammelten Vorschläge ja schon ein gutes Anfängerbuch abgeben, aber du solltest wirklich mal eins schreiben und dann besser für Anfänger mit leichten Vorkenntnissen (also für mich ;-)). Uwe Seelmann schrieb: > Karl Heinz schrieb: >>> D.h. du hast 3 notwendige Funktionen >>> >>> * Zähler starten >>> * Zähler stoppen >>> * Zähler auf 0 setzen >>> >>> aber nur 2 Taster. Das geht dann so nicht, solange du dich nur auf einen >>> gedrückten Taster konzentrierst. > > Ich will ja auch mit SW1 den Zähler stoppen Und mit SW0 startest du ihn. Und wie setzt du ihn auf 0 zurück? (Also jetzt: aus Benutzersicht gesehen?)
Gast
#3377093
Er hat doch 2 taster, damit lassen sich doch 4 zustände abbilden. SW0 gedrückt Zähler starten SW1 gedrückt Zähler stoppen SW0 und SW1 gedrückt Zähler zurücksetzen (ggf nur dann wenn zähler nicht läuft) wobei hier dann noch ein paar gemeinheiten mit reinspielen, da man 2 taster nie gleichzeitig drücken kann. Das heist man müsste erst sw1 drücken und gedrückt halten, dann kurz sw0 drücken um den Zähler zu löschen. beide nicht gedrückt entweder zählen oder nichts tun. Karl Heinz schrieb: > Und wie setzt du ihn auf 0 zurück? (Also jetzt: aus Benutzersicht > gesehen?) Ich habe ein STK500 da sind Taster verbaut, also dachte ich mir einen zum Starten einen zum Stoppen und einen zum Rücksetzen. Am Anfang wollte ich das mit nur zwei Tastern machen da hab ich aber eben keine richtige Lösung gefunden. Uwe Seelmann schrieb: > Karl Heinz schrieb: >> Und wie setzt du ihn auf 0 zurück? (Also jetzt: aus Benutzersicht >> gesehen?) > > Ich habe ein STK500 da sind Taster verbaut, also dachte ich mir einen > zum Starten einen zum Stoppen und einen zum Rücksetzen. Also hast du 3 Taster. Ist ok. Passt soweit. Du bist der Programmierer, du definierst wie das funktionieren soll und wieviele Taster du einsetzt. Soweit hast du absolut freie Hand. Schweiriger wird es erst, wenn du eine Doppelfunktion auf einem einzige Taster liegen hast. Wie zb. der erste Tastendruck startet den Zähler. Der zweite Tastendruck auf demselben Taster stoppt ihn wieder. Und mit dem anderen Taster setzt du ihn auf 0 zurück. Denn da läufst du in das schon angesprochene Problem des sauberen erkennen eines Tstendrucks (im Gegensatz zu 'ist ein Taster gedrückt') rein. Und da wirds dann unangenehm. Wieso soll das nicht mit zwei Tastern gehen. Wenn Taster1 starte Wenn Taster2 stoppe Wenn alles gestoppt Zähler zurücksetzen auf Null Sehe ich das verkehrt? F. Fo schrieb: > Wieso soll das nicht mit zwei Tastern gehen. > Wenn Taster1 > starte > Wenn Taster2 > stoppe > Wenn alles gestoppt > Zähler zurücksetzen auf Null > Sehe ich das verkehrt? korrekt genau so war Plan eins @Karl Heinz Da Du recht kompetent bist hab ich da nochmal eine Frage wenn ich einen Taster mit z.b kurzer Tastendruck = ein belegen will und langer Tastendruck = aus belegen will wie realisiert man das? Dafür hat man doch einen µC und in jedem noch so doofen Anfängerbuch steht es doch drin, wie man Tastendrücke "festhält". Ich hatte das jetzt sehr knapp beschrieben. Aber man kann es ja auch mit einem Taster machen. Jede Lampe mit Touch Steuerung funktioniert mit nur einem Taster und da sogar mit mehreren Funktionen. F. Fo schrieb: > Dafür hat man doch einen µC und in jedem noch so doofen Anfängerbuch > steht es doch drin, wie man Tastendrücke "festhält". Kannst Du mir ein solches empfehlen. Karl Heinz schrieb: > Schweiriger wird es erst, wenn du eine Doppelfunktion auf einem einzige > Taster liegen hast. Wie zb. der erste Tastendruck startet den Zähler. > Der zweite Tastendruck auf demselben Taster stoppt ihn wieder. Und mit > dem anderen Taster setzt du ihn auf 0 zurück. Denn da läufst du in das > schon angesprochene Problem des sauberen erkennen eines Tstendrucks (im > Gegensatz zu 'ist ein Taster gedrückt') rein. Und da wirds dann > unangenehm. Ich kenne natürlich die "Entprellung" nach Peter Danegger, aber als ich mit Arduino begonnen hatte, da machte man das im Buch mit einem ganz kurzem Delay. Bei mir funktionierte das gut. F. Fo schrieb: > Wieso soll das nicht mit zwei Tastern gehen. > > Wenn Taster1 > starte > > > > Wenn Taster2 > stoppe > > > Wenn alles gestoppt > Zähler zurücksetzen auf Null Sobald du Taster 2 drückst IST alles gestoppt. Der Zähler geht auf 0. Wie liest du das Zählergebnis ab? Karl Heinz schrieb: > Wie liest du das Zählergebnis ab? Anhand der LED´s in Binärcode sprich am PortD Uwe Seelmann schrieb: > @Karl Heinz > > Da Du recht kompetent bist hab ich da nochmal eine Frage wenn ich einen > Taster mit z.b kurzer Tastendruck = ein belegen will und langer > Tastendruck = aus belegen will wie realisiert man das? Ganz ehrlich. Da dein Programm mit "zweiter Tag" überschrieben ist, geh ich davon aus, dass du erst vor ein paar Tagen angefangen hast. Und dafür ist diese Aufgabenstellung VIEL ZU SCHWER! Das ist nichts gegen dich. Tasten sauber in allen möglichen Varianten abzufragen IST SCHWER! (Erstaunlicher weise) Daher: vertag das noch. Zumindest solange, bis du keine 2 Tage mehr brauchst um rauszukriegen, dass du dir mit einer Hilfsvariablen (so wie hier vorgeschlagen) das Leben enorm erleichtern kannst. Es hat wenig Sinn, wenn ich dir jetzt fachgerecht auseinander setze, wie man das nach den Regeln der Kunst macht. Du würdest 9/10 davon nicht verstehen, weil dir im Vorfeld noch viel zu viel fehlt. @Karl Heinz Danke schön für die Hilfe ich werde mich da noch etwas einarbeiten und wenn ich dann wieder auf das Problem stoße darf ich dann bei dir wieder anfragen? Gruß Uwe Karl Heinz schrieb: > F. Fo schrieb: >> Wieso soll das nicht mit zwei Tastern gehen. >> >> Wenn Taster1 >> starte >> >> >> >> Wenn Taster2 >> stoppe >> >> >> Wenn alles gestoppt >> Zähler zurücksetzen auf Null > > > Sobald du Taster 2 drückst IST alles gestoppt. Der Zähler geht auf 0. > Wie liest du das Zählergebnis ab? Wieso ist alles gestoppt? Natürlich muss ich den "Taster1 gedrückt" in einer Variablen festhalten. Das ist das Kapitel gleich nach dem "Blink". An Alle die es Interessiert das Programm sieht jetzt so aus: Es läuft tadellos auf dem STK500
Gast
#3377343
Kann mir jemand erklären, wie sich die Tasten aktualisieren? SWx sind Variablen und keine define#. Nach der Initialisierung werden sie nicht mehr beschrieben. Was übersehe ich? nur mal so schrieb: > Kann mir jemand erklären, wie sich die Tasten aktualisieren? > > SWx sind Variablen und keine define#. Nach der Initialisierung werden > sie nicht mehr beschrieben. Was übersehe ich? Dass die Variablen innerhalb der Hauptschleife definiert sind. D.h. jedesmal beim Ende der Schleife werden sie zerstört und mit dem nächsten Durchgang durch die Schleife neu erzeugt. Und als solches natürluch auch jedesmal wieder neu initialisiert. Mit den dann gültigen Werten der Portpins
Gast
#3377414
Karl Heinz schrieb: > D.h. jedesmal beim Ende der Schleife werden sie zerstört und mit dem > nächsten Durchgang durch die Schleife neu erzeugt. Na klar! Ist ja nicht static deklariert. Danke! War spät und lustig gestern. :-D Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|