Inhaltsverzeichnis

2.1. Der Taster in OpenRoberta

Nachdem wir in der ersten Lektion bereits gelernt haben, wie man eine oder mehrere LEDs zum Blinken bringt, schauen wie uns nun ein weiteres wichtiges Bauteil in der Mikroelektronik an: den Taster. 
Taster finden sich in der echten Welt an ganz vielen Stellen wieder. Zum Beispiel auf deinem Weg zur Schule, wo Sie unter anderem an Ampeln wiederfindest, oder wenn du morgens das Licht im Klassenraum einschalten möchtest. 

Wie du es aus Lektion 1 bereits kennst, starten wir mit der ROBOTERKONFIGURATION in OpenRoberta.

2.1.1. Roboterkonfiguration in OpenRoberta

Schritt 1:

Für den ersten Schritt unserer müssen wir in die ROBOTERKONFIGURATION von OpenRoberta navigieren.

Den entsprechenden Menüpunkt siehst du auf der nachfolgenden Abbildung. 

Abbildung Schritt 1

Schritt 2:

Wenn du auf das Feld ROBOTERKONFIGURATION geklickt hast, erscheint jetzt auf der linken Bildschirmseite ein neues Menü.

In diesem Menü klicken wir jetzt den Menüpunkt Sensoren an. 

Abbildung Schritt 2

Schritt 3:

Durch den Klick auf den Menüpunkt Sensoren öffnet sich ein zusätzliches Menü mit grünem Hintergrund. 

In diesem Menüpunkt findest du den Block für den Taster wieder.

Du fügst diesen Block zu deiner Roboterkonfiguration hinzu, indem du auf den Block klickst, dabei die linke Maustaste gedrückt hältst, du den Block in das weiße Feld ziehst. 

Abbildung Schritt 3

Schritt 4:

Wunderbar! Wenn deine Roboterkonfiguration jetzt so aussieht, wie du es auf der folgenden Abbildung erkennen kannst, hast du alles richtig gemacht. 

Wir schauen uns jetzt den Block ein wenig genauer an.

In der ersten Zeile des Blocks findest du die Worte „Taste“ und daneben den Buchstaben „T„. Das „T“ steht für den Namen deines Tasters. Du kannst diesen Namen beliebig anpassen – für den Anfang belassen wir es jedoch bei dem Buchstaben „T„. 

T“ für „Taster“, das passt doch gut, oder?

Abbildung Schritt 4

Schritt 5:

Spannender wird es in der zweiten Zeile des Blocks. Dort findest du neben dem Wort „pin“ die Bezeichnung „D2„. Diese Bezeichnung legt fest, an welchem digitalen Pin („D“ steht also für Digital) wir den Taster mit dem Mikrocontroller verbunden haben.

Jetzt ist es also eine gute Gelegenheit, einen Blick auf den Funduino Cube zu werfen.
Kannst du erkennen, an welchem digitalen Pin der Taster auf dem Cube mit dem Mikrocontroller verbunden ist? 

Abbildung Schritt 5

Schritt 6:

Na klar, richtig! Das ist natürlich der Pin „D9„. 

Wir müssen in dem Block also eine Änderung vornehmen. Das machen wir, indem wir mit der linken Maustaste in das Feld „D2“ klicken und den richtige Pin „D9“ auswählen. Du bestätigst deine Auswahl mit einem Klick der linken Maustaste.

Abbildung Schritt 6

Schritt 7:

Wenn du alles richtig gemacht hast, sieht den Block jetzt so aus wie in der nachfolgenden Abbildung.

In der ersten Zeile steht der Name des Tasters „T„, welchen wir nicht verändert haben.

In der zweiten Zeile ist nun der richtige digitale Pin „D9“ ausgewählt.

In der dritten Zeile, über die wir bis hierhin noch gar nicht gesprochen haben, steht 5V. Diese dritte Zeile gibt an, mit welcher Spannung der Taster betrieben wird. Wenn du in das Feld 5V klickst, wirst du feststellen, dass du dieses Feld nicht verändern kannst. 

Wir sind deshalb mit der Konfiguration des Tasters fertig. Herzlichen Glückwunsch!

