Hi,
ich habe an meinem Arduino einen Schlater und 3 LEDs angebunden. Wenn
ich den Knopf drücke soll die erste LED starten, wenn ich den nochmal
drücke die zweite und die dritte beim dritten drücken.
Wenn ich aber es teste und auf den Knopf drücke, dann geht die erste LED
an und nach dem drücken wieder aus und nochmal drücken das gleiche.
Was ist hier falsch:
in jedem Schleifendurchlauf den counter wieder auf 0. D.h. er kann gar
nie höher als 1 werden. Heißt: Die Initialisierung von counter ins setup
verschieben!
Grüße
Da ist kein Schleifendurchlauf. Nur weil die Routine "loop()" heisst?
Der macht das alles einmal und resettet evtl. Beim nächsten Druck ist er
dann wieder bei eins.
Oder ist das beim aruninio anders? bestimmt doert der Name der Funktion
deren Verhalten ;))
Simon Name schrieb:> void loop(){> int counter=0; <--- !!!!!!!!>
Weil bei jedem Durchlauf deiner Hauptschleife counter auf 0 gesetzt
wird.
Schreibe das int counter=0; mal in die void setup().
Gruß
Thomas
Ok danke, das hat schon geholfen.
Nur jetzt ist es so der Ablauf
1.Druck: LED 1 und 2 gehen an
2. Druck: während dem Drücken gehen alle LEDs an und nach dem Drücken
sind alle aus
3.Druck: während dem Drücken gehen wieder alle an und danach ist die
erste LED an
4. Druck: beim Drücken geht sind LED1 und 2 an und danach ist die erste
an
5. Druck: alle sind an
6. Druck: dritte geht aus
7.Druck: alle gehen beim Drücken an und danch sind alle wieder aus
Und nun mein Gedanke:
WAS???
Kann mir jemand helfen?
war ja nicht soo bierernst zu nehmen. Natürlich lese ich hier weiter mit
:)
Die kommen aber auch auf Ideen. Wenn der geneigte arduino-User dann mal
umsteigt, blickt er nicht mehr durch!"
Die Umgebung ( processing.org ) finde ich aber ganz nett, muss ich
erlich zugeben. Ich habe da mit JAVA bissschen was veranstaltet. Geht
1A!
Zurück zum Thema...
Simon Name schrieb:> WAS???
Ist die Taste entprellt? Sonst ist das Ergebnis eher zufällig, zumindest
nicht genau reproduzierbar.
Simon Name schrieb:> if(schalter==HIGH){> counter++;
Außerdem wird nicht gewartet, bis der Taster wieder losgelassen wird.
Also müssten beim Halten der Taste die LEDs durchlaufen.
Aber vielleicht sind in den Arduino-Funktionen noch geheimnisvolle
Eigenschaften versteckt, die das verhindern ...
Gruß Dietrich
Solange der Schalter gedrückt ist, zählt er immer wieder
und wieder hoch. Daher sind alle LEDs an.
Wenn du ihn los lässt, dann bleibt er zufällig auf dem letzten
Wert stehen.
Vielleicht solltest du nach dem Drücken und Setzen der LEDs
warten, bis der Schalter wieder losgelassen wird.
Nächstes Problem könnte dann das Prellen des Schalters sein...
Normalerweise reicht ein static vor der Deklaration. Dann wird die
Variable nur einmal initialisiert (zumindest in C).
Also:
[c]void loop(){
static int counter=0;
...[c]
Trotzdem denke ich auch, dass etwas gegen das Tastenprellen gemacht
werden muß.
Gruß,
Charles
Ich bin kein Arduino-Experte, aber da digitalRead nur den Zustand eines
Ports zurück gibt, kann die Funktion nicht wissen, ob ein Taster oder
etwas anderes angeschlossen ist. Ich habe auch ein Beispiel-Code zum
entprellen gefunden: http://www.arduino.cc/en/Tutorial/Switch