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 15:23] 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: | ||
- | {{ :faecher:informatik:arduino:taster-led_steckplatine.png?400}} | + | {{ :faecher:informatik:projekt4_steckplatine.png}} |
+ | |||
+ | <note important>Vorsicht! Wenn in diesem Aufbau der //Arduino// mit Strom versorgt wird **und** der Taster gedrückt wird, kann in seltenen Fällen ein Kurzschluss entstehen. Dem kann man nur **sicher** entgehen, wenn man **nach** der Stromversorgung des //Arduino// und **vor** dem erstaligen Drücken des Tasters ein zum Aufbau passendes Programm aufgespielt wird.</note> | ||
+ | |||
+ | Ein pssendes Programm wäre: | ||
+ | <code cpp> | ||
+ | void setup() { | ||
+ | pinMode(3, OUTPUT); | ||
+ | pinMode(2, INPUT_PULLUP); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | if(!digitalRead(2)) { | ||
+ | digitalWrite(3, HIGH); | ||
+ | delay(250); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Die Zeile | ||
+ | <code cpp> | ||
+ | pinMode(2, INPUT_PULLUP); | ||
+ | </code> | ||
+ | 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 | ||
+ | <code cpp> | ||
+ | if(!digitalRead(2)) { | ||
+ | digitalWrite(3, HIGH); | ||
+ | delay(250); | ||
+ | } | ||
+ | </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 und wartet eine Viertelsekunde. | ||
+ | |||
+ | **Problem: Der //Arduino// schaltet die Leuchtdiode zwar ein, aber nicht wieder aus!** | ||
+ | |||
+ | Um das leisten zu können, müsste sich der //Arduino// "merken", ob die Leuchtdiode schon eingeschaltet ist oder nicht. Dazu verwenden wir eine Merkvariable, die nur zwei Werte speichern kann: wahr bzw. falsch, oder gleichwertig: ein bzw. aus. Der Wert wahr lautet auf englisch **true** und ist mit **HIGH** gleichwertig. Der Wert falsch lautet auf englisch **false** und ist mit **LOW** gleichwertig.\\ | ||
+ | Damit sollte der Quelltext wie folgt aussehen: | ||
+ | <code cpp> | ||
+ | boolean status; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(3, OUTPUT); | ||
+ | pinMode(2, INPUT_PULLUP); | ||
+ | digitalWrite(3, LOW); | ||
+ | status = false; | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | if(!digitalRead(2)) { | ||
+ | status=!status; | ||
+ | digitalWrite(3, status); | ||
+ | delay(250); | ||
+ | } | ||
+ | } | ||
+ | </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]]. |