Abbildung Schritt 7

Schritt 8:

Aber mal ehrlich: was können wir mit einem Taster anfangen, der bei einem Tastendruck gar nichts bewirkt?

Deshalb möchten wir jetzt noch eine LED hinzufügen, die beim Tastendruck aufleuchten soll. 

Dies gelingt uns, indem wir auf den Menüpunkt Aktion auf der linken Bildschirmseite klicken.

Abbildung Schritt 8

Schritt 9:

Wie man eine LED zur ROBOTERKONFIGURATION hinzufügt, hast du bereits in der ersten Lektion gelernt. Trotzdem schauen wir uns den Vorgang jetzt noch einmal genauer an. 

Nach dem Klick auf den Menüpunkt Aktion öffnet sich ein neues Fenster mit orangefarbenen Hintergrund.

In diesem Menüpunkt findest du, wenn du ein wenig mit dem Mausrad herunterscrollst, den Block für die LED.

Diesen Block ziehst du durch einen Klick mit der linken Maustaste, bei dem du die Maustaste gedrückt hältst, in das weiße Feld rechts daneben. 

Abbildung Schritt 9

Schritt 10:

Deine ROBOTERKONFIGURATION sollte jetzt so wie in der nachfolgenden Abbildung aussehen.

Jetzt folgt ein Schritt, den du bereits in der Lektion 1 kennengelernt hast.

Dort haben wir gelernt, dass wir mit Mikrocontroller beibringen müssen, an welchem Pin die LED mit dem Controller verbunden ist.

Na, erinnerst du dich daran, wie das geht?

Abbildung Schritt 10

Schritt 11:

Richtig! Wir klicken zunächst mit der linken Maustaste auf das Feld „Port intern“ in dem Block der LED. 

Aber Moment: welche LED möchten wir überhaupt mit dem Mikrocontroller ansteuern? In diesem Aufbau verwenden wir die rote LED

Wir müssen also zuerst auf unseren Funduino Cube schauen und herausfinden, welcher digitale Pin für die rote LED festgelegt ist.

Kannst du erkennen, an welchem Pin die rote LED mit dem Mikrocontroller verbunden ist?

Abbildung Schritt 11

Schritt 12:

Das war einfach: natürlich ist die rote LED mit dem Pin „D12“ verbunden. 

Wir wählen in dem Menü also „D12“ aus und bestätigen unsere Auswahl mit einem Klick auf die linke Maustaste. 

Abbildung Schritt 12

Schritt 13:

Toll gemacht! Deine Roboterkonfiguration sieht jetzt so aus wie auf dem nächsten Bild.

Fast hätten wir jedoch etwas vergessen. Kannst du erkennen, welchen Schritt wir vergessen haben?

Abbildung Schritt 13

Schritt 14:

Genau! Wir haben unserer LED noch gar keinen Namen gegeben. 

Ohne den richtigen Namen fällt es uns später bestimmt schwer, uns in unserem Programm zu orientieren.

Den Namen für diesen Block können wir vergeben, indem wir auf das „L“ neben dem Wort „LED“ klicken. 

Abbildung Schritt 14

Schritt 15:

Hier tragen wir jetzt das Wort „rot“ ein. 

So wissen wir später, dass die rote LED mit diesem Block angesteuert wird. 

Abbildung Schritt 15

Schritt 16:

Super! Wir haben unsere ROBOTERKONFIGURATION jetzt abgeschlossen.

Gleiche jetzt deine ROBOTERKONFIGURATION mit dem nachfolgenden Bild ab. Wenn alles übereinstimmt, können wir mit dem Programm beginnen.

Frage: Welche Änderungen müsstest du vornehmen, wenn du anstelle der roten LED eine grüne LED zum leuchten bringen möchtest?
Tipp: Es müssen genau zwei Änderungen vorgenommen werden. 

Abbildung Schritt 16

2.1.2. Beispielprogramm in OpenRoberta

In den vorherigen Schritten haben wir dem Mikrocontroller beigebracht, an welchen digitalen Ein- und Ausgängen sich der Taster und unsere LED befinden.

