Pages: [1] 2   Go Down
Author Topic: Bouncer-Problem  (Read 2423 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey,
ich besitze einen Taster, einen Arduino duemilanove 328 und ein HD44780 (LCD Display).

Ich habe es bis jetzt geschafft ein Menü mit den Punkten:
Brennweite
Grad
Reihen

zu erstellen.

Wenn ich jetzt das Programm starte, wird das hier im Display angezeigt (so soll es auch sein) :

>Brennweite<
Grad
Reihen

Nochmaliges Tasten:

Brennweite
>Grad<
Reihen

usw.

Das Problem ist nur, dass der Taster manchmal aussetzt. Das heißt, wenn ich taste, blinkt der Arduino auch "Ja es wurde getastet" aber er schaltet nicht weiter.

Könnte das Problem durch einen Bouncer gelöst werden?


Ich habs versucht zu testen, aber die Bounce Libary:
http://arduino.cc/playground/Code/Bounce
beinhaltet irgendwie nicht die richtigen Keywords...

Ich habe mal ein Example Programm aus der Bounce Libary kompiliert, doch er findet die wichtigsten Befehle:
" bouncer.update ( );"
und
"Bounce bouncer = Bounce"
usw. nicht...

Mein bisherige Code:

Quote
#include <Bounce.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void Grundmenu()
{
lcd.setCursor(0, 0);
lcd.print("Brennweite      ");
lcd.setCursor(0, 1);
lcd.print("Grad            ");
lcd.setCursor(0, 2);
lcd.print("Reihen          ");
lcd.setCursor(0, 3);
lcd.print("                ");
}

void Brennweite()
{
lcd.setCursor(0, 0);
lcd.print(">Brennweite<    ");
lcd.setCursor(0, 1);
lcd.print("Grad            ");
lcd.setCursor(0, 2);
lcd.print("Reihen          ");
lcd.setCursor(0, 3);
lcd.print("                ");
}

void Grad()
{
lcd.setCursor(0, 0);
lcd.print("Brennweite      ");
lcd.setCursor(0, 1);
lcd.print(">Grad<          ");
lcd.setCursor(0, 2);
lcd.print("Reihen          ");
lcd.setCursor(0, 3);
lcd.print("                ");
}

void Reihen()
{
lcd.setCursor(0, 0);
lcd.print("Brennweite      ");
lcd.setCursor(0, 1);
lcd.print("Grad            ");
lcd.setCursor(0, 2);
lcd.print(">Reihen<        ");
lcd.setCursor(0, 3);
lcd.print("                ");
}

void setup()
{
pinMode(13,INPUT);
lcd.begin(20, 4);
Grundmenu();

}


//void loop(){
int i=1;
void loop(){
 if(digitalRead(13)==HIGH){
  i++;
 }
 if(i==4){
  i=1; 
 }
 if(i==1){
  Brennweite();
  delay(200);
 }

 if(i==2){
  Grad(); 
  delay(200);
 }

 if(i==3){
  Reihen();
  delay(200);
 }
}

Ich hoffe ihr könnt mir helfen, ich hab schon überall geschaut aber die Suche trägt keine Früchte  smiley-confuse
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Du könntest M2tklib für deine Menüs benutzen. M2tklib hat einen debounce Algorithmus eingebaut.

Vorschlag: Lade Dir m2tklib für LiquidCrystal herunter, installiere es in Deiner Arduino Umgebung und probiere die Beispiele mal aus (File -> Examples).

http://code.google.com/p/m2tklib/downloads/list

Oliver
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey,

danke Dir!

Ich hab gerade versucht die Examples zu verstehen und hab auch das Wiki gelesen..aber irgendwie kann ich rein nichts damit anfangen, was ich genau von den Befehlen benötige ( wahrsch.   m2.checkKey(); und m2.handleKey() ) und wo ich diese anwenden sollte...

Bei mir sagt er, dass  m2.checkKey(); nicht deklariert ist..die examples konnte er aber kompilieren.
 
Schwierig Schwierig..und das "nur" für einen Taster.  smiley-roll
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Naja, sagen wir mal so. Nur den Debounce Algorithmus herauszulösen, wird schiwerig sein.
Idee von mir war eher so: Wenn Dir die Beispiele zusagen, dann nimm doch für deine Menüs einfach m2tklib.

Du willst ja folgendes Menü erstellen:
>Brennweite<
Grad
Reihen

Das sieht etwa so aus (je nachdem wie du das machen willst, syntax kann falsch sein)
Code:
M2_BUTTON(el_brennweite, NULL, "Brennweite", fn_brennweite);
M2_BUTTON(el_grad, NULL, "Grad", fn_grad);
M2_BUTTON(el_reihen, NULL, Brennweite, fn_brennweite);
M2_LIST(list_main_menu) = { &el_brennweite, &el_grad, &el_reihen };
M2_VLIST(el_top, NULL, list_main_menu);

Selbstverständlich kann man dann mit m2tklib auch dialogboxen zur numerischen
Eingabe von Werten etc erstellen (siehe Beispiele)

Quote
was ich genau von den Befehlen benötige ( wahrsch.   m2.checkKey(); und m2.handleKey() )

Die Sequenz schaut immer gleich aus und kann praktisch aus den Beispielen 1:1 übernommen werden.
Aber wie gesagt: Ganz oder gar nicht. Am besten wäre es dann, die Menüs auch mit M2tklib nachzubauen.

Wenn Du wilst, kann ich mal einen lauffähigen Code für Dich zusammensetzen. Brauchst Du auch Dialogboxen, beispielsweise zur Eingabe der Brennweite? Wenn ja, wie soll die ausschauen? Hier spielt M2tklib seine Stärken aus.
Menüs können direkt miteinader verknüpft werden, so dass man direkt in die entsprechenden Unterdialoge gelangt in denen dann die Werte abgefragt werden.

Quote
Bei mir sagt er, dass  m2.checkKey(); nicht deklariert ist..die examples konnte er aber kompilieren.
Vermutlich fehlt das include file oder die deklaration des m2 objects (siehe Beispiele)

Mir ist schon klar, dass m2tklib nicht so ganz einfach ist. Das Erstellen eines Human-Machine-Interface hat halt auch so seine Tücken. m2tklib nimmt einem vieles ab und läßt dem Programmierer gleichzeitig genügend Freiheit zur Umsetzung seiner Ideen.
Wie gesagt, gerne können wir den Weg am Anfang gemeinsam gehen... Du beschreibst die Menüs ich setze es mal exemplarisch um.

Oder aber Du sagtst: "Nee, ich wollte nur den Debouncer....". Dann ist es vermutlich besser ich suche die Stelle im Code für Dich raus zum Nachprogrammieren.

Grüße, Oliver

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey, danke für Deine Antwort.

Interessant hört es sich an.
Es wäre super genial, wenn du mir mal ein lauffähiges Script schreiben könntest.

Durch einen 2. Taster sollen dann die Punkte, bei denen man gerade ist (die man mit dem 1. Taster ausgewählt hat) öffnen können..

>Brennweite<
Grad
Reihen

*2. Taster tast' *
Brennweite öffnet sich und soll beinhalten:

>70mm<
100mm
135mm
200mm
300mm

dazwischen soll man wieder wählen können und durch tasten des 2. taster die jeweilige brennweite ausgewählt werden, die man makiert hat.
Dann soll sich das Menü schließen und man soll zum 1. Menü kommen.

Das reicht erstmal
Es wäre super freundlich, wenn du das für mich machen könntest  smiley-kitty
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wieviele Zeilen hat dein Display? 16x4?
Sind die beiden Taster mit 2 Eingangspins verbunden?

Oliver

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die beiden Taster haben jeweils ein Eingang zum Arduino. (9 und 10)

20 Zeichen und 4 Zeilen.
Also 4x20.
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Ich hab mal dein Menü als M2tklib version angehängt.
Zusätzlich mit einem "Start" Button zum Aktivieren.
M2tk benutzt eckige Klammern für den Menü-Cursor, aber man kann da auch spzige daraus machen:


Für die Brennweiten habe ich eine scrollbare Liste mit entsprechender Scrollbar benutzt.
Obwohl es nicht so aussieht, aber die Scrollbar hat eine Auflösung von einem Pixel (und nicht nur von einem Zeichen). M2tklib programmiert hier dynamisch die Zeichen um.


Schließlich hab ich noch ein Grad Menü eingebaut. Man kann hier eine Zahl zwischen 0 und 90 eingeben. Der Fokus liegt hier auf der Zahl


Gleiches Menü, nur liegt der Fokus auf dem "ok" Button:


Als Beispiel hier der Code für das "Grad" Menü. M2tk hat hier schon recht mächtige Befehle um beispielsweise numerische Eingaben zu ermöglichen (U8NUM):

Code:
// Grad-Menü: Es kann eine Zahl von 0 bis 90 eingegeben werden.
// Das LABEL Element gibt einfach nur einen Text aus
M2_LABEL(el_grad_label, NULL, "Grad:");
// Der Benutzer kann hier eine Zahl zwischen 0 und 90 eingeben. Die Zahl
// wird direkt in der globalen Variablen "grad" gespeichert
M2_U8NUM(el_grad_u8, "c2", 0, 90, &grad);
// wenn der Benutzer fertig mit der Eingabe ist, geht es hier zurück zum Hauptmenü
M2_ROOT(el_grad_ok, NULL, "ok", &el_menu);
// jetzt werden die drei Elemente zusammengefasst
M2_LIST(list_grad) = { &el_grad_label, &el_grad_u8, &el_grad_ok };
// Das Kontainerelement GRIDLIST ordnet die Elemente als Matrix an
M2_GRIDLIST(el_grad_menu, "c2", list_grad);

Natürlich könnte man das Grad-Menü auch an irgendeiner anderen Stelle im Display platzieren (z.B. mit M2_ALIGN), aber ich wollte es nicht unnötig kompliziert machen.

Ich habe alles mit meinem 16x4 Display ausprobiert. Ggf musst Du das im Setup auf 20x4 ändern. Die Taster scheinen wohl bei uns gleich angeschlossen zu sein.
 
Grüße, Oliver

* Menu1.pde (6.13 KB - downloaded 14 times.)
« Last Edit: March 30, 2012, 02:32:10 pm by olikraus » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey,

vielen vielen Dank!

Ich frage mich nur grad wo man die "m2ghlc.h" Library herbekommt?!
Ich hab' die gar nicht und finden kann ich sie auch nicht.  smiley-confuse
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


oh, kleiner Fehler von mir:

In dem Beispiel "menu1.pde" muss es statt
Code:
#include "m2ghlc.h"

korrekterweise
Code:
#include "utility/m2ghlc.h"
heissen.

Meine Compiler-Umgebung ist etwas anders aufgesetzt.
Habe das .pde nochmal angehängt.

Oliver



* Menu1.pde (6.14 KB - downloaded 8 times.)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Okay,

angepasst ist es.

Nun funktioniert der Select Taster wie er soll!

Der Next Taster funktioniert aus irgendwelchen Gründen aber nicht... ich habe die Pins überprüft.
Finds komisch!

Danke - vielen Dank nochmal an Dich, dass du mir so hilfst, ist ja nicht selbstverständlich!
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hm... der eine Taster geht, der andere nicht. Seltsam. Hast Du mal mit dem Voltmeter den Pin nachgemessen? Wenn gedrückt, dann 0V, wenn nicht gedrückt 5V? Hängt noch was anderes an dem Pin?
Versuchsweise könnte man den Taster auch an einen anderen Eingang hängen (dann auch das Beispiel abändern..)

Oliver
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Taster gingen ja am anderen Programm.

Ich habe noch einen anderen Taster, den ich dann auch auf einen anderen Pin gelegt habe..aber das geht auch nicht.. hm sehr komisch!
Logged

Germany
Offline Offline
Edison Member
*
Karma: 100
Posts: 1218
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Haben denn die anderen Beispiele der M2tklib funktioniert?

Oliver
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Jap..anderes Example getestet.
Und es funktioniert da genauso wenig mit dem Next Taster...
Das verwirrt mich sehr!
Logged

Pages: [1] 2   Go Up
Jump to: