Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:schrecksekunde:taster [2018/03/05 16:11] m.lange |
faecher:informatik:schrecksekunde:taster [2018/03/16 21:11] (aktuell) |
||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
<note warning>Stecke **niemals** auf dem Steckbrett um, während der Arduino noch mit Strom versorgt wird.</note> | <note warning>Stecke **niemals** auf dem Steckbrett um, während der Arduino noch mit Strom versorgt wird.</note> | ||
<note warning>Achte darauf, dass auf dem Steckbrett keine **Kurzschlüsse** entstehen.</note> | <note warning>Achte darauf, dass auf dem Steckbrett keine **Kurzschlüsse** entstehen.</note> | ||
- | ===== Wie geht's weiter? ===== | + | ===== Was kommt jetzt? ===== |
Um zu demonstrieren, wie man auf einen Tastendruck reagieren kann, brauchen wir einen Aufbau, der sowohl einen Taster als auch ein Objekt beinhält, mit dem man die Reaktion sichtbar machen kann. Wir wollen dazu den Aufbau mit der [[faecher:informatik:schrecksekunde:led2|Leuchtdiode]] erweitern: | Um zu demonstrieren, wie man auf einen Tastendruck reagieren kann, brauchen wir einen Aufbau, der sowohl einen Taster als auch ein Objekt beinhält, mit dem man die Reaktion sichtbar machen kann. Wir wollen dazu den Aufbau mit der [[faecher:informatik:schrecksekunde:led2|Leuchtdiode]] erweitern: | ||
Zeile 23: | Zeile 23: | ||
if(!digitalRead(2)) { | if(!digitalRead(2)) { | ||
digitalWrite(3, HIGH); | digitalWrite(3, HIGH); | ||
- | delay(500); | + | delay(250); |
} | } | ||
} | } | ||
Zeile 32: | Zeile 32: | ||
pinMode(2, INPUT_PULLUP); | pinMode(2, INPUT_PULLUP); | ||
</code> | </code> | ||
- | im **setup**-Teil teilt dem //Arduino// mit, dass er am Kontakt D2 erwarten soll, dass dort Strom **in** den //Arduino// fließt. | + | im **setup**-Teil teilt dem //Arduino// mit, dass er am Kontakt D2 erwarten soll, dass dort Strom **in** den //Arduino// fließt. Zudem schaltet er einen großen Widerstand in den Stromkreis, sodass selbst bei gedrücktem Taster **kein** Kurzschluss entsteht! |
Die Zeilen | Die Zeilen | ||
Zeile 38: | Zeile 38: | ||
if(!digitalRead(2)) { | if(!digitalRead(2)) { | ||
digitalWrite(3, HIGH); | digitalWrite(3, HIGH); | ||
- | delay(500); | + | delay(250); |
} | } | ||
</code> | </code> | ||
- | im **loop**-Teil veranlassen den //Arduino// zu prüfen, **ob** Strom einfließt über den Kontakt D2. Falls ja, schaltet der //Arduino// die Leuchtdiode ein. | + | im **loop**-Teil veranlassen den //Arduino// zu prüfen, **ob** Strom einfließt über den Kontakt D2. Falls ja, schaltet der //Arduino// die Leuchtdiode ein und wartet eine Viertelsekunde. |
**Problem: Der //Arduino// schaltet die Leuchtdiode zwar ein, aber nicht wieder aus!** | **Problem: Der //Arduino// schaltet die Leuchtdiode zwar ein, aber nicht wieder aus!** | ||
Zeile 61: | Zeile 61: | ||
status=!status; | status=!status; | ||
digitalWrite(3, status); | digitalWrite(3, status); | ||
- | delay(500); | + | delay(250); |
} | } | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | Die Zeile | ||
+ | <code cpp> | ||
+ | status = false; | ||
+ | </code> | ||
+ | setzt zu Beginn den Merker, ob die Leuchtdiode eingeschaltet ist, auf ausgeschaltet. | ||
+ | Die Zeilen | ||
+ | <code cpp> | ||
+ | status=!status; | ||
+ | digitalWrite(3, status); | ||
+ | </code> | ||
+ | ändern zuerst den Status von wahr auf falsch bzw. umgekehrt (je, nachdem). Zudem wird die Leuchtdiode dann ein- oder ausgeschaltet. (Wieder je, nachdem! Bedenke, statt **HIGH** kann man auch **true** beim Schalten schreiben, statt **LOW** auch **false**.) | ||
+ | |||
+ | Und wenn wir schon so weit sind, führen wir zwei weitere Merker ein: eine Variable (''ledPin'') soll sich merken, an welchem Kontakt die Leuchtdiode angeschlossen ist, die andere (''tasterPin''), wo der Taster zu finden ist.\\ | ||
+ | Das hat den Vorteil, dass man sich bei mehreren verwendeten Kontakten nur die Namen merken muss. Das fällt den meisten Leuten einfacher, als sich Zahlen zu merken! | ||
+ | |||
+ | Damit sieht der Quelltext folgendermaßen aus: | ||
+ | ==== vollständiges Programm mit Taster ==== | ||
+ | <code cpp> | ||
+ | int ledPin = 3; | ||
+ | int tasterPin = 2; | ||
+ | boolean status; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(ledPin, OUTPUT); | ||
+ | pinMode(tasterPin, INPUT_PULLUP); | ||
+ | digitalWrite(ledPin, LOW); | ||
+ | status = false; | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | if(!digitalRead(tasterPin)) { | ||
+ | status=!status; | ||
+ | digitalWrite(ledPin, status); | ||
+ | delay(250); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Ziel erreicht ===== | ||
+ | **Herzlichen Glückwunsch! Du weißt nun, wie man auf einen Tastendruck reagiert und z.b. eine Leuchtdiode einschaltet.**\\ | ||
+ | ===== Weitere Ideen ===== | ||
+ | Wenn du noch Zeit hast, kannst du folgendes ausprobieren: | ||
+ | * Baue eine zweite Leuchtdiode ein. Lasse nur eine leuchten, bis der Taster gedrückt wird. Schalte dann die erste Leuchtdiode aus und die zweite für 3 Sekunden an. Dann schalte wieder die erste ein und die zweite aus! | ||
+ | * Baue eine Ampelschaltung. Wenn du Anleitung brauchst, findest du [[faecher:informatik:arduino:ampel_ueber_taster|hier]] welche. | ||
+ | * Eine schwierige Sache: Baue eine Schaltung mit drei Leuchtdioden und einem Taster. Versuche ein Programm zu schreiben, bei dem bei jedem Tasterdruck "im Kreis" die Leuchtdioden ein- bzw. ausgeschaltet werden. | ||
+ | ====== Wie geht's weiter? ====== | ||
+ | Weiter geht's mit [[faecher:informatik:schrecksekunde:servo|Wie man einen Servomotor ansteuert]]. |