Jetzt möchten wir unser Programm schreiben. Wir erinnern uns hierbei an unsere Aufgabenstellung zurück: wenn wir den Taster drücken, soll unsere rote LED aufleuchten. Sobald wir den Taster wieder loslassen, soll die rote LED aufhören zu leuchten

Schritt 1:

Für unseren ersten Schritt wechseln wir wieder in unser Programm. Den Menüpunkt findest du oberhalb der weißen Fläche. 

Abbildung Schritt 1

Schritt 2:

Sobald du dich in der Programmansicht befindest, siehst du den Baustein auf der nachfolgenden Abbildung.

Dieser Baustein wird auch „loop„, also auf deutsch „Schleife“ genannt.

Die Schleife heißt deswegen so, weil Programminhalte, die sich innerhalb der Klammer befinden, wiederholt werden. 

Abbildung Schritt 2

Schritt 3:

Diese Schleife möchten wir zunächst erweitern. 

Wir starten dabei nicht direkt mit dem Block für den Taster oder unserer roten LED, sondern mit einer weiteren Schleife.

Warum wir das machen, erklären wir dir ein wenig später. 

Den Baustein für Schleifen findest du in dem Menü auf der linken Seite. Klicke hierfür mit der linken Maustaste auf den Block „Kontrolle„.

Abbildung Schritt 3

Schritt 4:

Jetzt öffnet sich ein neues Menü mit orangefarbenem Hintergrund.

Deine Oberfläche in OpenRoberta müsste jetzt so aussehen, wie auf der nachfolgenden Abbildung dargestellt. 

In dieser Oberfläche findest du eine ganze Reihe verschiedener Schleifen.

Neben dem „loop„, den du etwas weiter vorne schon kennengelernt hast, gibt es eine ganze Reihe verschiedener Schleifen.
Diese Schleifen helfen Programmierern wie dir und uns dabei, sogenannte Bedingungen festzulegen.

Abbildung Schritt 4

Schritt 5:

Noch einmal zur Erinnerung. Wir möchten folgende Aufgabenstellung umsetzen:

Wenn der Taster gedrückt wird, soll die rote LED leuchten.
Sonst soll die rote LED nicht leuchten.“

Diese Bedingung finden wir in unserer Oberfläche wieder.

Wir klicken den Block also mit der linken Maustaste an, halten diese gedrückt und ziehen Ihn in die weiße Fläche.

Abbildung Schritt 5

Schritt 6:

Gut gemacht! Wir haben soeben unsere erste richtige Schleife kennengelernt.

Die Schleife, die du jetzt verwendest, wird auf „if-else-Bedingung“ genannt. Zu deutsch: „wenn-sonst-Bedingung“. 

Wenn der Taster gedrückt wird, soll die rote LED leuchten.
Sonst soll die rote LED nicht leuchten.“

Abbildung Schritt 6

Schritt 7:

Jetzt müssen wir nur noch den Taster und unsere rote LED zu unserem Programm hinzufügen. 

Wir starten zuerst mit dem Taster.

Den Taster findest du in dem Menü auf der linken Bildschirmseite unter dem Menüpunkt „Sensoren„. Wir klicken also mit unserer linken Maustaste auf „Sensoren„. 

Abbildung Schritt 7

Schritt 8:

Es öffnet sich eine neue Oberfläche, diesmal allerdings mit einem grünen Hintergrund.

In diesem Menü suchen wir jetzt unseren Taster.

Na, kannst du den Block für den Taster in der nachfolgenden Abbildung finden?

Abbildung Schritt 8

Schritt 9:

Sehr gut! 

Wir klicken also wieder mit der linken Maustaste auf den Block für den Taster, halten die Maustaste gedrückt und ziehen den Block in das weiße Feld. 

Abbildung Schritt 9

Schritt 10:

Jetzt müssen wir uns eine wichtige Frage stellen: an welcher Stelle im Programm wird eigentlich abgefragt, ob der Taster gedrückt wird?

Wenn der Taster gedrückt wird, soll die rote LED leuchten.
Sonst soll die rote LED nicht leuchten.“

