PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino Anfänger hat frage



der_tom
07.12.2012, 12:24
hallo,

ich spiele zur zeit etwas mit einem Arduino rum, macht ja mega spaß, ich bin recht neu in diesem thema

ich habe ein paar Beispiel scripts getestet und wollte jetzt mal versuchen mit zwei Tastern zwei led zu schalten

also s1 = LED1 on
s2 = LED2 on

mein scipt

const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 13;
const int ledPin2 = 12;


int buttonState1 = 0;
int buttonState2 = 0;

void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
}

void loop()
{
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
if
(buttonState1 == HIGH)
{

digitalWrite(ledPin1, HIGH);

}
else
{
digitalWrite(ledPin1, LOW);
}

if
(buttonState2 == HIGH)
{

digitalWrite(ledPin2, HIGH);
}
else
{
digitalWrite(ledPin2, LOW);
}
}

nur egal welchen taster ich drücke es geht immer nur led1 an..

kan mir jemand erklären warum und eine lösuchg zeigen???

grus Tom

radbruch
07.12.2012, 12:39
void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
}


Wo sind die Einstellungen für LED2 und Taste2?

Vom arduino habe ich keine Ahnung. Wird setup() automatisch aufgerufen? Gibts da keine main()-Funktion?

der_tom
07.12.2012, 12:44
sorry da hat was gefehlt aber es geht trotzdem nicht



const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int ledPin1 = 13;
const int ledPin2 = 12;


int buttonState1 = 0;
int buttonState2 = 0;

void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT);
}

void loop()
{
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
if
(buttonState1 == HIGH)
{

digitalWrite(ledPin1, HIGH);

}
else
{
digitalWrite(ledPin1, LOW);
}

if
(buttonState2 == HIGH)
{

digitalWrite(ledPin2, HIGH);
}
else
{
digitalWrite(ledPin2, LOW);
}
}

radbruch
07.12.2012, 12:52
void loop()
{
digitalWrite(ledPin1, digitalRead(buttonPin1));
digitalWrite(ledPin2, digitalRead(buttonPin2));
}

oder überkreuz:

void loop()
{
digitalWrite(ledPin2, digitalRead(buttonPin1));
digitalWrite(ledPin1, digitalRead(buttonPin2));
}(Ich vermute, der Rückgabewert von digitalRead() ist nicht immer HIGH oder LOW.)

der_tom
07.12.2012, 12:57
nein ich weis zwar nicht wie du das meinst aber, ich habe es mal getestet und es geht auch nicht

rossir
07.12.2012, 21:35
Ich finde den Vorschlag von radbruch gut.
Hast Du wirklich auch überkreuz getestet?
Wenn Du schreibst "geht auch nicht", heißt das, dass dann LED1 nicht leuchtet?
Falls aber LED1 (überkreuz) leuchtet dann ist einfach LED2 kaputt oder hat keinen Kontakt.

der_tom
10.12.2012, 14:35
Hallo,

also ich habe des jetzt mal getestet aber es ändert sich nix, hier mein versuchaufbau

23992

drücke ich button 1 leuchtet led eins
drücke ich butten 2 leuchtet led eins

der_tom
13.12.2012, 08:44
Hat niemand noch eine erklärung???

ich verzweifel fast

radbruch
13.12.2012, 09:10
void loop()
{
digitalWrite(ledPin2, HIGH);
}

Wie soll eigentlich die Tasterbeschaltung funktionieren? Ein gemeinsamer PullDown für beide Taster? Zeichne das mal bitte als Schaltbild.

oderlachs
13.12.2012, 09:42
lege doch mal auf die Eingangspins für die Taster einen R 4,7k...10k gegen +5V , es dürfte aber schon "ButtonPin1 /bzw 2 = HIGH" im Setup {} reichen um den PullUP zu aktivieren und schalte den Taster gegen GND. Nur musst man dann LOW statt HIGH als State bei der Auswertung einsetzen/auswerten

Gruss OL

Wenn es noch nicht geht schreib mich per PN an...

hier das mit dem PullUP ausführlich


void setup()
{
.......
.......
// jetzt Eingänge auf HIGH setzen
digitalWrite(buttonPin1, HIGH); // PULLUP ON
digitalWrite(buttonPin2, HIGH); // PULLUP ON

}
....
........
if (buttonState1 == LOW) // Jetzt LOW auswerten !!!! { ..dann LED1 ein...

}



Nachtrag : Bei den aktivierten internen PULLUPS benötigt der Taster keine weitere Beschaltung, an den ButtonPin ist nur der Taster gegen GND zulegen !
Nun viel Erfolg !!

m.a.r.v.i.n
13.12.2012, 13:01
Hallo,
LEDs ohne Vorwiderstand betreiben ist ein No-Go. Bei LED1 die an Pin13 hängt, mag das noch funktionieren, da hier auch die Arduino Onboard LED dranhängt (mit Vorwiderstand). Bei LED2 an Pin12 geht das nicht. Vielleicht hast du die LED und/oder den Arduino Ausgang damit schon gekillt. Kuck dir mal die Beispiele (http://arduino.cc/en/Tutorial/HomePage)an, wie man Hardware an den Arduino richtig anschliesst.

golther
13.12.2012, 16:53
also bin auch noch neu in arduino aber musst du nicht prüfen ob buttonstate1/2 1 oder 0 ist?