Hallo, ich habe hier ein Arduino wo ich bei einem tastendruck normal einen Wert hoch zählen lassen möchte. Wenn ich den Taster aber ca. 5 Sekunden gedrückt halte, dann soll der Wert schneller und automatisch hoch zählen. Ich habe gelesen das der Befehl " pulseIn();" dafür zu benutzen is, um die Zeit zu messen, wie lange der taster gedrückt wird. Das klappt nicht ( zumindest nich wie ich es mache ). Hier einmal der Code eines Versuchs von mir: void loop() { if ( digitalRead ( TasterH ) == HIGH ){ Wert++; lcd.clear(); lcd.print ( Wert ); while ( digitalRead ( TasterH ) == HIGH ) { if ( pulseIn ( TasterH, HIGH, 5000 ) { Wert++; lcd.clear(); lcd.print ( Wert ); delay (100); } } } } Was mach ich falsch? Hoffe irgendwer kann mir helfen.
Robin F. schrieb: > Was mach ich falsch? Du hast dir einen Arduino gekauft, um programmieren zu lernen.
Ja das kann vlt. sein...aber das bringt mich auch nicht weiter bei meinem Problem...ich programmiere auch normales C, krieg es trotzdem nich hin!
Wie zählst du denn hoch? Mit einem Timer? Da sollte man den Timerwert jedes mal neu setzen, wenn der Interrupt abgelaufen ist. Durch setzen eines größeren Timer-Werts wird schneller der Overflow Interrupt erreicht, der Timer ist dann schneller.
Ja. Okey dann werde ich da nochmal ansetzen und es mit einem Interrupt versuchen. Vielen dank erstmal
du nimmst nen Timer, und fragst in dessen ISR den Tastenzustand ab. Den ist der Tastenzustand gedrückt, dann zählst Du eine Variable hoch. Ist der Taster ist nicht gedrückt, dann setzt Du die Variable wieder auf Null. Erreicht die Variable ihren maximalen Wert, z.B. 255 für n Byte, dann stoppst Du das Hochzählen oder ziehst wieder 1 von der Variable ab, damit die nicht überlaufen kann. Die Variable kannst Du dann in der Mainloop auswerten, also in der Art wenn Zählvariable ist Null, dann mach nix, wenn kleiner 100 dann erhöhe Wert langsam, ansonsten erhöhe Wert schnell.
Robin F. schrieb: > zählen. Ich habe gelesen das der Befehl " pulseIn();" dafür zu benutzen > is, um die Zeit zu messen, wie lange der taster gedrückt wird. Das > klappt nicht ( zumindest nich wie ich es mache ). Wenn ich mirt die Doku von PulseIn so ansehe http://arduino.cc/en/Reference/pulseIn dann sehe ich nicht nicht ganz, wie man das für den angestrebten Fall benutzen kann. Du Idee das PulseIn dann loszulassen, wenn der Pin schon High ist, klingt erst mal plausibel. Dann muss PulseIn allerdings auf den Übergang High-Low warten, damit es dir sagt, dass da die Taste länger als das Timeout gedrückt ist. Nur sehe ich jetzt noch nicht, wie man dann das PulseIn davon abhält das Nichtgedrücktsein der Taste auszumessen.
Schönen guten Morgen, erstmal Danke für die schnellen Antworten. @Karl Heinz Buchegger: Ja das is auch so mein Problem, es scheint auf dem ersten Blick ganz einfach und logisch, also das man abfragt welcher Pin wie lange HIGH oder LOW ist, aber das ist es nicht. Ich sitzt da schon eine ganze Weile dran...das irgendwie hin zu bekommen abr ohne erfolg. Ich werde jetzt mal versuchen das mit dem PulseIn zu lassen und schau mal die Idee von "Fhutdhb Ufzjjuz" umzusetzen. Ich melde mich dann nachher nochmal ob ich irgendwie erfolge gemacht habe. mfG
Hallo, hast du auch beachtet da ein Taster prellt, d.h. das nicht sofort tatsächlich eine 1 (high) anligt sondern für einen kurzen Zeitraum (einige ms) immer zwischen 1 und 0 hin und her geschaltet wird ? Dein Stichwort ist Tasterentprellung (böse Falle wenn man wenig erfahrung mit der Hardware hat). mgf Praktiker
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.