Der Block muss also neben das „wenn“ in unserer Schleife gehängt werden.

Dein Programm sollte jetzt so aussehen, wie auf der nachfolgenden Abbildung.

Würden wir unser Programm jetzt direkt übersetzen, würde dies aussagen:
Wenn der Taster gedrückt wird, …“. 

Den ersten Teil unserer Aufgabe haben wir damit geschafft. Toll gemacht!

Abbildung Schritt 10

Schritt 11:

Jetzt fehlt eigentlich nur noch unsere rote LED. Wie wir die rote LED in unserem Programm ergänzen, könntest du mittlerweile schon wissen.
Falls nicht, schaue dir die Lektion 1 noch einmal an.

Kleiner Tipp: den Block findest du im Menü auf der linken Seite unter dem Punkt „Aktion“ wieder.

Wenn der Taster gedrückt wird, soll die rote LED leuchten.
Sonst soll die rote LED nicht leuchten.“

Bisher umgesetzt haben wir hiervor:
Wenn der Taster gedrückt wird, soll die rote LED leuchten. …“

Wir müssen in dem Programm also noch ergänzen, dass die rote LED sonst nicht mehr leuchten soll. 

Abbildung Schritt 11

Schritt 12:

Toll gemacht! Wir machen großartige Fortschritte. 

Jetzt ist ein guter Zeitpunkt, um unser Programm einmal auf den Funduino Cube zu überspielen. 

Und, haben wir unser Ziel erreicht?

Abbildung Schritt 12

Schritt 13:

Mist! Leider haben wir unser Ziel noch nicht erreicht.

Um den Fehler ausfindig zu machen, versuchen wir unser Programm erneut in unsere Sprache zu übersetzen. 

Wenn der Taster gedrückt wird, soll die rote LED leuchten.
Sonst soll die rote LED nicht leuchten.“

Sonst auch.„? Das ist noch nicht ganz richtig!
Wir klicken mit der linken Maustaste also in das Feld „an“ des unteren Blocks für die rote LED und wählen hier „aus“ aus. 

Abbildung Schritt 13

Schritt 14:

Wenn der Taster gedrückt wird, soll die rote LED leuchten.
Sonst soll die rote LED nicht leuchten.“

Tolle Arbeit! Unser Programm liest sich jetzt genauso, wie es die Aufgabenstellung wünscht.

Es wird also höchste Zeit, dass wir das Programm erneut auf den Funduino Cube überspielen. 

Frage: Was würde passieren, wenn du das Programm um den Block „Warte ms“ ergänzt. Du findest den Block im linken Menü unter dem Menüpunkt „Kontrolle“. 

Abbildung Schritt 14

2.1.3. Programmcode in der Arduino Synthax

				
					int taster_T = 9; // Taster T an Pin D9
int led_rot = 10; // LED Rot an Pin D10

void setup()
{
    pinMode(taster_T, INPUT); // Der Taster T ist ein Eingang
    pinMode(led_rot, OUTPUT); // Die LED Grün ist ein Ausgang
}

void loop()
{
    if ( digitalRead(taster_T) ) { // Wenn der Taster T gedrückt wird...
      
        digitalWrite(led_rot, HIGH); // Schalte LED Rot an (Signal HIGH = 1)
        
    } else { // Ansonsten...
      
        digitalWrite(led_rot, LOW); // Schalte LED Rot aus (Signal LOW = 0)
    }
}
				
			

2.2. Erweiterung der Ampelschaltung aus Lektion 1 durch Ergänzung eines Tasters

Als nächstes Programmieren wir eine Fußgängerampel. Den grundlegenden Programmablauf, sowie die ROBOTERKONFIGURATION kannst du aus deinem Programm aus Lektion 1 übernehmen. 
Dazu soll der Arduino-Mikrocontroller während der Grünphase für Autofahrer permanent einen Taster abfragen. Bei Betätigung des Tasters (Drücken der Fußgängerampel) soll die Ampel für Autofahrer nach einer bestimmten Zeit auf Gelb und dann auf Rot schalten. 
Nach diesem Vorgang und einer weiteren kurzen Wartezeit, schaltet die Ampel für Autofahrer erneut auf grün.

2.2.1. Konfiguration in OpenRoberta

Schritt 1:

Die Roboterkonfiguration wird um einen Taster (T) erweitert. Dieser Taster wird in OpenRoberta an den digitalen Pin D9 gelegt. Die Versorgungsspannung wird mit 5V festgelegt. 

Die Einstellung aus dem Aufbau 1.1.1. wird beibehalten. 

Die rote LED wird dabei an den digitalen Pin D12 des Nano Controllers gelegt. 
Die gelbe LED wird dabei an den digitalen Pin D11 des Nano Controllers gelegt.
Die grüne LED wird dabei an den digitalen Pin D10 des Nano Controllers gelegt. 

Abbildung Schritt 1

2.2.2. Beispielprogramm in OpenRoberta

Schritt 1:

Auch hier möchten wir uns den Programmablauf genauer ansehen. 

Die LED grün ist im Grundzustand eingeschaltet.

Es folgt eine Abfrage, ob der Taster T gedrückt wird. Wenn der Taster gedrückt wird, startet der Programmablauf in der orangefarbenen Klammer.

Dabei wird in Folge des Tastendrucks eine Pause für 2000ms (2 Sekunden) eingelegt. In dieser Pause leuchtet die grüne LED weiter.

Anschließend wird die grüne LED ausgeschaltet und die gelbe LED eingeschaltet. 
Es folgt eine weitere Pause von 1000ms (1 Sekunde), in welcher nur die gelbe LED leuchtet.

Danach wird die gelbe LED ausgeschaltet und die rote LED eingeschaltet. 
Es folgt eine längere Pause von 5000ms (5 Sekunden), in welcher nur die rote LED leuchtet.

Im Anschluss wird die gelbe LED eingeschaltet und eine weitere Pause von 1000ms (1 Sekunde) eingelegt. Zu diesem Zeitpunkt leuchten sowohl die rote LED, als auch die gelbe LED.

Unmittelbar nach dieser Pause wird die gelbe LED und die rote LED ausgeschaltet. 

Frage: Warum endet das Programm mit dem Ausschalten der gelben LED und der roten LED?

Abbildung Schritt 1

2.2.3. Programmcode in der Arduino Synthax

				
					int led_gruen = 12; // LED Grün an Pin D12
int led_gelb = 11; // LED Gelb an Pin D11
int led_rot = 10; // LED Rot an Pin D10
int taster_T = 9; // Taster T an Pin D9

void setup()
{
    pinMode(led_gruen, OUTPUT); // Die LED Grün ist ein Ausgang
    pinMode(led_gelb, OUTPUT); // Die LED Gelb ist ein Ausgang
    pinMode(led_rot, OUTPUT); // Die LED Rot ist ein Ausgang
    pinMode(taster_T, INPUT); // Der Taster T ist ein Eingang
}

void loop()
{
    digitalWrite(led_gruen, HIGH); // Schalte LED Grün an (Signal HIGH = 1)
    
    if ( digitalRead(taster_T) ) { // Frage ab, ob der Taster T gedrückt wird
      
        delay(2000); // Warte zwei Sekunde
        digitalWrite(led_gruen, LOW); // Schalte LED Grün aus (Signal LOW = 0)
        digitalWrite(led_gelb, HIGH); // Schalte LED Gelb an (Signal HIGH = 1)
        delay(1000); // Warte eine Sekunde
        digitalWrite(led_gelb, LOW); // Schalte LED Gelb aus (Signal LOW = 0)
        digitalWrite(led_rot, HIGH); // Schalte LED Rot an (Signal HIGH = 1)
        delay(5000); // Warte fünf Sekunden
        digitalWrite(led_gelb, HIGH); // Schalte LED Gelb an (Signal HIGH = 1)
        delay(1000); // Warte eine Sekunde
        digitalWrite(led_gelb, LOW); // Schalte LED Gelb aus (Signal LOW = 0)
        digitalWrite(led_rot, LOW); // Schalte LED Rot aus (Signal LOW = 0)
    }
}