Pages: [1] 2   Go Down
Author Topic: Anfänger braucht hilfe bei Taster led schaltung.  (Read 1207 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 2
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Newbie
*
Karma: 1
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 94
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@J3RE ok gutes Argument smiley-grin Ist ja ein Taster hatte ich falsch gelesen smiley-grin
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Programm kommt erst zu dieser Kontrolle
Code:
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:
Code:
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 Offline
Full Member
***
Karma: 2
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So funktionierts:
Code:
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:
Code:
if (digitalRead(ta1)==HIGH && digitalRead(ta2)==HIGH){
  digitalWrite(led1,LOW);
  digitalWrite(led2,LOW);
}
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

und was willst Du wenn kein Taster gedrückt ist?
Grüße Uwe
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
// 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 Offline
Full Member
***
Karma: 2
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du hast nur die geschwungenen Klammern vergessen.

Code:
if (digitalRead(taster)==HIGH){
  digitalWrite(led1,HIGH);
  delay(5000);
  digitalWrite(led1,LOW);
}

Jetzt sollte es funktionieren smiley
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Full Member
***
Karma: 2
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja genau.

Und wenn du nur eine Anweisung hast kannst du es auch so machen:
Code:
if (digitalRead(taster) == HIGH) digitalWrite(led1, HIGH);
also ohne die geschwungenen Klammern
Logged

Pages: [1] 2   Go Up
Jump to: