
Programmierung eines Ampelsystems: Erkennung eines Fahrzeugs

Upgrade für mehr Inhalte
What message is sent by radio to the traffic light?
Das ist eine Ampel. Sie zeigt Rot. Hier kommt ein Bus. Der ist verspätet. Stell dir vor, der Bus könnte wieder Zeit reinholen, weil er nicht an einer roten Ampel warten muss!
Was, wenn der Bus der Ampel mitteilen könnte, dass er kommt? Jetzt programmieren wir einen Bus so, dass er der Ampel eine Nachricht schicken kann. Wir nutzen Funksignale für die Kommunikation. Bevor wir anfangen, brauchen wir: Einen Mikrocontroller und drei damit verbundene LEDs, wie das in einem anderen Video beschrieben wird. Noch einen Mikrocontroller, der den Bus darstellt.
Und ein Programm für den Bus. Fangen wir mit dem Pseudocode für den Bus an. Der Bus schickt ein Funksignal an die Ampel. Damit die Ampel das Funksignal vom Bus empfangen kann, muss sie dieselbe Frequenz nutzen, denselben Funkkanal. Wir wählen Funkkanal "Eins".
Der Pseudocode für das Bus-Programm beginnt also mit: Starte Programm. Setze die Funkkanal auf "Eins". Der Bus möchte eine grüne Ampel. Wenn der Bus die Nachricht "Eins" schickt, bedeutet das "Hier komme ich, schalte auf Grün". Wann schickt der Bus seine "Eins" dann?
Naja, wenn er in die Nähe der Ampel kommt. Wir verbinden genau das mit der A-Taste am Mikrocontroller. Wenn A gedrückt wird, schicke eine "Eins". Das ist tatsächlich alles, was wir für das Bus-Programm brauchen. Jetzt zum Ampel-Programm.
Die Ampel empfängt auf demselben Funkkanal, auf dem der Bus sendet. Der Pseudocode für die Ampel ist also auch: Starte Programm. Setze den Funkkanal auf "Eins". Die Ampel soll nicht nur empfangen, sondern auch auf jede Nachricht vom Bus reagieren. Um ständig zu empfangen und reagieren zu können, brauchen wir einen Code, der immer wieder ausgeführt wird.
Dann nehmen wir eine Schleife mit einer Bedingung, die immer wahr ist. Der Teil des Codes sieht so aus: Jetzt ist die Ampel die ganze Zeit nur rot. Wenn die Ampel vom Bus die Nachricht empfängt, wird sie grün: Gib dem Bus Vorfahrt. Erstelle die "Vorfahrt"-Variable, die überprüft, ob der Bus Vorfahrt anfordert. Wenn "Vorfahrt" "wahr" ist, hat der Bus Vorfahrt, sonst ist "Vorfahrt" "falsch".
Wir ergänzen das im Pseudocode: Wenn Funk "Eins" empfängt, setze "Vorfahrt" auf "wahr". Wenn "Vorfahrt" "wahr" ist, wird die Ampel grün. Sonst ist die Ampel rot. Wir fügen diese Bedingung hinzu: Wenn "Vorfahrt" gleich "falsch", nur dann wird die Ampel rot. Wir rücken die Zeile, die jetzt mit der Wenn-Zeile verbunden ist, ein.
Aber wenn "Vorfahrt" nicht gleich "falsch" ist? Wir schreiben: Sonst schalte Rot aus und Grün an. Zu Beginn des Programms sollte die Ampel rot sein, "Vorfahrt" sollte "falsch" sein. Sollen wir unseren Pseudocode testen? Zuerst ist "Vorfahrt" "falsch" und die Ampel ist rot.
Jetzt drückt der Busfahrer die Taste. "Vorfahrt" wird "wahr". Der Code springt zu "Sonst" und die Ampel wird grün! Aber sie wird nicht wieder rot. Hmmm ... wir haben nie festgelegt, wie lang die Ampel grün bleiben soll, "Vorfahrt" wird nie wieder "falsch".
Wir geben dem Bus drei Sekunden, um über die Ampel zu fahren, indem wir hier drei Sekunden Pause ergänzen. Dann schalten wir Grün aus und setzen "Vorfahrt" auf "falsch", sodass die Ampel wieder rot wird. All diese Zeilen sind mit dem "Sonst"-Abschnitt verbunden. Wir zeigen das, indem wir ihn durch Tabs einrücken. Testen wir noch mal. "Vorfahrt" ist "falsch" und die Ampel ist rot.
Hier kommt der verspätete Bus, Taste A wird gedrückt und "Vorfahrt" wird "wahr". Das Programm springt zu "Sonst" und die Ampel wird grün. Nach drei Sekunden wird "Vorfahrt" "falsch" und die Ampel wird wieder rot. Obwohl wir das gelbe Ampellicht nicht programmiert haben und die Ampel immer rot ist, wenn kein Bus kommt, ist das ein guter Anfang! Und vielleicht kann der Bus dadurch ein bisschen Zeit reinholen.
Gut!