Offline
Jr. Member
Karma: 0
Posts: 68
|
 |
« on: January 12, 2013, 02:12:37 pm » |
Hallo,
irgendwie funktioniert mein Programm nicht. Die led will nicht angehen, wenn ich den taster drücke. Kann mir wer sagen, wo der fehler liegt?
// LED mit Taster ein.
// pinnummer der ein/ausgänge und bezeichnung const int ta1 = 10; const int led1 = 9;
void setup() { pinMode(led1, OUTPUT); pinMode(ta1, INPUT); }
void loop(){ if (ta1 == HIGH) { digitalWrite(led1, HIGH); } else { digitalWrite(led1, LOW); } }
Als weitererSchritt soll die LED beim 1 mal tasten angehen, und beim 2 mal tasten ausgehen.
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #1 on: January 12, 2013, 02:27:15 pm » |
Hi, wie hast du den schalter Angeschlossen? Ein schalter schaltet nicht direkt nur High z.B. schau dir mal Debouncen von schaltern an, da ist auch ein beispiel welches genau das was du suchst machst gibt's auch auf deutsch
|
|
|
|
|
Logged
|
|
|
|
|
Austria
Offline
Jr. Member
Karma: 2
Posts: 94
|
 |
« Reply #2 on: January 12, 2013, 02:33:47 pm » |
Hi, wie hast du den schalter Angeschlossen? Ein schalter schaltet nicht direkt nur High z.B. schau dir mal Debouncen von schaltern an, da ist auch ein beispiel welches genau das was du suchst machst gibt's auch auf deutsch @Chaos_Lord Bei dem Code welchen er jetzt verwendet braucht er kein Debouncen. Nur wenn er das mit dem "tasten" machen will. Wie hast du den Taster denn angeschlossen?
|
|
|
|
« Last Edit: January 12, 2013, 02:36:51 pm by J3RE »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 1
Posts: 29
|
 |
« Reply #3 on: January 12, 2013, 02:35:13 pm » |
Hi,
In der Variablen ta1 steht nicht der Wert, den du suchst, sondern die Pin-Nummer. Wenn du auf High vergleichen willst, musst du vorher ein "digitalread" machen.
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Jr. Member
Karma: 0
Posts: 89
|
 |
« Reply #4 on: January 12, 2013, 02:58:22 pm » |
@J3RE ok gutes Argument  Ist ja ein Taster hatte ich falsch gelesen 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 68
|
 |
