Was stimmt an diesem Code nicht?

OP #3204245
Lesenswert?

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:
1
void setup(){
2
  pinMode(13, OUTPUT);
3
  pinMode(12, OUTPUT);
4
  pinMode(11, OUTPUT);
5
  pinMode(2, INPUT);
6
  Serial.begin(9600);
7
}
8

9
void loop(){
10
 int counter=0;
11

12
 int schalter=digitalRead(2);
13
 Serial.println(schalter, DEC);
14
 
15
 if(schalter==HIGH){
16
   counter++;
17
 }
18
 if(counter==0){
19
   digitalWrite(13, LOW);
20
   digitalWrite(12, LOW);
21
   digitalWrite(11, LOW);
22
 }
23
 if(counter==1){
24
   digitalWrite(13, HIGH);
25
   digitalWrite(12, LOW);
26
   digitalWrite(11, LOW);
27
 }
28
 if(counter==2){
29
   digitalWrite(13, HIGH);
30
   digitalWrite(12, HIGH);
31
   digitalWrite(11, LOW);
32
 }
33
 if(counter==3){
34
   digitalWrite(13, HIGH);
35
   digitalWrite(12, HIGH);
36
   digitalWrite(11, HIGH);
37
 }  
38
 if(counter==4){
39
   counter=0;
40
 }
41
 
42
  
43
}
Danke und Gruß
Gast #3204255
Lesenswert?

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 ;))
OP #3204264
Lesenswert?

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?
Gast #3204287
Lesenswert?

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...
#3204290
Lesenswert?

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
Gast #3204291
Lesenswert?

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...
Gast #3204308
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren