Hallo,
ich habe eine funktion geschrieben, die beim drücken des button_up wird um 0.01 inkrementieren und beim drücken des button _dwn soll dekrementiert werden..enter_button ist für return ergebnis.
Diese Programmierlogik mit while und delay stoppt den Controller. Er kann nichts anderes machen.
Du hast Pullup Widerstände, sagtest Du.
Sobald und solange Du den Enter-Taster drückst ist dann ist digitalRead(button_up) und digitalRead(button_dwn) immer H also zählt er immer 0,01 dazu. Wenn Du dann noch den digitalRead(button_up) drückst zählt er immer 0,01 weg.
Ander symptome sind möglich wegen des Tastaturprellens.
Wartezeiten von 2,5 Sekunden sind zu lange; da mußt Du zu lange warten bis etwas passiert.
Was soll das Programm machen? Wenn Du 10 Minuten den Enter und den UP-Knopf drückst dann zählt er um 1 hoch?
Hallo,
ich habe auch immer mal so ein Problem, und errinnere mich dan daran das ich vergessen hatte den Input default auf High, kann das der Fehler sein?
ICH hab auch nur mit externe pullup probiert...der zählt von alleine auch ohne den tastern zu drücken.
ich will aber wenn ich auf button_up drücke-->ikrementiert z.b. 0.01, 0.02, 0.03, 0.04.
wenn ich auf button_dwn drücke-->dekrementiert z.b. 0.04, 0.03, 0.02, 0.01.
Grüß.
der dritte taste ist für enter-->z.b wenn man auf button_enter drückt, nimmt die funktion das letzte zahl.
z.b.: button_up einmal gedrckt:0.01--zweite mal gedrückt:0.02....
button_dwn einmal gedrückt:0.02--zweite mal:0.01....
button_enter nimt dann die 0.01 z.b.
Ich hab den ganzen tag an den Programm gebastelt, kriege aber die richtige funktion nicht.
Also ich habe deinen Code als "Vorbild", also eher als Grundlage genommen, verwende also die gleichen Variablen, hab nur die Pinnummern an den Duemilanove angepasst und auf die LCD-Ausgabe verzichtet. Und hier funktioniert der Code, ohne dass automatisch gezählt wird. Automatische Tastendrücke haben meist ihre Ursache in falschen Beschaltungen, wie ich anfangs schon vermutete...
Aber wie gesagt, mein Code basiert auf deinem, daher funktioniert das mit der Enter-Taste anders, als du dir das vorstellst. Das habe ich in der Dokumentation zum Code auch deutlich gemacht: Eine Änderung der Werte +/- kann man nur vornehmen, wenn die Enter-Taste dabei gehalten wird.
Die Idee, dass die Werte bei Enter-Druck übernommen erden, ist einfach umzusetzen: Abfrage der Enter-Taste aus der Funktion rausnehmen, i direkt inkrementieren/dekrementieren. Bei Enter wird einfach wird in der loop einer neuen Variable (z.B. j) das i zugewiesen. Nun kann man zwar weiter i ändern, aber erst nach Enter wird der Wert übernommen.
Um Fehler auszuschließen, könntest du mal ein paar aussagefähige Fotos der Beschaltung zeigen, dass wir hier nicht im Trüben fischen.
tahakora:
der dritte taste ist für enter-->z.b wenn man auf button_enter drückt, nimmt die funktion das letzte zahl.
z.b.: button_up einmal gedrckt:0.01--zweite mal gedrückt:0.02....
button_dwn einmal gedrückt:0.02--zweite mal:0.01....
button_enter nimt dann die 0.01 z.b.
...
Das obrige programm funktioniert folgendermaßen:
Damit überhaupt etwas gezählt wird muß der Enter-Taster kurz gedrückt werden.
Dann solange UP oder DOWN nicht gedrückt werden zählt es aufwärts, alle 2,5 Sekunden um 0,01. Wenn UP gedrückt wird dann zählt es herunter solange bis DOWN gedrückt wird.
Dann beginnt alles von vorne.
Damit das Programmm das macht was Du sagst:
button_up einmal gedrckt:0.01--zweite mal gedrückt:0.02....
button_dwn einmal gedrückt:0.02--zweite mal:0.01....
button_enter nimt dann die 0.01 z.b.
Mußt Du:
die Kontakte entprellen.
auf die fallende Flanke von UP bzw DOWN( H nach L) reagieren und um 0,01 inkrementieren bzw dekrementieren.
bei Enter die Funktion die ausgeführt werden soll starten.