« Reply #5 on: January 12, 2013, 03:03:44 pm » |
Ah Danke.
Funktioniert nun. Der Taster ist wie in den Video angeschlossen, auch mit einem 10 KOhm Wiederstand am Eingang vom Ardoino gegen Masse.
wie kann ich (digitalRead(ta1)==HIGH) und (digitalRead(ta2)==HIGH) verknüpfen? Besser ausgedrückt, wie kann ich mit if (digitalRead.... 2 Eingänge (ta1 und ta2) abfragen?
LG. Rene
|
|
|
|
« Last Edit: January 12, 2013, 04:17:04 pm by Rene_Merten »
|
Logged
|
|
|
|
|
Hamburg, Germany
Offline
Sr. Member
Karma: 3
Posts: 285
|
 |
« Reply #6 on: January 12, 2013, 04:23:06 pm » |
if (digitalRead(ta1) && digitalRead (ta2)) { // tue irgendwas wenn beide Schalter gedrückt sind }
if (digitalRead(ta1) | digitalRead (ta2)) { // tue irgendwas wenn entweder ta1 ODER ta2 gedrückt ist }
if (!digitalRead(ta1) && digitalRead (ta2)) { // tue irgendwas wenn nicht ta1 aber ta2 gedrückt ist }
if (digitalRead(ta1)){} ist übrigens die Kurzform von if (digitalRead(ta1) == HIGH) {}
etc.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 68
|
 |
« Reply #7 on: January 12, 2013, 04:55:24 pm » |
Irgenwie klappt es grad nicht. Und zwar möchte ich, wenn beide Taster gedrückt werden, Beide Ausgänge auf LOW gesetzt werden.?
void loop(){ if (digitalRead(ta1)==HIGH){ digitalWrite(led1,HIGH); digitalWrite(led2,LOW); } else { if (digitalRead(ta2)==HIGH){ digitalWrite(led1,LOW); digitalWrite(led2,HIGH); } else { if (digitalRead(ta1)==HIGH && digitalRead(ta2)==HIGH){ digitalWrite(led1,LOW); digitalWrite(led2,LOW); }
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #8 on: January 12, 2013, 05:03:03 pm » |
Das Programm kommt erst zu dieser Kontrolle else { if (digitalRead(ta1)==HIGH && digitalRead(ta2)==HIGH){ digitalWrite(led1,LOW); digitalWrite(led2,LOW); } wenn in den 2 vorhergehenden kontrollen TA1 und TA2 LOW waren. Diese können dann sofort nacher nicht HIGH sein. So funktionierts: if (digitalRead(ta1)==HIGH){ digitalWrite(led1,HIGH); } if (digitalRead(ta2)==HIGH){ digitalWrite(led2,HIGH); } if (digitalRead(ta1)==LOW and digitalRead(ta2)==LOW){ digitalWrite(led1,LOW); digitalWrite(led2,LOW); } Grüße Uwe
|
|
|
|
« Last Edit: January 12, 2013, 05:06:58 pm by uwefed »
|
Logged
|
|
|
|
|
Austria
Offline
Jr. Member
Karma: 2
Posts: 94
|
 |
« Reply #9 on: January 13, 2013, 07:45:32 am » |
So funktionierts: if (digitalRead(ta1)==HIGH){ digitalWrite(led1,HIGH); } if (digitalRead(ta2)==HIGH){ digitalWrite(led2,HIGH); } if (digitalRead(ta1)==LOW and digitalRead(ta2)==LOW){ digitalWrite(led1,LOW); digitalWrite(led2,LOW); } Grüße Uwe Er will ja das beide LED's LOW sind, wenn beide Taster gedrückt sind. Somit müsste der letzte Teil so aussehen: if (digitalRead(ta1)==HIGH && digitalRead(ta2)==HIGH){ digitalWrite(led1,LOW); digitalWrite(led2,LOW); }
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #10 on: January 13, 2013, 09:04:47 am » |
und was willst Du wenn kein Taster gedrückt ist? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 68
|
 |
« Reply #11 on: January 13, 2013, 11:12:00 am » |
benötige noch mal ein bischen hilfe bei einem timer. Eigentlich solte die led nach drücken des tasters für 5s angehen. Geht aber nicht, es sei denn ich drücke den taster mid. 5s. Dann bleibt die led 5s an. Wo liegt der fehler? ps: Auch wenn ich mit buttonState arbeite geht es nicht. // Timer.
const int led1=9; const int taster=10;
void setup() { pinMode(led1,OUTPUT); pinMode(taster,INPUT); }
void loop() { if (digitalRead(taster)==HIGH) digitalWrite(led1,HIGH); delay(5000); digitalWrite(led1,LOW); }
|
|
|
|
|
Logged
|
|
|
|
|
Austria
Offline
Jr. Member
Karma: 2
Posts: 94
|
 |
« Reply #12 on: January 13, 2013, 12:06:58 pm » |
Du hast nur die geschwungenen Klammern vergessen. if (digitalRead(taster)==HIGH){ digitalWrite(led1,HIGH); delay(5000); digitalWrite(led1,LOW); } Jetzt sollte es funktionieren 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 68
|
 |
« Reply #13 on: January 13, 2013, 12:15:05 pm » |
Thanks.
Der eigentliche code nach void loop kommt in einer geschwungene Klammer. Wenn ich nach if (digitalRead(taster)==HIGH) eine neue "Anweisung" mache, muss die ebenfalls in einer geschwungene Klammer. OK.
Also ist es dann eine Anweisung in einer Anweisung. Oder sehe ich es falsch?
|
|
|
|
|
Logged
|
|
|
|
|
Austria
Offline
Jr. Member
Karma: 2
Posts: 94
|
 |
« Reply #14 on: January 13, 2013, 12:21:31 pm » |
Ja genau. Und wenn du nur eine Anweisung hast kannst du es auch so machen: if (digitalRead(taster) == HIGH) digitalWrite(led1, HIGH); also ohne die geschwungenen Klammern
|
|
|
|
|
Logged
|
|
|
|
|
|