|
[ Easy
Elektro Start ] [ Seitenende ] [
zurück ] |
|
||||||||||||
|
Easy Elektro Start – Programmieren 1 Vorwort Vom Franckh-Kosmos-Verlag
aus Stuttgart gibt es eine Reihe von Experimentierkästen aus dem Bereich der
Elektrotechnik-/Elektronik als da sind: ·
Easy Elektro - Light, erste elektrische
Stromkreise „Wie funktioniert ein Lichtschalter? Warum
piepst eine Alarmanlage? Was ist der Unterschied zwischen Reihen- und Parallelschaltung? Diese
und andere Fragen beantwortet Kindern ab acht Jahren das KOSMOS
Einsteiger-Set Easy Elektro.“ (Zitat aus der Presseinformation) [ weiterlesen
] ·
Easy Elektro - Start, Stromkreise mit
Motor und Messgerät „In den 60 Experimenten des Easy Elektro Start
lernen junge Forscher die Grundlagen
der Elektrotechnik kennen. Die einfache Druckknopftechnik der easy-Bausteine
ermöglicht ganz ohne Vorkenntnisse und ohne besonderes Geschick den Bau aller
Versuche. Mit dem Messwerk können
die elektrische Spannung und der Strom
in der Schaltung gemessen werden.“ (Zitat aus der Presseinformation) [ weiterlesen
] ·
Easy Elektro - Big
Fun,
entdecke die Welt der Elektronik „Weiterführende Versuche und vertiefendes
Wissen zu Stromkreisen mit Reihen- und
Parallelschaltungen bieten einen Einblick in die Grundlagen der
Elektronik und Elektrik. (…) Dieses Set ist mit allen KOSMOS
Experimentierkästen der Reihe „Easy Elektro“ kombinierbar.“ (Zitat aus der
Artikelbeschreibung) ·
Easy Elektro - Coding, Arduino mit Scratch
programmieren „Programmieren lernen leichtgemacht: Dank der
Kombination aus Easy Klick Bauteilen und der Kinder-Programmiersprache Scratch
bietet dieses Set den idealen Einstieg in die Informatik für Kinder von 8 bis
12 Jahren. Selbstgesteckte Arduino-Schaltungen
einfach an den PC (nutzbar nur mit Windows-Rechnern)
anschließen und loslegen. Die Anleitung zeigt Schritt für Schritt, wie es
geht. (…) Dieses Set ist mit allen KOSMOS-Experimentier-kästen der Reihe
„Easy Elektro“ kombinierbar.“ (Zitat aus der Presseinformation) [ weiterlesen
] Mit dem KOSMOS
Experimentierkasten „Easy
Elektro - Coding“
und der Programmiersprache „Scratch“ findet man also auf einfache Weise den Zugang
zur ·
Programmierung des „Arduino UNO“-Rechners mit integriertem „ATmega“-Mikrocontroller,
zur ·
Elektrotechnik (mit Glühlämpchen,
Reihen- und Parallelschaltung, Motorsteuerung) und zur Elektronik (u.a. mit Halbleitern, Leuchtdioden (LEDs),
Steuerung von LEDs usw.). Während man also mit den KOSMOS-Experimentierkästen „Easy Elektro - Light“, „Easy Elektro - Start“ und „Easy Elektro - Big Fun“ schrittweise den
Zugang zur Elektrotechnik und Elektronik erlangt, sorgt der KOSMOS-Experimentierkästen „Easy Elektro - Coding“ erstmals dafür, dass
man auch bezüglich der Programmierung
entsprechende Kompetenzen erwirbt. Doch die Zukunft liegt nicht allein in der Elektrotechnik und Elektronik oder der Programmierung, sondern in der Kombination von Elektrotechnik/Elektronik und der Programmierung! Schließlich leben wir bereits zu
Beginn des Zeitalters der „Vierten industriellen Revolution“. >> Die
größte Herausforderung unserer Zeit Ob selbstfahrende Autos, 3-D-Drucker oder
Künstliche Intelligenz: Aktuelle technische Entwicklungen werden unsere Art
zu leben und zu arbeiten grundlegend verändern. Die Vierte Industrielle
Revolution hat bereits begonnen. Ihr Merkmal ist die ungeheuer schnelle und
systematische Verschmelzung von Technologien, die die Grenzen zwischen der
physischen, der digitalen und der biologischen Welt immer stärker
durchbrechen. Wie kein anderer ist Klaus Schwab, der Vorsitzende des
Weltwirtschaftsforums, in der Lage aufzuzeigen, welche politischen,
wirtschaftlichen, sozialen und kulturellen Herausforderungen diese Revolution
für uns alle mit sich bringt. << (Zitat aus der Buchbeschreibung zum
Buch „Die Vierte Industrielle Revolution“ vom Autor Klaus Schwab, siehe Amazon) Die „Vierten industriellen Revolution“ aber ist viel mehr
als „Arbeit 4.0“ oder
„Industrie 4.0“,
sondern das „IoT“ schlechthin. Dabei
steht „IoT“ als Abkürzung für „Internet of
Things“,
d.h. das Internet
der Dinge (und Dienste). Bei dem IoT
z.B. werden dumme, d.h. analoge Gegenstände ohne
Internetanbindung, zu quasi intelligenten, digitalen Objekten im
drahtlosen lokalen Netzwerk, engl. „Wireless Local Area Network (WLAN)“, im
Internet oder im 5G-Mobilfunk.
Objekte,
d.h. Gegenstände wissen ·
wer sie sind, ·
was sie sind, ·
über welche Eigenschaften, Kompetenzen sie verfügen ·
welche Fertigkeiten sie beherrschen und was sie können, ·
mit wem sie kooperieren können und sollten, ·
wissen, welche artverwandten Objekte es in ihrer Umgebung
gibt, ·
mit wem sie sich vernetzen können und kooperieren sollten
usw. So weiß z.B. die Kaffeemaschine, dass es in
der Küche auch noch einen Kühlschrank gibt, in dem sich das Kaffeepulver
befindet. Und der Kühlschrank weiß, wo er den Lieblings-Kaffee im Internet
nachbestellen muss. Der Wasserhahn in der Küche weiß, welchen Härtegrad das
Wasser hat, weiß, dass es eine Kaffeemaschine in der Küche gibt und wann
diese entkalkt werden muss. Auch wissen der Wasserhahn und die
Kaffeemaschine, dass sich Flüssigentkalker unter dem Waschbecken bei den
Reinigungsmitteln befindet, und dass sich mit diesem die Kaffeemaschine
gerade noch einmal entkalken lässt, bevor neuer Flüssigentkalker nachbestellt
werden muss. Mein eBook-Reader als
Objekt weiß, dass ich eine Leseratte bin und die Bestseller-Liste im Spiegel
Online rauf und runter lese. Das weiß natürlich auch Amazon, schließlich ist
der „Kindl“-eBook-Reader von Amazon. Immer dann, wenn in der Bestseller-Liste
vom Spiegel Online ein neuer Bestseller erscheint, befindet sich dieser
bereits im Zustellerauto von Amazon, weil das Bestseller-Buch als Objekt mit
einem QR-Code oder RFID-Chip versehen ist, mit dem
Amazon-Logistikzentrum vernetzt ist und weiß, dass ich diese sofort lesen
möchte, sobald dieser im Handel verfügbar ist. Die ist die Chance für Amazon
und der Umsatzverlust für die analoge Buchhandlung, die sich zwar in der
Innenstadt befindet, aber eben nicht im Internet vernetzt ist. Der ICE 3 auf der Fahrt vom Frankfurter
Hauptbahnhof über Limburg nach Köln zum Hauptbahnhof muss auf der Strecke ab
Limburg eine Fahrplanverspätung von drei Minuten einholen. Der Lokführer gibt
die Fahrplanverspätung in den Bordcomputer ein und überlässt alles andere dem
Computer und seinen vernetzen, einzelnen Objekten (Antriebsmotoren in den
Drehgestellen der Waggons, den Bremseinheiten mit den drei doppelten und
innen belüfteten Keramik-Scheibenbremsen auf einer Drehgestellachse, der
Leistungselektronik für die Antriebe usw.). Die einzelnen Antriebsmotoren finden sich dank
Vernetzung im lokalen Netzwerk des ICE 3, kommunizieren miteinander und
stellen fest, dass sie am selben Tag zur selben Uhrzeit mit den gleichen
GPS-Satellitendaten auf der Schnellbahnstrecke von Frankfurt nach Köln
unterwegs sind und zusammen eine Fahrplanverspätung von drei Minuten aufholen
müssen. Das wissen auch die einzelnen Personen-Waggons, melden das
Transportgewicht mit den 1 200 Fahrgästen an die Leistungselektronik, die
sofort damit beginnt, die zu beschleunigende Masse aller Waggons zu
berechnen. Unter Berücksichtigung der Transportlast, der insgesamt zur
Verfügung stehenden Antriebsleistung und des Höhenprofils der
Schnellbahnstrecke berechnet die Leistungselektronik den Energie- und
Leistungsbedarf der Antriebe in den einzelnen Fahrgestellen, die
Beschleunigung beim Ausfahren aus dem Bahnhof in Limburg sowie die
erforderliche Höchstgeschwindigkeit, um die Fahrplanverspätung bis Köln
einzuholen. Doch plötzlich melden sich die Bremseinheiten
in den Drehgestellen der Waggons und reklamieren, dass die berechnete
Beschleunigung mit 1,8 Metern pro Sekunde ins Quadrat [m/s2] zu
hoch sei, da den meist überwiegend älteren Fahrgästen ab einer Beschleunigung
von mehr als 1,5 m/s2 der Magen in die Kniekehle rutsche und ihnen
kotzübel werde. Die Leistungselektronik nimmt das zur Kenntnis, reduziert die
Beschleunigung auf maximal 1,5 m/s2 und erhöht gleichzeitig die
Höchstgeschwindigkeit, um auf jeden Fall die Fahrplanverspätung einzuholen. Alles gut, könnte man meinen, da meldet sich
ein Streckenabschnitt kurz hinter Limburg und reklamiert, dass die errechnete
Höchstgeschwindigkeit von 240 Km/h auf diesem Abschnitt der Länge von 5 Km
wegen Reparaturarbeiten auf max. 180 km/h reduziert werden müsse. Wieder
rechnet die Leistungselektronik alle Parameter durch und gibt die abermals
neu berechneten Werte an die Antriebsmotoren weiter. Schließlich erreicht der
Zug den Kölner Hauptbahnhof mit einer Verspätung von nur zwei Minuten, die
aber bahntechnisch per Definition keine Verspätung ist, weil diese nur zwei
Minuten beträgt. Das sind jetzt nur ein paar Beispiele aus dem
IoT, dem Internet der Dinge (und Dienste). Dazu muss man wissen, dass die
untereinander vernetzten Objekte ohne die Dienste, d.h. ohne
das Internet, dem 5G-Mobilfunk, den Cloud-Servern und der künstlichen
Intelligenz im Internet, bei der es sich übrigens mehr um das Maschinen
orientierte Lernen handelt, strohdumm sind, so als sei der Strom ausgefallen.
Es braucht also Datenbankserver, Wissensdatenbanken, Manpower-Datenbanken,
Objekt-Datenbanken usw. die die Objekte managt, mit Wissen beliefert, den
Lebenszyklus von Bauteilen und Objekten berechnet und die Ingenieur-Power
managt und weiß, welche Ingenieure über welches Fachwissen und welche
praktische Fähigkeiten verfügen, um z.B. einen Montage-Roboter vor Ort per
Fernwartung reparieren zu können. Man kann über die IoT denken was man will. Man
kann kritisch sein und sich der IoT verweigern. Aber das muss man sich
leisten können, z.B. wenn man in Kürze in Rente geht und einen das IoT nicht
mehr betrifft. Alle anderen Arbeitnehmer werden sich den Herausforderungen
des IoT stellen müssen und dabei nicht nur lebenslang lernen müssen, sondern
das Lernen als Lebensqualität verinnerlichen müssen. Wer nicht zu den
Verlierern des IoT, der vierten industriellen Revolution, gehören und
arbeitslos werden will, der muss sich das fortwährende, autodidaktische
Lernen zu eigen machen, sich mit anderen Kollegen austauschen, zu jedem Thema
wissen, wie man eine Lerngruppe findet oder selbst ins Leben ruft usw.
Den
Arduino UNO programmieren >> Das erste Board wurde 2005 von
Massimo Banzi und David Cuartielles entwickelt. Der Name „Arduino“ wurde von
einer Bar in Ivrea
übernommen, in der sich einige der Projektgründer gewöhnlich trafen (Die Bar
selbst wurde nach Arduin von Ivrea benannt, der von 1002 bis
1014 auch König von Italien war)[3].
David Mellis entwickelte die auf C/C++ basierende Diktion dazu. Der
Schaltplan wurde im Netz veröffentlicht und unter eine Creative-Commons-Lizenz gestellt. Die
erste Auflage des Boards betrug 200 Stück, davon gingen 50 an eine Schule.
Bis 2008 wurden etwa 50.000 Boards verkauft.[4]
<< (Quelle: Wikipedia)
Natürlich gibt es zum Arduino auch eine
entsprechende Homepage, die allerdings
auf Englisch ist. Aber mit dem Google Übersetzer kann man sich diese ins
Deutsche übersetzen lassen. Dazu muss man auf der Google-Webseite https://translate.google.com
nur den Link von der Arduino-Homepage mittels „Copy and Paste“ einfügen, die Übersetzung
von Englisch nach Deutsch auswählen und schon bekommt man die Webseite ins Deutsche
übersetzt. Wenn man auf der übersetzten Startseite
des Arduino-Portals mit der rechten
Maustaste auf die Schaltfläche <LERNE ARDUINO> und im kleinen
Kontextmenüfenster auf <Link im neuem Tab öffnen>
klickt, dann bekommt man die Webseite mit der Überschrift „Getting
Started with Arduino products“ angezeigt. Leider lässt sich die neue Webseite
wider Erwarten nicht mit Google Translate
übersetzen, weil der Webserver vom Arduino-Portal eine diesbezügliche
Verbindung ablehnt! Ganz oben auf der Webseite findet man die Menüleiste <ARDWARE, SOFTWARE, DOKUMENTATION, GEMEINSCHAFT, BLOG, ÜBER> oder auf Englisch <HARDWARE, SOFTWARE, DOCUMENTATION,
COMMUNITY, BLOG, ABOUT>. Wenn man dort auf <SOFTWARE> und dann auf <ARDUINO CREATE> klickt, dann gelangt auf die Webseite „Arduino
Erstellen“ oder auf Englisch „Arduino Create“. Wenn man bereits im ersten Absatz „Verbinden, zusammenarbeiten, erstellen“ auf den Link <Arduino
Create> klickt, dann gelangt man zur nächsten Webseite mit der Überschrift „WAS IST ARDUINO CREATE? “ oder auf Englisch „WHAT IS ARDUINO CREATE?“ Unterhalb der Überschrift gibt es dann vier
große Auswahlschaltflächen <Web Editor, IoT Cloud, Mangager
für Linux und Digital Store>. Wenn man in dieser auf <Web Editor> klickt, dann
gelangt man zur Anmeldeseite, wo man sich mit seiner E-Mail-Adresse oder dem
Nicknamen (= Kosename) anmelden muss. Falls man noch keinen Benutzerzugang hat, kann man auch
einen anlegen. Nach dem Anlegen des Benutzerzugangs
erhält man eine E-Mail an die hinterlegte E-Mail-Adresse, in der man den Benutzerzugang noch aktivieren
muss. Dabei muss man damit rechnen, dass die Aktivierungs-E-Mail zunächst im SPAM-Ordner landet! Der Benutzerzugang
lässt sich aber auch sofort nutzen, ohne dass man die Aktivierungs-E-Mail abgerufen und
bestätigt hat! Nach der erfolgreichen Anmeldung erscheint die
(Online-) Arduino-Entwicklungsumgebung mit der großen,
weißen Arbeitsfläche zum Kodieren, d.h. zum Programmieren: (Zum Vergrößern bitte
auf das Bild klicken!) Da man zu Beginn noch kein Programm
entwickelt hat, wird automatisch nachfolgender Programmkode angezeigt (siehe blaue Kästen oben): (Zum Vergrößern bitte
auf das Bild klicken!) In der linken, grauen Spalte sieht man die
Nummerierung der Programmzeilen von Zeile 1 bis Zeile 12. In den Zeilen 1 bis 3 sieht man zwei
Statements und zwar das ·
Statement /* das dazu dient, einen Kommentarblock (= mehrzeiliger Kommentar) als
Erläuterung zum Programm aufzunehmen. Die Kennzeichnung des Kommentar-Endes
erfolgt dann mit dem ·
Statement */ Demzufolge steht der Kommentar zwischen den beiden (Begrenzungs-) Statements /* Dies ist ein Kommentar! */ In den Zeilen 5 bis 7 sieht man das ·
Statement für die
Funktion
void setup() { … } Dabei heißt die Funktion setup() vom Typ void (= englisch im Sinne von leer, Nichts) und soll zum Ausdruck bringen, dass
diese Funktion keine spezielle Funktion darstellt oder etwas Besonderes ist.
Dementsprechend wird der Funktion kein Parameter (= Variable,
Zahlenwert, Text) mit auf den Weg gegeben bzw. später beim Ausführen des
Programms in die Funktion eingelesen. Deshalb bleiben die beiden runden
Klammern () leer! Zwischen den geschweiften
Klammern { … }
steht dann später der entsprechende Programmkode unseres
„C++“-Programms. Die Funktion
void setup() { … } wird immer
gleich beim Programmstart als Erstes ausgeführt! In den Zeilen 9 bis 12 steht das ·
Statement für die
Funktion void loop() { … } Auch diese Funktion stellt nichts Besonderes dar,
hat keine besondere Funktion. Weder werden der Funktion beim Aufruf
irgendwelche Parameter übergeben, noch gibt die Funktion welche beim Ende der
Funktion an das Hauptprogramm zurück! Wie der englische Name „loop“ (= Schleife) schon
ausdrückt, handelt es sich bei der Funktion
void loop() { … } um eine sogenannte Endlosschleife,
die nach dem Abarbeiten der Funktion
void setup() { … } fortwährend aufgerufen und ausgeführt wird. Und zwar endlos
bis der Strom ausfällt oder das Programm durch einen speziellen Befehl beendet
wird wie z.B. durch einen bestimmten Tastendruck oder eine Abbruch-Bedingung. Damit sich unser kleines Programm „sketch_nov30b.ino“ (Zum Vergrößern bitte
auf das Bild klicken!) auch auf dem Arduino UNO ausführen lässt, muss man es zuvor aus dem Internet herunterladen, es
anschließend vom Windows-PC mittels des
angeschlossenen USB-Kabels auf die Hardware des Arduino
UNO hoch laden und starten. Dabei geschieht das Starten des auf den Arduino UNO hochgeladenen Programms
„sketch_nov30b.ino“ durch Drücken des
kleinen roten Tasters neben der USB-Buchse! Normalerweise!
Wenn man aber im Browserfenster der (Online-)
Entwicklungsumgebung von Arduino IDE den Hinweis ·
„No Plugin Connection. Uploading is disabled until
you reconnect.“, d.h. ·
„Keine
Plugin Verbindung. Hochladen ist abgeschaltet bis man sich wieder verbindet.” sieht (siehe gelber Banner), (Zum Vergrößern bitte
auf das Bild klicken!) dann kommt man nicht umhin,
das Plugin nachträglich
noch installieren zu müssen. Eine erneute Installation des „Plugin“-Programms muss auch vorgenommen
werden, wenn sich das Programm in
der Windows-Menüauswahl <Arduino Create Agent>
wider Erwarten nicht mehr starten lässt, weil es sich zwischenzeitlich
verabschiedet hat, was gelegentlich vorkommt! Deshalb sollte man die Setup-Installationsdatei mit dem Dateinamen „ArduinoCreateAgent-1.1-windows-installer-chrome.exe“
aufbewahren! - Das USB-Schnittstellenprogram als Arduino Plugin installieren Auf der Webseite „Download the Arduino Plugin for Windows“
lässt sich das Zusatzprogramm (= engl. „Plug-in“) von der Webseite herunter laden, installieren
und starten. Das „Plug-in“-Programm, das man sich von der
Webseite herunter lädt, heißt „ArduinoCreateAgent-1.1-windows-installer-chrome.exe“
und ist 15 MByte groß: (Zum Vergrößern bitte
auf das Bild klicken!) (Zum Vergrößern bitte
auf das Bild klicken!) (Zum Vergrößern bitte
auf das Bild klicken!) (Zum Vergrößern bitte
auf das Bild klicken!) Nach der erfolgreichen Installation des
„Plug-in“-Programms verschwindet der entsprechende Hinweis auf
das bisher fehlende Plug-in, sodass oben in der Entwicklungsumgebung ab sofort das
kleine Fenster mit dem Hinweis „Arduino UNO at COM5“ erscheint. Dabei
signalisiert der Hinweis, dass es nun eine USB-Schnittstelle
zum Arduino UNO gibt, die z.B.
über die serielle „RS-232“-Schnittstelle Port „COM5“ läuft! Vorausgesetzt natürlich, dass der Arduino UNO auch tatsächlich über das
mitgelieferte USB-Kabel mit dem Desktop-PC oder dem Notebook
verbunden ist!
Da sich das „Plugin“-Programm „Arduino create Bridge“ wieder Erwarten nicht
per Mausklick beenden, sondern nur pausieren lässt, könnte es in der
Praxis, im Falle, dass etwas nicht wie gewünscht funktioniert,
notwendig sein, dass man das Programm
sozusagen gewaltsam abwürgt, d.h. beendet. Dies ist mit dem sogenannten Windows Task Manager
jederzeit möglich: (Zum Vergrößern bitte
auf das Bild klicken!)
Im „Windows 10“-Betriebssystem lässt sich über die Menüreihenfolge <Windows>, <Windows System>,
<Systemsteuerung>, Fenster <Einstellungen des Computers anpassen>, <Hardware und Sound> auch das Fenster <Gerätemanager> aufrufen mit dem Möglichkeit, die serielle Schnittstelle des „Arduino UNO“-Rechners zu überprüfen: (Zum Vergrößern bitte
auf das Bild klicken!) So, nun ist es an der Zeit, dass wir mit dem „Sketch“-Programmieren anfangen. Dabei ist „Sketch“ eine „C++“-Programmiersprache speziell für den Arduino.
Immer dann, wenn man ein neues Arduino „Sketch“-Programm programmieren will
und zu diesem Zweck im Browser in
die webbasierte Arduino IDE
(= engl. „Integrated Development Environment“), d.h. in
die in Arduino integrierte Entwicklungsumgebung geht, dann wird stets das
kleine (Sketch-) Startprogramm,
das aber nichts tut oder bewerkstelligt, automatisch generiert: (Zum Vergrößern bitte
auf das Bild klicken!) Auch wenn das kleine Startprogramm „sketch_prog_01_01.ino“ (siehe im Webverzeichnis) nichts tut, so lässt es sich
trotzdem auf den Arduino UNO überspielen,
indem man oben im Bedienfeld auf
den Übertragungspfeil „→ Upload and Save“ klickt: (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_01.ino) Im nächsten Programm „sketch_prog_01_02.ino“ bringen wir den Arduino
UNO dazu, „Hallo
Welt!“
zu sagen, (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_02.ino) aber die Welt sieht es nicht! Oder vielleicht
doch?! Das liegt ganz einfach daran, dass der Arduino UNO noch über kein Display
zwecks Text- oder Grafikanzeige verfügt! Aber vielleicht hilft uns das ·
Statement „Serial.begin(9600)“ in der Programmzeile
8 weiter! Dort wird nämlich die serielle „RS-232“-Schnittstelle,
die über den „COM 5“-Anschluss und den USB-Anschluss des Arduino UNO
kommuniziert, angesprochen. Dabei beträgt die bidirektionale (= in beide
Richtungen Senden und Empfangen) Datenübertragungsgeschwindigkeit 9600 Baud. >>
Baud [bɔːd], Bd ist die Einheit
für die Symbolrate
(Schrittgeschwindigkeit) in der Nachrichtentechnik und Fernmeldetechnik.[1] 1 Baud
ist die Geschwindigkeit, wenn 1 Symbol pro Sekunde
übertragen wird. Jedes Symbol entspricht einer definierten, messbaren
Signaländerung im physischen Übertragungsmedium. Die Baudrate einer Datenübertragung muss auf
Sende- und Empfangsseite gleich sein. Wenn die übertragene Symbolgröße
einem Bit
entspricht, entspricht die Symbolrate auch dem Wert der Datenübertragungsrate in Bit pro Sekunde. Bei
größeren Symbolen ist die Datenübertragungsrate das entsprechende Vielfache
der Symbolrate. Die Einheit ist nach Jean-Maurice-Émile Baudot benannt, der
1874 den Baudot-Code erfand. << (Quelle: Wikipedia) Dabei darf man aber die „Baud“-Übertragungsrate nicht mit der „Bit“-Übertragungsrate
verwechseln, da sich die „Baud“-Rate auf die Übertragung
von Symbolen bezieht. Wenn z.B. ein scharz-weißes Lebkuchenkerz
♥, das aus 16 einzelnen Pixeln (= Bildpunkten) besteht, über die
serielle „RS-232“-Schnittstelle des Arduino
UNO übertragen werden soll, dann benötigt man dazu 16 Bits. Demzufolge
ließen sich bei 9600 Baud pro Sekunde = 9600 / 16 Bit = 600 Herzchen-Symbole
pro Sekunde übertragen. Wenn man heutzutage mit dem Smartphone
fotografiert und bei niedriger Auflösung ein Foto der Größe von nur 2
Megabyte = 2 MByte = 2 000 000 * 1 Byte = 2 000 000 * 8 Bits
= 16 000 000 Bits macht, dann bräuchte man bei einer
Übertragungsgeschwindigkeit von nur 9600 Baud = 16 000 000 Bit / 9600 Baud =
16 000 000 Bit / 9600 Bit/s ≈ 1 667 s
= 1 667 * 1/3600 h = 1,28 h = 1 Stunde 28 Minuten, um das Bild z.B.
auf den Arduino UNO zu übertragen! Wahnsinn! Zum Vergleich: Heutige Smartphone können aber
mit hochauflösenden Bildaufnehmern (Fotochip) Fotos quasi in Full HD Bildqualität machen,
sodass ein sogenanntes HDR-Foto
dann schon mal bis zu 20 MByte
groß sein kann! - Da also der „Arduino UNO“-Rechner mit integriertem „ATmega“-Mikrocontroller
zwar noch über kein Display zwecks Text- oder
Grafikanzeige verfügt, aber praktisch jeder Mikrocontroller
über eine integrierte „RS-232“-Schnittstelle verfügt, bleibt uns im Moment noch nichts
anderes übrig, als über diese zu kommunizieren und Signaldaten auszutauschen! Das obenstehende, kleine Programm „sketch_prog_01_02.ino“ soll also den Arduino UNO dazu veranlassen, mittels des ·
Statements Serial.print("Hallo Welt!") den Textstring,
engl. „string“ (= Zeichenkette), „Hallo
Welt!“
anzuzeigen (→ engl. „print“ d.h.
drucken bzw. anzeigen). Wie aber lässt sich der Textstring „Hallo
Welt!“
anzeigen, wo es doch überhaupt kein Display gibt?! Zumindest nicht beim
Arduino UNO. Aber dort soll ja der Textstring
auch gar nicht angezeigt werden! Das ist ja gerade! Weil der Arduino UNO über kein Display
verfügt, sendet er den anzuzeigenden Textstring
über die serielle „RS-232“-Schnittstelle und damit über das USB-Kabel vom Arduino
UNO an den Desktop-PC, d.h. genau genommen
an unsere Arduino IDE Entwicklungsumgebung: (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_02.ino) In dem obenstehenden Programm „sketch-prog_01_02.ino“ gibt es im ·
Statement Serial.print("Hallo Welt!") nur einen einzigen „print“-Befehl und zwar ohne
Zeilenschaltung (= ohne Wagenrücklauf und ohne Zeilenvorschub,
engl. „Carriage Return“ und „Line Feed“ bei der Schreibmaschine). Wenn man als nächstes das Statement Serial.print("Hallo Welt!") drei Mal untereinander programmiert,
das Programm startet und sich im seriellen Schnittstellen-Monitor die „print“-Ausgabe anzeigen lässt, dann
wird man feststellen, dass die Zeichenkette,
engl. „text string“ "Hallo
Welt!"
nicht drei Mal untereinander, d.h. mit Absatzschaltung, angezeigt
wird, sondern drei Mal direkt hintereinander: Hallo Welt!Hallo Welt!Hallo Welt! Und zwar ohne
Leerzeichen dazwischen und ohne Zeilen- bzw. Absatzschaltung! Was aber ist der Unterschied zwischen einer Zeilenschaltung und einer Absatzschaltung? Dies ist <LF> eine Zeilenschaltung, engl. „Line Feed“ Und dies ist eine <CR> & LF> Absatzschaltung, engl. „Carriage Return“ & „Line Feed“. Wenn man in der „Sketch“-Programmierung beim „print”-Befehl eine Zeilenschaltung programmieren will,
dann lassen sich dafür zwei gleichbedeutende Statements programmieren, als da
sind: ·
Statement Serial.println("Hallo
Welt!") → Dabei steht „ln“ für engl. „line“ bzw. „line feed“ ·
Statement Serial.print("Hallo Welt!\ln") → Dabei steht „\“ für
engl. „backslash“ und „ln“ für
engl. „line feed“ (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_03.ino) Und mit welchem Statement ließe sich eine Absatzschaltung programmieren? ·
Statement Serial.println("Hallo
Welt!\n") → Dabei steht „ln“ für engl. „line“ bzw. „line feed“ Demzufolge lässt sich eine Absatzschaltung durch eine zweimalige
Zeilenschaltung vornehmen! Am besten
ist es aber, wenn man es selbst ausprobiert! - Blitz und Donner programmieren Selbstverständlich lassen sich in der Natur Blitz und Donner (noch) nicht
programmieren, d.h. mittels eines Computerprogramms
fernsteuern, sodass man in der Nähe eines Gewitters per
Programmbefehl einen Blitz auslöst, dessen Blitzenergie
auffängt und für die Stromerzeugung und Stromspeicherung nutzt. Zwar hat ein Blitz im Moment des
Blitzeinschlags eine sehr hohe Spannung von
einigen Millionen Volt und auch eine sehr hohe Stromstärke
von einigen tausend Ampere, aber nur für eine sehr, sehr kleine Zeitspanne
von wenigen Millisekunden! Da also das Einfangen von Blitzen und das
Speichern von elektrischer Blitzenergie auf absehbare Zeit nicht machbar sein
wird, wenden wir uns einfacheren Dingen zu. Wenn sich im Sommer ein Gewitter nähert, dann
möchte man schon wissen, ob und wann es unter Umständen gefährlich wird, von
einem Blitz getroffen zu werden. Zwar sagt man, dass man eher vom Blitz
getroffen wird als im Lotto mit einem Sechser mehreren Millionen zu gewinnen!
Wir wissen ja, dass es zwischen Blitz, dessen Lichtblitz sich mit Lichtgeschwindigkeit
c = vLicht = 300 000 km/h ausbreitet, und Donner, wegen der Schallgeschwindigkeit
cS = vSchall = 340 m/s,
einen entsprechenden Laufzeitunterschied ∆t gibt, der sich recht einfach berechnen und programmieren
lässt: Formel zur Berechnung der Geschwindigkeit v =
s / t → Formel zur Berechnung der zurückgelegten
Wegstrecke s = v * t sEntfernung = vDonner *
tDonner → ∆sEntfernung= vSchall * ∆t = 340 m/s * 4 s = 1 020 m ≈ 1,0 km Bei der nachfolgenden Programmierung haben wir
es jetzt erstmals nicht nur mit verschiedenen Zahlentypen, sondern auch mit sogenannten Variablen
(= Platzhalter für das Speichern von Daten, Textstrings, Werten unter einem
bestimmten Platzhalternamen). Bekanntlich hat der Mensch an beiden Händen
zusammengenommen zehn Finger, die sich natürlich auch zum Rechnen, d.h.
Addieren oder Subtrahieren, benutzen lassen. Aber eben nur bis zur Zahl 10,
weshalb man das Zahlensystem auch Dezimalsystem zur
Basis 10 nennt. Wenn man nur mit zehn Fingern oder dem Abakus
als mechanische Rechenhilfe mit verschiebbaren Holzkugeln rechnet, dann hat
man es ausschließlich mit ganzen Zahlen 0, 1, 2, …, 10 zu tun. Beim Computer bzw. bei der Programmierung kann
man auch mit ganzzahligen Werten rechnen, die man z.B. der Variablen namens „time_sekunden“ zuweist bzw. in
dieser speichert. Hier die beiden Statements:
·
int time_sekunden; ·
time_sekunden = 4; Beim ersten Statement „int time_sekunden“ wird die Variable
„time_sekunden“ als ganzzahlige Variable
deklariert, d.h. im Sinne von definiert. Dabei wird der Variable „time_sekunden“ aber noch kein
Zahlenwert zugewiesen! Beim zweiten Statement „time_sekunden = 4“ wird die Variable
„time_sekunden“ initialisiert, in dem der Variablen der ganzzahlige Zahlenwert 4 zugewiesen wird! Selbstverständlich lassen sich auch beide
Statements mit dem Deklarieren und Initialisieren wie folgt zusammenfassen: ·
Statement int time_sekunden = 4; ·
Statement int schallgeschwindigkeit = 340; Im nachfolgenden Quellkode vom Programm „sketch-prog_01_02.ino“ gibt es noch eine weitere Deklaration ohne
Initialisierung und zwar im ·
Statement float entfernung; mit der Variablen
„entfernung“. Dabei sorgt die Typangabe „float“
für den Fall aller Fälle dafür, dass sich mit der Variablen auch Fließkommazahlen
(= Dezimalzahlen mit Fließkomma) berechnen lassen: (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_04.ino) Als nächstes setzen wir im Programm „sketch-prog_01_05.ino“ den exakten Wert der Schallgeschwindigkeit von vSchall = 343,2 m/s als Fließkommazahl ein und ändern dabei auch den Typ „int“ der Variablen „schallgeschwindigkeit“ ab auf Typ
„float“. Außerdem wird die Variable „entfernung“ mittels des Statements
·
String entfernung_str = String(entfernung); in einen entsprechenden Textstring (= Zeichenkette) umgewandelt und der Variablen entfernung_str zugewiesen: (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_05.ino) Wie man im untenstehenden Programm „sketch-prog_01_06.ino“ sieht, lässt sich die
Entfernungsberechnung von Blitz und Donner
auch direkt ohne Umweg über die Variable „entfernung“ vom Typ „float“
als Zwischenspeicher durchführen. Dabei wird der Fließkommazahl-Ergebniswert „1372.80“ in den Textstring
„1372.80“ umgewandelt und der String-Variablen
„entfernung_str“ zugewiesen (siehe roter Kasten unten). Alle drei Textstrings "Das
Gewitter ist = " +
entfernung_str +
" m von hier entfernt!" lassen sich dann für die spätere Anzeige als
Ganzes mit dem „+“-Zeichen verbinden (siehe grüner Kasten unten): (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_06.ino) Aber es geht natürlich noch professioneller,
noch kompakter. Dazu muss man aber wissen, was es mit dem Statement ·
String entfernung_str =
String(schallgeschwindigkeit * time_sekunden); auf sich hat und wissen, dass man das Statement von rechts(!) nach links(!) liest! Als genau in
umgekehrter Richtung wie beim Schreiben und Lesen von links nach rechts. Ganz rechts vom Gleichheitszeichen „=“
steht der Ausdruck String(schallgeschwindigkeit * time_sekunden)
bei dem die Variableninhalte der Variablen „schallgeschwindigkeit“ und „time_sekunden“ miteinander multipliziert werden. Ganz links vom Gleichheitszeichen „=“
steht das Ergebnis der Multiplikation in Form eines Fließkomma-Wertes und soll dann in
einen Textstring umgewandelt werden: String( … ), aber nicht nur das,
sondern anschließend auch der Variablen
„entfernung_str“ zugewiesen werden („=“). Da es sich bei dem Ergebniswert um den Textstring „1372.80“ handelt, muss man die Ergebnis-Variable
„entfernung_str“ auch noch
entsprechend deklarieren: String entfernung_str =
… Wenn man aber den Ergebniswert mit dem Textstring
„1372.80“ nicht mehr für
weitere Berechnungen braucht, weil man diesen nur noch anzeigen will,
dann braucht man keine Ergebnis-Variable „entfernung_str“, braucht man diese
nicht zu deklarieren, kann man diese ganz einfach weglassen: (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_07.ino) Bezüglich des obenstehenden Programms „sketch-prog_01_07.ino“ bleibt noch zu
erwähnen, dass es sich bei der String-Umwandlung String( … ) um eine Funktion handelt und nicht um einen Befehl zwecks Umwandlung. Dabei steht
die Funktion String( … ) in einer Bibliothek, engl. „Library“, die
integraler Bestandteil der Arduino-Entwicklungsumge-bung ist! Doch wozu braucht man andere oder
zusätzliche Libraries?
Ganz einfach, um die Funktionalität des Arduino UNO zu erweitern. Wie man im obenstehenden Bild sieht, hat die Arduino IDE,
engl. „Integrated Development Environment“, d.h. die
integrierte Entwicklungsumgebung (für das Programmieren), kein neues
Outfit, kein neues Erscheinungsbild, kein neues Aussehen bekommen, sondern
ein, engl. „executable file“, d.h. eine unter Windows
ausführbare Programmdatei. Oder kurz gesagt, gibt es die im Browser aufrufbare (online) Arduino IDE auch als Windows-Programm
(offline): (Bild vergrößern: auf
Bild klicken! Webverzeichnis sketch-prog_01_07.ino) Was aber bedeutet die Anzeige „Das Gewitter
ist = 1372.80 m von hier entfernt!“ praktisch für die Bewohner unter der
Gewitterfront? Wenn also zwischen Blitz und dem zeitlich
nachfolgenden Donner eine Zeitdifferenz von ∆t = 4 s verstreicht, dann befindet sich das
Gewitter mit nur einem Abstand von ∆sEntfernung ≈ 1,373 km unmittelbar über
den Bewohnern! Höchste Zeit also, sich in Sicherheit zu bringen und das Haus,
eine mit Blitzschutz versehene Schutzhütte oder das Auto als Faradayscher Käfig
aufzusuchen! Den Arduino UNO
grafisch mit S4A 1.6 programmieren Die Abkürzung
„S4A 1.6“ in der Überschrift
steht für engl. „Scratch
for Arduino
Version 1.6 “, d.h. „Scratch für Arduino Version 1.6 “ Bei Scratch, nicht Sketch(!), handelt es
sich um eine Programmiersprache,
die sich grafisch mittels bunter Symbolblöcken nebst Parameter programmieren lässt: (Zum Vergrößern bitte
auf das Bild klicken!) Bei Scratch
bzw. Scratch 1.6 für
den Arduino handelt es sich um
eine erstmals 2007 veröffentlichten bildungsorientierten visuellen
Programmiersprache für Kinder und Jugendliche inklusive der
Programmier-Entwicklungsumgebung. >> Ihr Ziel ist es, Neueinsteiger –
besonders Kinder und Jugendliche – mit den Grundkonzepten der Programmierung
vertraut zu machen. Unter dem Motto imagine, program, share
(„Ausdenken, Entwickeln, Teilen“) wird die kreative und explorative Erstellung eigener Spiele
und Multimedia-Anwendungen,
verbunden mit dem gegenseitigen Austausch darüber, als Motivation genutzt.[3]
Kostenlos und werbefrei können die Ergebnisse in einer internationalen Online-Community
mit dem Scratch-Player abgespielt, diskutiert und weiterentwickelt werden.
Außerdem gibt es einige Beispiele, die Anregungen für Einsteiger schaffen und
das Prinzip des Programmierens näher bringen. Namensherkunft Der
Name Scratch leitet sich von der DJ-Scratchtechnik ab. Die
Gemeinsamkeit zum musikalischen Scratchen ist die leichte
Wiederverwendbarkeit von Versatzstücken: In Scratch können alle interaktiven
Objekte, Grafiken und Töne leicht von einem in ein anderes Scratch-Projekt
übertragen und dort neu kombiniert werden (siehe: Remixingkultur).
Dadurch erhalten Anfänger sehr schnell Erfolgserlebnisse, die motivieren,
sich vertieft mit der Materie auseinanderzusetzen. (Quelle:
Wikipedia)
Demzufolge
ist man gut beraten, wenn man bei der Installation der „S4A 1.6“-Software und der Inbetriebnahme
des Programms streng und
konsequent vorgeht, d.h. sich an die nachfolgende Reihenfolge hält: 1.
Die Java JRE für Arduino IDE“
installieren
>> Arduino bringt eine eigene integrierte Entwicklungsumgebung (IDE) mit, die auf Wiring DIE basiert. Dabei
handelt es sich um eine Java-Anwendung, die für die gängigen
Plattformen Windows, Linux und macOS kostenlos verfügbar ist. Sie basiert auf
der IDE von Processing, einer auf die Einsatzbereiche Grafik, Simulation
und Animation spezialisierten Entwicklungsumgebung. Die Arduino-IDE bringt
einen Code-Editor mit und bindet gcc als Compiler
ein. Zusätzlich werden die avr-gcc-Library und weitere Arduino-Bibliotheken
(„libraries“) eingebunden, die die Programmierung in C und C++
stark vereinfachen. << (Quelle: Wikipedia) Bei
der Abkürzung „Java JRE“
steht die Bezeichnung „JRE“
für engl. „Java Runtime Environment“, d.h. Java-Laufzeitumgebung. Wenn man als Coder (=
Programmierer, Softwareentwickler) z.B. ein „Java“-Programm entwickelt, dann ist
dieses von Natur aus nicht lauffähig, sondern muss zu Zwecken der
Lauffähigkeit mittels eines Compilers entsprechend kompiliert,
d.h. in Maschinenkode
für die zum Einsatz kommenden CPUs (=
Mikroprozessoren) wie z.B. Intel, AMD bei Microsoft Windows-PCs oder ARM bei
Smartphones übersetzt werden. Bei
Kompilieren eines „Java“-Programms
wird aber anstatt des jeweiligen Prozessorcodes ein sogenannter Bytecode als Zwischenkode
erzeugt, der sich aber nicht auf einen bestimmten Mikroprozessor eines
Herstellers bezieht. Demzufolge muss der Bytecode
eines kompilierten „Java“-Programms
ein weiteres Mal übersetzt werden, damit es später auf einem Personal
Computer unter Microsoft Windows, Linux oder Apple MacOS lauffähig ist. Für
die endgültige Übersetzung vom Bytecode
in den binären Maschinenkode eines
32 Bit Betriebssystems für „x86“-Prozessoren
oder eines 64 Bit
Betriebssystems für „x64“-Prozessoren bedarf es
bei „Java“-Programmen
dann noch eines weiteren Compilers
als integraler Bestandteil der sogenannten, engl. „Java Runtime Environment (= JRE)“, Laufzeitumgebung, die es für die
geläufigsten (Desktop-) Betriebssysteme wie z.B. Microsoft Windows, Linux
oder Apple MacOS gibt. >>
Die Java-Laufzeitumgebung
(englisch Java Runtime Environment, kurz JRE) ist die Laufzeitumgebung der
Java-Technik. Mit ihr werden Programme (Java-Anwendungen) weitgehend unabhängig
vom darunter liegenden Betriebssystem ausgeführt. Dazu muss die Laufzeitumgebung auf dem Zielsystem installiert sein. Die Java
JRE ist für kommerzielle Verwendung kostenpflichtig, das OpenJDK ist
kostenlos, es existiert für Windows, Linux und macOS. Sie stellt eine
Softwareplattform dar, auch Java-Plattform genannt. Sie definiert die
Anwendungsprogrammierschnittstellen (APIs) eindeutig und maschinenunabhängig
und enthält die virtuelle Maschine (JVM). << (Quelle: Wikipedia)
2.
Das
Plugin-Programm „ArduinoCreateAgent“ installieren Das
Programm für die USB-Verbindung
zum Arduino UNO lässt sich von der
Webseite https://create.arduino.cc/getting-started/plugin/welcome
herunterladen, installieren und sollte nach der Installation auch sofort
gestartet werden! Die
Setup-Datei
trägt den Namen „ArduinoCreateAgent-1.1-windows-installer-chrome.exe“
und ist etwa 16 MByte groß. Die
ausführliche Anleitung dazu
findet sich im Abschnitt „Das USB-Schnittstellenprogram
als Arduino Plugin installieren“. 3.
Die
Entwicklungsumgebung „Arduino IDE“ installieren Die
Entwicklungsumgebung lässt sich
von der Webseite https://www.arduino.cc/en/software
herunterladen und installieren! Die
Setup-Datei
trägt den Namen „arduino-1.8.13-windows.exe“
und ist etwa 117 MByte groß. 4.
Die Firmware zum Programm „S4A 1.6“
auf den Arduino UNO aufspielen Damit
der Arduino UNO später mit dem „S4A
1.6“-Programm
über die serielle „RS-232“-Schnittstelle
und dem angeschlossenen USB-Kabel
mit dem Programm der grafischen Programmierumgebung auf dem Windows-PC kommunizieren kann, ist es
erforderlich, dass man zuvor die Firmware zum Programm „S4A 1.6“ auf den Arduino
UNO aufspielt. Dabei
lässt sich die Firmware-Datei „S4AFirmware16.ino“ nur
vom Windows-PC aus in das „Arduino IDE“-Programm
laden und von dort aus auf den Arduino
UNO über die USB-Verbindung
aufspielen, in dem es im „Arduino IDE“-Programm
des Windows-PCs ausgeführt
wird! Die
spezielle Firmware-Datei
„S4AFirmware16.ino“
lässt sich hier mittels <rechter Maustaste> und <Link speichern unter
…> in den Downloadordner
des Windows-PCs herunterladen 5.
Das
Entwickler-Programm „S4A 1.6“ installieren Das
grafische Entwickler-Programm
„S4A 1.6“
zum „Scratchen“ (= Programmieren mit Block-Symbolen) lässt sich auf der „S4A
1.6“-Webseite
herunterladen. Zu diesem Zweck muss man oben in der Menüleiste
auf die Auswahl <Downloads>
klicken, sodass automatisch bis zum Kapitel
„Herunterladen
und installieren“ gescrollt wird. Im Abschnitt „S4A auf Ihrem Computer installieren“
gibt es u.a. den Link „Windows“
von wo aus man sich die ZIP-Archivdatei
„S4A16.zip“ mittels <rechter
Maustaste> und <Link speichern unter …> in
den Downloadordner des Windows-PCs herunterladen kann. In
der ZIP-Archivdatei „S4A16.zip“
befindet sich nur die Setup-Datei
„S4A16.exe“,
die knapp 28 MByte groß ist. Nach
dem man die ZIP-Archivdatei „S4A16.zip“
heruntergeladen, entpackt und das Setup-Programm
„S4A16.exe“
installiert hat, sollte man das „S4A 1.6“-Programm
ausprobieren und starten. Nach
dem Starten des „S4A 1.6“-Programms,
dem Anschließen des Arduino UNO mit dem USB-Verbindungskabel an den Windows-PC befindet sich der Arduino zunächst in dem ·
Betriebssystemzustand
„Arduino1
- Searching board …“, um
nach einer angeschlossenen Arduino-Hardware zu
suchen. Aber auch wer auch noch so intensiv sucht, muss nicht zwangsläufig
fündig werden. Vor allem, wenn man den Wald vor lauter Bäumen nicht sieht: (Zum
Vergrößern bitte auf das Bild klicken!) Bei
der USB-Tastatur, der USB-Maus oder dem angeschlossenen USB-Speicherstick an
einem Windows-PC kommt es darauf an, ob die über USB angeschlossenen Geräte voll „UPnP“-fähig
sind. Dabei steht die Abkürzung „UPnP“
für engl. „Universal Plug and Play“, d.h. ob angeschlossene Hardware universell anschließ- und bespielbar/benutzbar ist. Nur
wenn der eingesteckte USB-Speicherstick
wirklich „UPnP“-fähig
ist, wird er vom Windows-Betriebssystem automatisch
erkannt, wird der Flash-Speicher in
das Windows-Dateisystem
eingebunden.
Da
also der USB-Anschluss des „Arduino UNO“-Boards nicht
„UPnP“-fähig
ist, müssen wir von Hand nachhelfen und die Firmware-Datei „S4AFirmware16.ino“
zum Programm „S4A 1.6“
erneut auf den Arduino UNO
aufspielen (siehe Punkt 4. Die Firmware
zum Programm „S4A 1.6“
auf den Arduino UNO aufspielen“). Nach
dem erfolgreichen Aufspielen und Ausführen der Firmware sollte auf dem „Arduino UNO“-Board
die gelbe „TX“-LED ununterbrochen
leuchten (siehe roter Kasten): (Zum
Vergrößern bitte auf das Bild klicken!) Die
Angabe „TX“ neben der gelben LED (siehe roter Kasten im
obenstehenden Bild) stammt aus der Fernmeldetechnik und zwar von den analogen
Telefaxgeräten und den Modems für den Internetzugang über Telefon. Dabei
steht die Angabe „TX“
für „Transfer“,
d.h. das Senden von Daten und die Angabe „RX“ steht für „Receive“, d.h. das Empfangen von Daten. >>
Weltweit werden immer weniger Geräte mit
RS-232-Schnittstelle produziert. Beispiele sind Service- und
Konfigurationsanschlüsse bei Geräten wie z.B. Router,
Switches, Speichersysteme, Laborgeräte
und Point-Of-Sale-Terminals.
Alternative serielle Schnittstellen bieten zuverlässigere und schnellere
Verbindungsmöglichkeiten. Nur noch wenige PCs werden mit einem COM-Port
ausgeliefert, Notebookhersteller bieten diese Ausstattungsoption nahezu
gar nicht mehr an. Um Geräte, die eine RS-232-Schnittstelle besitzen, mit
Computern ohne diese betreiben und programmieren zu können, gibt es Konverter
von USB auf RS232. Auch Einsteckkarten mit
RS232-Schnittstellen für PCs werden angeboten. Viele
aktuelle Geräte mit RS-232 nutzen nur drei Adern bzw. Pins (RX, TX, GND),
verzichten also auf die handshake- und Steuerleitungen. Wegen der niedrigen
Datenrate, der vergleichsweise geringen Anforderungen an die Verkabelung und
des hohen, toleranten Signalpegels ist die RS-232 auch weiterhin verbreitet,
wenn es um Störsicherheit und lange Signalverbin-dungen geht. Sie wird jedoch
in dieser Hinsicht von twisted-pair-Netzwerkkabelverbindungen mit
Transformator („Ethernet“) sowie vom RS-485
Standard übertroffen. << (Quelle: Wikipedia)
Da
das Senden (TX) und Empfangen (RX) von Daten nicht getaktet oder
synchronisiert wird, sendet der TX-Sender sozusagen ins Blaue hinein ohne zu
wissen, ob der RX-Empfänger auf Empfang geschaltet ist. Deshalb müssten
sowohl TX-Sender als auch RX-Empfänger immer wieder abwechselnd von Senden
(TX) auf Empfang (RX) und umgekehrt schalten. Hilfreich wäre es dabei, wenn
TX-Sender und RX-Empfanger mit der gleichen Baudrate von 38 400 Baud
Daten senden und empfangen würden. Das ist nämlich die Datenübertragungsrate der Firmware-Datei „S4AFirmware16.ino“, die man sich übrigens
auch hier im Browser in aller Ruhe
anschauen kann. Dazu muss man diese nämlich nur einfach
kopieren und dabei in eine quasi Textdatei
„S4AFirmware16.txt“
umbennen! 6.
Das
Verhalten des Entwickler-Programms
„S4A 1.6“ nach dem Firmware-Update Beim
Aufspielen der Firmware-Datei
„S4AFirmware16.ino“
von der „Arduino
IDE“-Entwicklungsumgebung
auf den Arduino UNO handelt es
sich nicht wirklich um ein Firmware-Update,
da die in dem Firmware-Programm
vorgenommenen Verbesserungen nicht dauerhaft im Arduino-Betriebssystem
gespeichert werden und demzufolge früher oder später wieder durch Überschreiben
anderer Programme verloren gehen. Um die aufgespielten Firmware-Verbesserungen
dauerhaft wirksam werden zu lassen, müssten diese nämlich in den nicht
flüchtigen (Betriebssystem-) Flash-Speicher
„geflasht“ werden. Genau das ist aber nicht der Fall! Ob
die „Arduino
UNO“-Hardware
über das USB-Verbindungskabel zum Windows-PC und zum Entwickler-Programms „S4A 1.6“
wirklich eine funktionierende Datenverbindung über die „RS-232“-Schnittstelle hergestellt hat, erkennt
man z.B. daran, dass die „TX“-LED (=
Daten-Sende-LED) auf dem „Arduino UNO“-Board
dauerhaft gelb
leuchtet (siehe roter Kasten im
nachfolgenden Bild): (Zum
Vergrößern bitte auf das Bild klicken!)
Blitz und Donner mit Arduino UNO scratchen Aller Anfang ist nicht schwer So, nun ist es endlich
soweit, jetzt programmieren wir unser erstes „Scratch“-Programm. Und zwar mit dem „S4A 1.6“-Programm,
das wir jetzt auf dem Windows-PC
starten. Zu diesem Zweck klicken wir oben in der Menüleiste <Datei>, <Bearbeiten>, <Hilfe>
auf <Datei>,
beantworten die Abfrage <Aktuelles Projekt
speichern?> mit <Nein>, sodass sich das Abfrage-Fenster
wieder schließt. >> Ein Computerprogramm
oder kurz Programm ist eine den Regeln einer bestimmten Programmiersprache genügende Folge von Anweisungen (bestehend aus Deklarationen und Instruktionen), um bestimmte Funktionen bzw. Aufgaben oder
Probleme mithilfe eines Computers zu bearbeiten oder zu lösen.[1] << (Quelle: Wikipedia) Unser erstes Programm
besteht aus nur zwei „Block“-Befehlen!
Und zwar <Starte Programm> und <sage „Hallo Welt!“>: (Zum
Vergrößern bitte auf das Bild klicken!) Gestartet wird das Programm, indem man im Fenster mit dem (Programm-) Dateinamen „scratch_prog_01_01.“
(siehe im Verzeichnis) auf die grüne Start-Flagge
klickt: (Zum
Vergrößern bitte auf das Bild klicken!) Diesbezüglich stellt sich
natürlich die Frage, wo und wie sich die beiden Statements (= Erklärung, Aussage, Angabe) ·
<Starte
Programm> und <sage „Hallo Welt!“> finden, auswählen und in
das Programmierfeld „Skripte“
übernehmen lassen: (Zum
Vergrößern bitte auf das Bild klicken!) Neben dem Statement <Starte Programm>
gibt es noch einen weiteres und zwar <Wenn Arduino1 angeklickt>: (Zum
Vergrößern bitte auf das Bild klicken!) In diesem Zusammenhang stellt sich die nächste Frage,
nämlich worin sich die beiden ·
Statements <Starte Programm> und <Wenn Arduino1 angeklickt> unterscheiden! Beide Statements gehören zur Kategorie
<Steuerung>, sodass sich mit beiden
der Arduino UNO steuern
lässt. Der Unterschied zwischen beiden Statements
besteht nun darin, dass die ·
Steuerung
<Wenn grüne Start-Flagge angeklickt> stets
nur einmalig beim Starten
des Programms ausgeführt wird, während ·
Steuerung
<Wenn grüne Start-Flagge angeklickt> ständig, endlos
in Funktion
ist. Deshalb
spricht man auch von einer Endlosschleife,
diese ist so lange in Funktion ist
bis der Strom ausfällt, man den Arduino
UNO von der USB-Stromversorgung
trennt oder bis die Abbruch-Bedingung in
der eigens programmierten Abbruch-Funktion
erfüllt ist. Unabhängig von den beiden Statements <Starte Programm> und <Wenn Arduino1 angeklickt>
lässt sich ein bereits gestartetes und zur Zeit ausgeführtes Programm jederzeit anhalten und beenden,
indem man im Konsole-Fenster
ganz oben rechts in der Ecke auf das rote Symbol „Stopp!“
klickt: (Zum
Vergrößern bitte auf das Bild klicken!) Bevor man das Programm „scratch_prog_01_01.sb“
(siehe im Verzeichnis) mittels Mausklick auf
die grüne
Startflagge startet, sollte man es auf jeden Fall auf der lokalen
Festplatte des Windows-PCs abspeichern,
damit es nicht verloren geht. Zum Abspeichern
des Programms klickt man oben in der Menüleiste
<Datei>,
<Bearbeiten>, <Hilfe> auf <Datei>, <Speichern>,
gibt dann im Fenster „Projekt speichern“ in
der Eingabezeile den Dateinamen „scratch_prog_01_01“ (ohne
Dateierweiterungsnamen „.sb“) ein und bestätigt die
Eingabe durch Mausklick auf <OK>. - Eins statt Drei Das nächste Programm „scratch_prog_01_02“
baut auf dem vorangegangen auf und unterscheidet sich von diesem nur darin,
dass das Statement <sage „Hallo Welt!“>
jetzt drei Mal untereinander „gescratcht“ wird: (Zum
Vergrößern bitte auf das Bild klicken!) Wie man im Bild oben sieht,
muss man das Statement <sage „Hallo Welt!“> nicht
drei Mal untereinander „scratchen“, sondern einfach nur zwei weitere Male duplizieren!
Wenn man das Programm „scratch_prog_01_02.sb“
(siehe im Verzeichnis) aufruft und startet,
dann erscheint der Textstring „Hallo Welt!“
bei der Anzeige im Konsolefenster
insgesamt nur ein einziges Mal, obwohl das Statement <sage „Hallo
Welt!“> dazu insgesamt drei Mal programmiert wurde! Warum
ist dem so? Gib eine Erklärung! Wenn man das Programm „scratch_prog_01_03.sb“
(siehe im Verzeichnis), dann wird sehr schnell
deutlich, weshalb der Textstring „Hallo Welt!“ im
vorherigen Programm scheinbar nur ein einziges Mal im Konsolefenster angezeigt wurde: (Zum
Vergrößern bitte auf das Bild klicken!) Wie man im Bild oben sieht,
wird das Statement <sage „Hallo Welt!“> im
Programm definitiv drei Mal ausgeführt! Weil aber die Anzeige des Textstring „Hallo Welt #1!“, Textstring
„Hallo
Welt #2!“, Textstring „Hallo Welt #3!“ in
der Konsole an ein und derselben Position
erfolgt, werden die
einzelnen Textstrings der Reihe
nach übereinander(!) angezeigt (siehe oben)! Dies hat zur Folge, dass
man, nach dem das Programm
durchgelaufen ist, immer nur den zuletzt angezeigten Textstring, hier also der Textstring „Hallo Welt #3!“,
angezeigt wird. Im vorliegenden Fall aber nur für 2 Sekunden. Der Knackpunkt ist also, dass der anzuzeigende Text in der Sprechblase immer an der gleichen
Stelle erfolgt, und dass sich mit dem Anzeige-Statement <sage „Hallo Welt! #3“> z.B. kein
Wagenrücklauf, engl. „Carriage Return (CR)“, und auch keine
Zeilenschaltung, engl. „Line Feed (LF)“, durchführen lässt. Demzufolge nützen die Anzeige-Statements <sage „ “> auch nichts, können diese
im Programm gelöscht werden! Entfernung des Gewitters zum Standort berechnen Wenn man als Entwickler,
engl. „Developer“, ein Programm wie das nachfolgende entwickelt, dann sollte
man dem Anwender beim Programmstart gleich zu Beginn mitteilen, worum es
geht, wie das Programm heißt, was das Programm macht, nämlich den „Blitz und
Donner!“ berechnen: (Zum
Vergrößern bitte auf das Bild klicken!) Nach der Programmansage
geht es gleich zur Sache, werden drei Variablen (= Platzhalter)
deklariert (= definiert) und mit einem Wert initialisiert (= Wertzuweisung).
Dabei geht es um die Variablen ·
time_sekunden mit der Wertzuweisung = 4 (Sekunden mit der
Maßeinheit [s]), ·
schallgeschwindigkeit mit der Wertzuweisung ≈
340
(Meter pro Sekunde mit der Maßeinheit [m/s] und ·
entfernung mit der Wertzuweisung = 0, (Meter mit der Maßeinheit [m]). Da die Entfernung zum
Blitzeinschlag mittels der Schallgeschwindigkeit berechnet werden soll,
wissen wir anfangs nicht, welches Ergebnis sich ergibt. Deshalb wird die Variable „entfernung“ auf = 0 gesetzt! Gemäß der Berechnungsformel ·
Entfernung s = Schallgeschwindigkeit v
* Zeitdauer t folgt
für die Variablen
und deren Variablennamen ·
entfernung = schallgeschwindigkeit * time_sekunden Programmiertechnisch sieht
das dann wie folgt aus: (Zum
Vergrößern bitte auf das Bild klicken!) Jetzt stellt sich die
Frage, von wo und wie wir die Statements
mit der Berechnungsformel
zusammenstellen: (Zum
Vergrößern bitte auf das Bild klicken!) Interessant ist das grüne Verbindungsglied „*“, d.h. der Multiplikations-Operator. Damit sich die Variablen „schallgeschwindigkeit“ und „time_sekunden“ in den Multiplikations-Operator einsetzen lassen und dort einrasten, muss man von rechts
anfangen und als Erstes die Variable
„time_sekunden“ einfügen (siehe oben). Der bisherige Programmkode funktioniert natürlich
nur, wenn wie man die einzelnen Programm-Blöcke zusammenfügt: (Zum
Vergrößern bitte auf das Bild klicken!) Die ausführliche Berechnung zwecks Entfernungsberechnung findet sich im Abschnitt „Blitz und Donner berechnen“. Was jetzt noch fehlt, ist
die Anzeige des Ergebnisses und zwar der Variablen
„entfernung“: (Zum
Vergrößern bitte auf das Bild klicken!) Die drei „sage“-Statements
für die Ergebnisanzeige
lassen sich natürlich auch noch zusammenfassen, aber das ist dann doch etwas
komplexer (siehe Programm „scratch_prog_01_05.sb“ im
Verzeichnis): (Zum
Vergrößern bitte auf das Bild klicken!) Das nachfolgende Programm „scratch_prog_01_06.sb“ im
Verzeichnis unterscheidet sich von seinem
Vorgänger nur in der Initialisierung (= Wertzuweisung) der Variablen schallgeschwindigkeit
mit der Wertzuweisung = 343,2 (Meter pro Sekunde mit der Maßeinheit [m/s] des exakten
Dezimalwertes (= Kommazahl) vom Typ „float“
z.B. bei der „C++“-Programmierung.
Dabei gilt es zu beachten, dass es bei der Programmierung von Variablen
und deren Wertzuweisung mit einem Dezimalwert
kein Dezimalkomma gibt,
sondern nur einen Dezimalpunkt (= amerikanische Notation, Syntax). Der Grund dafür ist der,
dass es in der Welt meines Wissens keine einzige deutsche Programmiersprache
gibt, die in Deutschland erfunden und mit einem Dezimalkomma bei der Initialisierung
von Variablen entwickelt wurde. Und selbst wenn, so würde man zugunsten der
Internationalität einen Dezimalpunkt verwenden. Da aber die meisten
weltweit verbreiteten Programmiersprachen in den USA entwickelt wurden,
verwenden diese bei der Programmierung einen Dezimalpunkt anstelle eines
Dezimalkommas: (Zum
Vergrößern bitte auf das Bild klicken!) Das mit dem Dezimalpunkt
ist kein Drama, da man sich nur angewöhnen muss, bei der Eingabe von Dezimalzahlen einen Dezimalpunkt zu
verwenden! Beim nächsten Programm „scratch_prog_01_07.sb“ im
Verzeichnis muss man schon genauer hinschauen,
um den Unterschied zum vorherigen zu erkennen. (Zum
Vergrößern bitte auf das Bild klicken!) Was einem beim genaueren
Hinsehen sofort auffällt ist, dass die „sage“-Ergebnisanzeige (siehe letztes Statement
im Programm) etwas länger ist und mehr Platz beansprucht als beim
Vorgängerprogramm. Weiter fällt eventuell auf, dass es beim Screenshot (= Kopie
der Bildschirmanzeige) keinen roten Kasten,
keine rote
Umrandung wie beim Vorgängerprogramm gibt. Der Grund dafür ist
der, dass sich nichts rot umranden lässt, was es nicht gibt!
Nämlich die (Ergebnis-) Variable „entfernung“. Bisher wurde die Variable „entfernung“ zur Ergebnissicherung und Ergebnisdarstellung verwendet. Wenn man aber die Variable „entfernung“ im vorherigen und
weiteren Programmablauf nicht wirklich braucht, dann kann man sie auch von
Anfang an weglassen und die Berechnungsformel
ohne die Ergebnis-Variable direkt
in die Ergebnisdarstellung „sage“-Ergebnisanzeige
aufnehmen: ·
vorherige Berechnungsformel: entfernung = schallgeschwindigkeit * time_sekunden ·
jetzige Berechnung ohne Formel: schallgeschwindigkeit * time_sekunden Dem Anwender ist es
übrigens egal, ob man das angezeigte Ergebnis
der Entfernung vom Gewitter mit oder ohne Ergebnissicherung,
d.h. mit oder ohne die Variable „entfernung“
programmiert, da er von der Programmierung
ohnehin nichts mitbekommt. Das ist wie im praktischen
Leben, in der Lebenswirklichkeit, wo oftmals nur das Sichtbare, d.h. das
Ergebnis interessiert, aber nicht wie es zustande gekommen ist! Man kann also
ein Programm oberflächlich und schlampig, d.h. unaufgeräumt
programmieren oder Detail verliebt und pingelig, d.h. aufgeräumt und
übersichtlich. Aber inzwischen sind die
Verbraucher bzw. Anwender umweltkritischer, umweltbewusster und ökologischer
geworden, will man wissen, dass z.B. bei der Programmierung keine schlecht
bezahlten IT-Tagelöhner ohne soziale Absicherung gegen Arbeitslosigkeit oder
bei Krankheit usw. in Indien oder Afrika eingesetzt wurden. Didaktisch methodisch hat
die ·
jetzige Berechnung ohne Formel: schallgeschwindigkeit * time_sekunden den Nachteil, dass man es der Berechnung
nicht sofort ansieht, was genau berechnet wird! Demzufolge muss man im
Fach Physik in der Schule schon gut
aufgepasst haben, um zu erkennen, dass bei der Berechnung die Entfernung bzw. die Streckenlänge berechnet wird! Aber es gibt natürlich
einen Trick, wie man ganz schnell herausfinden kann, was genau berechnet
wird! Nämlich indem man die Maßeinheiten zu den Variablen wie folgt einsetzt und verwendet: ·
aus schallgeschwindigkeit * time_sekunden wird → ·
in Maßeinheiten → [ m/ Was ist Small Talk,
d.h. unverbindliche, teils unpersönliche, teils oberflächliche Unterhaltung.
Wenn man auf einer Party dem einen oder anderen Gast vorgestellt wird, dann
überlegt man krampfhaft über was man sich unterhalten könnte, da man sein
Gegenüber ja noch nicht kennt. Dann ist man gut beraten, wenn man den Fußball
oder das Wetter anspricht. Das geht praktisch immer! Ein etwas Bauern
schlauer Ausspruch lautet: „Das Wetter ist so wie es ist, es sei denn, es
ändert sich!“ Logisch! Aber was hat das Wetter mit
unserem Berechnungsprogramm „Blitz und Donner mit dem Arduino UNO
programmieren“ zu tun? Ganz einfach! Ein Gewitter ist nicht immer konstant
vier Sekunden lang, d.h. 1 372,8 Meter vom eigenen Standort weit, entfernt! Demzufolge geht es im
nächsten Programm „scratch_prog_01_08.sb“ im
Verzeichnis darum, die Tastatureingabe
der Zeit, d.h. der Variablen „time_sekunden“
vorzubereiten und zu programmieren. Dazu muss man dem Programm-Benutzer
unseres Berechnungsprogramms zunächst mitteilen, das er über die Tastatur
einen Wert, nämlich die Anzahl der Sekunden
als Maß für die spätere Entfernungsberechnung eintasten soll (siehe roter Kasten): (Zum
Vergrößern bitte auf das Bild klicken!) Aber einen ganzzahligen
Wert über die Tastatur eingeben, d.h. einlesen, ist das Eine und das Rechnen
mit dem Eingabewert zwecks Entfernungsberechnung ist das Andere: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_09.sb) Um den eingetasteten Sekundenwert
weiter bearbeiten und in die Berechnung
mit einbeziehen zu können, muss man den Parameter
„Antwort“
zum Befehl, Statement ·
<Frage „Wie heißt Du?“ und warte> bzw. ·
<Frage „Sekunden = “ und warte> in das Statement ·
<setze time_sekunden auf Antwort> einsetzen! Auch hier gilt, dass das Statement <setze time_sekunden auf Antwort>
von ganz rechts nach ganz links gelesen, interpretiert und
ausgewertet wird! Demzufolge holt sich das Programm den eingetasteten Sekundenwert aus dem Parameter „Antwort“ und weist diesen
der Variablen „time_sekunden“ zu
(siehe roter Kasten im Befehlsskript-Fenster in der mittleren Spalte). Wenn man darüber hinaus,
d.h. über den eingetasteten Sekundenwert hinaus, bezüglich der weiteren Variablen
und deren Variableninhalte im Konsole-Fenster rechts kommunizieren
möchte, dann muss man bei diesen in der linken Fensterspalte vor der betreffenden Variable, wie z.B. der Variablen
„time_sekunden“,
ein entsprechendes Häkchen þ aktivieren (siehe grünes Kästchen ganz links): (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_09.sb) Wenn der Benutzer des Arduino UNO über die Konsole
der „S4A 1.6“-Programmieroberfläche
(siehe rechte Spalte im obenstehenden Fenster) kommuniziert, nach
Aufforderung einen Sekundenwert
für die Laufzeit
von Blitz und Donner = 4 Sekunden eintastet und mittels der <Enter>-Taste
bestätigt oder alternativ durch Mausklick auf den blauen Kreis
mit dem weißen Haken am Ende der Dateneingabezeile
klickt ,
dann bleibt es früher oder später nicht aus, dass man sich vertippt,
einen falschen Wert eintastet und diesen dann liebend gerne korrigieren
möchte. Aber bisher geht das leider nicht, weil wir eine solche Korrekturfunktion
noch nicht programmiert haben! Und genau das soll sich jetzt gleich
ändern. Anstelle einer erneuten
Tastatureingabe in die Dateneingabezeile (siehe im obenstehenden Bild)
programmieren wir als Nächstes die beiden Pfeiltasten „nach oben ↑“
und „nach
unten ↓“
auf der PC-Tastatur,
indem im Hauptprogramm zwei weitere Endlosschleifen ·
<Wenn
Taste Pfeil „nach oben“
gedrückt> und ·
<Wenn
Taste Pfeil „nach unten“
gedrückt> programmieren. Dabei unterscheiden sich
die beiden Endlosschleifen <Wenn Taste Pfeil „nach …“ gedrückt> nur
im Statement ·
<ändere time_sekunden um +/-1 >
(siehe hellgrüne Kästen im untenstehenden Bild), um mit diesem die Variable time_sekunden
jeweils um den Wert +1 zu
erhöhen (= zu inkrementieren) bzw. um den Wert -1 zu erniedrigen (= zu
dekrementieren). Sobald eine der beiden Pfeiltasten „nach oben ↑“
oder „nach
unten ↓“
auf der PC-Tastatur
betätigt und die Variable time_sekunden
entsprechend inkrementiert bzw. dekrementiert wurde, müssen die Berechnungen nebst Ergebnisanzeigen aktualisiert
werden! Und zwar jede für sich, je nach dem welche Pfeiltaste betätigt wurde.
Da sich aber beide Endlosschleifen
<Wenn Taste Pfeil „nach …“ gedrückt> nur
in einem Statement
unterscheiden, (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_10.sb) macht es Sinn, die Entfernungsberechnung aus den beiden Endlosschleifen wie folgt auszulagern,
sodass diese bis auf zwei Statements
total abgespeckt sind: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_11.sb) Beim Vergleich der beiden
(Pfeiltasten-) Endlosschleifen mit
dem Vorgängerprogramm (siehe oben)
fällt sofort auf, dass das Statement
·
<setze rechne_boolean auf 1> neu hinzugekommen ist. Dabei
stellt sich dann auch die Frage, was es mit dem Variablennamen „rechne_boolean“ und dem Ausdruck „boolean“
auf sich hat. >> Boolesche
Variable, benannt nach George Boole, sind
Elemente einer booleschen Algebra. Eine
Sonderform mit nur zwei Zuständen ist in der Digitaltechnik die Schaltvariable
(englisch switching variable) bzw. bei
der Programmierung der
boolesche Datentyp. (…) Im Bereich der
Softwareentwicklung versteht man unter einem booleschen Ausdruck einen Ausdruck, der nur die beiden Wahrheitswerte
True und False (engl. Für wahr
und falsch) annehmen kann. Solche Werte können miteinander logisch verknüpft und Variablen eines
passenden Typs zugewiesen werden; sie finden in der Regel bei bedingten
Anweisungen oder Schleifen Anwendung. Viele Programmiersprachen stellen dafür einen
eigenen Datentyp zur Verfügung, etwa unter der Bezeichnung boolean (Algol 60,
Pascal, Java, Lua, Ada, Visual Basic Classic, BASIC)
oder bool (Algol 68, C#, C++, PHP,
Python) oder logical (Fortran). Zur Repräsentation eines
booleschen Wertes genügt prinzipiell ein einzelnes Bit, um die beiden
möglichen Zustände zu repräsentieren. Aus technischen Gründen wird jedoch in
der Regel eine andere Repräsentation gewählt, meist abhängig von der Wortbreite
des verwendeten Systems, wobei bei C++ Vektoren für diesen Typ optimiert
sind. Wird ein boolescher Wert mit einem Ganzzahltyp dargestellt, steht meist
0 für falsch und alles ungleich Null (häufig wird −1 oder 1
verwendet) für wahr. Anders in der Linux/Unix-Shell-Programmierung:
Hier steht ein Wert größer Null für einen Fehler und im übertragenen Sinne
für falsch, während Null für einen erfolgreichen Programmaufruf und so
für wahr steht. << (Quelle: Wikipedia) Jetzt wissen wir, dass eine
boolesche Variable (= vom Typ „boolean“)
nur zwei Werte annehmen kann, und zwar entweder ·
„0“ = falsch, engl. „false“, elektrischer Strom „aus“ oder ·
„1“ = richtig, engl. „true“, elektrischer Strom „ein“ In der Digital- und Computertechnik arbeiten z.B. Digitalschaltungen, die CPU (= engl. „Central Processing Unit“,
d.h. Prozessor), die ALU
(= engl. „Arithmetic Logic Unit“, d.h. Rechenwerk) oder der Arbeitsspeicher
eines PCs
mit Binärwerten,
d.h. Nullen (= „0“) und Einsen (= „1“) entsprechend dem Binärcode
im Binären
Zahlensystem zur Basis 2. Dabei entsprechen in der Computertechnik insgesamt 8 Bit = 1 Byte,
sind 10242 Bit = 1 KByte und 1024 KByte = 1 MByte. Wie man unschwer sieht, steht das „K“
für „Kilo2“ im
Binärsystem!
Deshalb der Index 2 tief gestellt! Würde man im Sommer einen
Roboter, der nur das Binärsystem zum Rechnen beherrscht, beauftragen 1 Kilo Süßkirschen im Supermarkt
einzukaufen, und würde dieser dann das Kilo Süßkirschen in der Obstabteilung
auf der Waage abwiegen, dann würde er die Schale mit den Süßkirschen bis 1024 Gramm auffüllen, weil für den
Roboter 1 Kilo =
10242
sind! Auf der automatischen
Kassenwaage an der Kasse gäbe es dann aber eine böse Überraschung, weil dem
Roboter die 102410 Gramm
wegen des Rechnens im Dezimalsystem in Rechnung gestellt würden! Weil es sich bei der
elektronischen Kasse in Wirklichkeit aber um eine „Computer“-Kasse handelt,
die im Inneren des Rechenwerks (= ALU) binär rechnet, müsste man dieser
nach außen hin, d.h. bei der Schnittstelle zum Display (= Anzeige), das
Umrechnen vom binären zum dezimalen Zahlensystem extra beibringen bzw. wurde
dies bereits in der ALU intern so programmiert, sodass der Kassierer oder
Kunde dies von außen her gar nicht mit bekommt! Würde unsere Computer
unterstützte Armbanduhr, engl. „Smartwatch“, die
Uhrzeit hexadezimal
zur Basis 16
anzeigen und es wäre gerade 1310
Uhr 2010,
dann bekämen wir auf dem LCD-Display D16 Uhr 1416
angezeigt. Die entsprechende Umrechnung in das Dezimalsystem müsste dann
folgendermaßen aussehen: 13 * 161 + 14 * 160 =
13 * 16 +
14 * 1 =
20810 + 1410 = 22210 Minuten =
222 * 1/60
Stunden = 3,7 Stunden = 3 Stunden
und 7/10 Stunden = 3 Stunden und 7/10 * 60 Minuten = 3 Stunden und 42 Minuten dezimal! Die Uhrzeit müsste aber dezimal
1310 Uhr 2010 = 13 Uhr 20
lauten und nicht wie bei der Umrechnung 3 Uhr 42! Wo liegt der Fehler?
Hilfestellung: der Denkfehler liegt nicht in der hexadezimalen Umrechnung! Der Fehler liegt, wie
gesagt, nicht in der hexadezimalen Umrechnung, sondern bei der Umwandlung der
Uhrzeit selbst: 13 Uhr 20 = 13 Stunden
und 20 Minuten = 13 * 1 Stunde + 20 * 1/60 Stunde = 13 Stunden + 0,33 Stunden = 13,33 Stunden
13,33 Stunden =
13 Stunden + 33/100 Stunden = 13 * 60 Minuten + 33/100
* 60 Minuten =
780 Minuten + 19,8 Minuten = 799,8 Minuten = 799 Minuten
+ 0,8 Minuten =
799 * 60 Sekunden + 0,8 * 60 Sekunden = 47 940 Sekunden + 48
Sekunden = 47 988 Sekunden
þ 13,3310
Stunden = 13,3310 * 1 Stunde = 13,3310
* 60 Minuten =
13,3310 * 60 * 1 Minute = 13,3310 * 60 * 60 Sekunden = 13,3310 * 3600 Sekunden = 47 98810
Sekunden þ = BB7416 Sekunden = BB7416 / 6010 Minuten = BB7416 / 3C16 Minuten = 31F16 Minuten = 31F16 / 3C16 Stunden
= = BB7416 / ( 3C16 * 3C16 ) Stunden = BB7416 / ( E1016 ) Stunden = D16 Stunden = 1310 Stunden þ Jetzt sieht man, dass sich
mit der für das Dezimalsystem geschaffenen Uhrzeit hexadezimal
nur sehr ungenau rechnen lässt, obwohl für die Uhrzeit im Dezimalsystem nur zehn Bit (= Finger) zur Verfügung
stehen, während das im Hexadezimalsystem sogar bis zu 16 Bit (=
Finger) sind: Wenn man die Auflösung berechnet, dann 10 Bit → 60 Sekunden 1 Bit → x Sekunden x = 60 Sekunden / 10 Bit *
1 Bit = 6 Sekunden 16 Bit → 60 Sekunden 1 Bit → x Sekunden x = 60 Sekunden / 16 Bit *
1 Bit = 3,75 Sekunden = 3 Sekunden sieht man, dass sich beim ·
Dezimalsystem mit 1 Bit nur 6 Sekunden
von einer ganze Minute auflösen bzw. darstellen lassen. Demzufolge würde der Sekundenzeiger nur jede 6. Sekunde von insgesamt 60 Sekunden
anzeigen! ·
Hexadezimalsystem
mit 1 Bit bereits 3
Sekunden von einer ganze Minute auflösen bzw. darstellen lassen. Demzufolge
würde der Sekundenzeiger bereits
jede 3. Sekunde von insgesamt 60
Sekunden anzeigen!
Nach diesem Ausflug in die
Welt der Logik des Engländers Georg Boole, des
binären und hexadezimalen Zahlensystems wenden wir uns wieder den beiden Endschlosschleifen beim Abfragen der Pfeiltasten „nach oben ↑“
oder „nach
unten ↓“
auf der PC-Tastatur
zu: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_11.sb) Immer, wenn eine der Pfeiltasten „nach oben ↑“
oder „nach
unten ↓“
auf der PC-Tastatur
gedrückt wurde, wird die boolesche Variable „rechne_boolean“ auf den Wert „logisch 1“ = „true“, d.h. wahr, richtig
gesetzt! Da aber gleich beim Programmstart
als Erstes die Endlosschleife „Wenn angeklickt“
gestartet und ausgeführt wurde, wurde damit auch die Endlosschleife „wiederhole fortlaufend“ gestartet, die von da an
permanent (= fortwährend) im Hintergrund
aktiv ist und darauf wartet, dass eine der Pfeiltasten „nach oben ↑“
oder „nach
unten ↓“
auf der PC-Tastatur
gedrückt wurde! Dabei wartet die Endlosschleife „wiederhole fortlaufend“ in
Wirklichkeit aber nur darauf, ob die boolesche Variable „rechne_boolean“ zwischenzeitlich auf den Wert „logisch 1“ = „true“,
d.h. wahr,
richtig gesetzt wurde oder gesetzt wird! Ist dies irgendwann der
Fall, ist die Abfragebedingung <falls rechne_boolean = 1> erfüllt (siehe roten Kasten), werden die nachfolgenden Programmzeilen in der Endlosschleife „wiederhole fortlaufend“ der
Reihe nach abgearbeitet (siehe grüner
Kasten): (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_11.sb) Wichtig im Zusammenhang mit
der boolesche Variable „rechne_boolean“
ist, dass diese gleich beim Programmstart der Endlosschleife „Wenn angeklickt“ initialisiert,
d.h. auf null gesetzt wird (siehe roter Kasten): (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_11.sb) Wie man im obenstehenden
Bild sieht, ist noch die Abfrage „Wenn Arduino1 angeklickt“
als Endlosschleife hinzugekommen
mit der sich das Programm „scratch_prog_01_11.sb“ jederzeit gezielt und bewusst beenden lässt (siehe grüner Kasten). Dabei gilt es aber zu
beachten, dass die analogen und digitalen Anschlüsse am Port „COM1“
weiterhin in Funktion sind, da nur so der Arduino
UNO von der „S4A 1.6“-Software
Programmbefehle usw. entgegennehmen kann und sich weiterhin neue Programme
über das USB-Kabel auf den Arduino UNO
aufspielen lassen!
Wie man anhand des Programms „scratch_prog_01_12.sb“ im Webverzeichnis
sieht, wurde dieses hinsichtlich der Textanzeige noch optimiert,
indem einige „sage“-Befehle
mittels des mehrfach geschachtelten Befehls <verbinde Text_1 Text_2 > wie folgt angewendet wurden (siehe rote Kästen): (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_12.sb) Eine weitere Verständnis
mäßige Verbesserung besteht darin, dass beim Setzen der boolesche Variablen
„rechne_boolean“ nicht
mehr das Statement ·
<setze rechne_boolean auf 1> verwendet wird, wobei die logische
„1“
für engl. „true“, d.h. wahr, richtig steht, sondern das Statement ·
<setze rechne_boolean auf true>, weil es dann keine
Gefahr mehr gibt, die logische „1“ mit der arithmetischen
„1“ in anderen Programmzeilen zu verwechseln!
Das gilt dann auch für den booleschen
Wahrheitswert der logischen
„0“,
die für engl. „false“, d.h. unwahr, falsch steht: ·
<setze rechne_boolean auf false> Was auch noch angesprochen
und behandelt werden muss ist die engl. „if … then … else“-Abfrage,
die übersetzt ausführlich lautet: <Falls die [ Bedingung ] erfüllt ist, dann [ tue_etwas ] ansonsten [ tue_etwas_anderes ]> oder noch ausführlicher <Falls die [ Bedingung ] erfüllt ist, dann [ tue_etwas ] ansonsten, (wenn die [ Bedingung ] nicht erfüllt ist,) [ tue_etwas_anderes ]> Noch verständlicher, weil
übersichtlicher, wird es, wenn man das Ganze wie folgt entsprechend staffelt:
<Falls die [ Bedingung ] erfüllt ist, dann [ tue_etwas ] ansonsten [ tue_etwas anderes] Wenn aber ansonsten nichts
anderes getan werden soll, dann kann man den zweiten Teil der „if … then … else“-Abfrage
auch wie folgt einfach weglassen: <Falls die [ Bedingung ] erfüllt ist, dann [ tue_etwas ] Blitz und Donner gefährlich nah Wenn die Zeitdifferenz
zwischen Blitz und Donner nur noch drei Sekunden beträgt, dann
befindet sich das Gewitter v = s / t → s = v * t = 343,2 m/s * 3 wegen der geringen
Entfernung nur noch knapp einen Kilometer vom Standort aus entfernt, sodass
bereits der nächste Blitz in unmittelbarer Nähe einschlagen kann. Man kann
also sagen, dass es bei einer Zeitdifferenz von weniger als vier
Sekunden richtig gefährlich wird. Dementsprechend erweitern
wir unser Programm dahingehend,
dass bei einer Zeitdifferenz von weniger als vier Sekunden
ein Alarm
ausgegeben wird: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_13.sb) Da sich bei dem
Berechnungsprogramm auch negative Werte für die Zeitdifferenz wie z.B. -1, -2, …, -5 eintasten
lassen und dies später noch unterbunden werden soll, müssen wir schon jetzt
dafür sorgen, dass die Abfrage beim obenstehenden Statement ·
<
falls time_sekunden < 4 > für den Abfragebereich [ 0, …, 4 ] entsprechend erweitert
wird. Leider verhält es sich bei
der „Scratch“-Programmierung („S4A 1.6“) so, dass es keinen
Operator für „größer gleich >= “
oder „kleiner gleich =< “ gibt, so dass man
sich diesen selbst basteln muss. Und zwar mit dem Verbindungsglied „oder“ in
Form des Statements ·
<
time_sekunden = 0 oder time_sekunden > 0 > und dem Verbindungsglied „und“ in Form des vollständigen Statements ·
<
time_sekunden = 0 oder time_sekunden > 0 und time_sekunden < 4 > In der unteren Zeile im nachfolgenden Bild sieht man
das zusammengesetzte Statement:
(Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_14.sb) Die entsprechende „Falls“-Abfrage
sieht dann folgendermaßen aus: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_14.sb) So, jetzt wo wissen wir,
wie man bei einer „Falls“-Abfrage
den Operator für „größer gleich >= “ oder „kleiner gleich =< “ selbst
programmiert, stellt sich die Frage, ob und wie man seitens des Programms darauf reagieren soll, wenn
der Anwender für die Zeitdauer
zwischen Blitz und Donner wider
Erwarten keinen positiven, ganzzahligen Wert in die Eingabezeile tastet, sondern z.B.
aufgrund eines Tippfehlers einen negativen Wert wie z.B. -3 Sekunden
eintastet. Wie man sieht, stört sich
das Programm nicht im
Geringsten daran und rechnet stur die Entfernung
vom eigenen Standort bis zur Gewitterwolke aus, auch wenn diese negativ
ist: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_14.sb) Werfen wir noch einmal ein
Blick auf die Berechnung der Geschwindigkeit
v sowie der Berechnung der zurückgelegten Wegstrecke s des Schalls: v = s / t → Geschwindigkeit v = zurückgelegte
Wegstrecke s / Zeitdauer t s = v * t = 343,2 m/s * 3 Dabei verhält es sich so,
dass sich die Wegstrecke s aus dem Produkt von Geschwindigkeit v und
verstrichener Zeit t. In der Mathematik heißt es,
dass ein Produkt immer dann zu null wird oder auch negativ
wird, wenn ein (Multiplikations-) Faktor zu null oder negativ wird.
Wenn die Geschwindigkeit
mit -v negativ
wird, dann bedeutet die Geschwindigkeitsabnahme von +v nach -v, dass z.B.
ein Fahrzeug zunächst von +v auf 0 m/s (= Stillstand) abgebremst wird.
Und zwar mit der Beschleunigung -a, das bedeutet nämlich
bremsen! Wirkt dann aber die
negative Beschleunigung -a fort, dann wird das Fahrzeug weiter negativ
beschleunigt und zwar in umgekehrter Richtung von 0 auf -v, sodass das
Fahrzeug rückwärts fährt! Demzufolge bedeutet die
Geschwindigkeitsänderung von +v auf 0, dass das Fahrzeug mit -a negativ
beschleunigt, d.h. abgebremst wird und anschließend mit +a von 0 auf
-v wieder positiv beschleunigt. Diesmal aber in die umgekehrte
Richtung mit der Geschwindigkeit -v. Jetzt ist geklärt, wissen
wir, dass eine Geschwindigkeit v auch physikalisch mit -v negativ
werden kann, was einer Geschwindigkeitsumkehr
hin zum Rückwärtsfahren
bedeutet.
Als nächstes stellt sich
die Frage, ob die Zeit +t mit -t auch negativ werden kann. Und falls ja, was
würde das bedeuten? Zwar können wir in Europa bei der Zeitumstellung von
Winter- auf Sommerzeit und von Sommer- auf Winterzeit die Uhr entsprechend
umstellen, daran, dass die Zeit aber immer noch vorwärts läuft, ändert
das aber nichts! Könnten wir die Zeit von +t auf -t zurückdrehen, dann
käme dies einer Zeitreise in die Vergangenheit gleich! Und, um auf dem
Zeitstrahl rückwärts zu laufen, müssten wir doppelt so schnell rückwärts
laufen, weil ja in dieser Zeit die Zeit t selbst weiter vorwärts
läuft. Das wäre dann so, als wollten wir eine Rolltreppe, die sich von oben
nach unten bewegt, entgegengesetzt hoch laufen! Auch dabei müssten wir erst
einmal die Abwärtsgeschwindigkeit überwinden, sodass wir zunächst auf der
Rolltreppe quasi stillstehen. Erst wenn wir dann weiter entgegen der Bewegung
der Rolltreppe bergauf beschleunigen, würden wir die Rolltreppe
tatsächlich bergauf laufen. Da also nicht sein darf,
was nicht sein kann, nämlich die Zeit mit -t rückwärts laufen zu lassen,
erweitern wir das bisherige Programm dahingehend, dass wir die negative
Eingabe von Sekunden mit z.B. -1, -2, -3, …, -4, -5 usw. abfangen! Und zwar
in der Weise, dass auf die fehlerhafte Eingabe der Zeit -t hingewiesen
wird und zum erneuten, richtigen Eingeben der Zeit +t in Sekunden mit
z.B. +1, +2 , +3, …, +4, +5 bzw. 1, 2 , 3, …, 4, 5 usw. aufgefordert wird (siehe
roter Kasten): (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_15.sb) Wenn man das Programm startet, dann bekommt man
als Erstes angezeigt, wie das Programm
heißt, nämlich „Blitz und Donner!“, um auf diese Weise dem
Anwender mitzuteilen, welches Programm
er aufgerufen hat. Anschließend erfolgt der
Hinweis bzw. die Anzeige „Gib die Anzahl der Sekunden
auf der Tastatur ein ...“. Nach erfolgter Tastatureingabe der Sekundenzahl als gestoppte bzw. gezählte Laufzeit
von Blitz und
Donner, läuft das Programm in das Statement der ·
„falls“-Abfrage <falls time_sekunden < 0 > , um die eingetastete Sekundenzahl
hinsichtlich eines negativen Wertes zu überprüfen. Dabei wird
die „falls“-Abfrage
nur ein einziges Mal abgearbeitet bzw. abgefragt. Was aber, wenn der Benutzer aus Jux und Dollerei mehrfach
nacheinander negative Zahlenwerte eintastet? Dann fährt das Programm einfach
fort und berechnet die Entfernung
zwischen Blitz und Donner negativ, sodass die Meldung „Das Gewitter ist JETZT = -342.2 m von hier entfernt!“ im
Konsolefenster angezeigt wird. Und
zwar für die eingetastete Zeit = -1 Sekunde. Um Mehrfacheingaben negativer
Werte
abzufangen braucht es also eine Endlosschleife, die nur dann verlassen werden
kann, wenn keine negative Eingabe mehr in der Eingabezeile des Konsolefensters
erfolgt: (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_16.sb) Wenn man sich den zweiten
Teil des Programms nach dem Statement
·
<sage
„Weiter
mit Pfeiltaste nach oben oder unten!“ für 5 Sek. > anschaut, dann stellt man
fest, dass sich der Sourcecode (=
Quellkode, Programmkode) im roten Fenster (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_16.sb) bereits zum zweiten Mal
wiederholt. Diesbezüglich wäre es
natürlich vorteilshafter und effizienter, wenn man den Sourceode im roten Fenster in
eine eigene Funktion
auslagern könnte, sodass man den entsprechenden Programmkode im
laufenden Programm nicht mehrfach kodieren muss. Leider gibt es bei der „Scratch“-Programmierung im
„S4A 1.6“-Programm keine
Möglichkeit, eine Funktion zu definieren und namentlich zu benennen, sodass sich
diese über den Funktionsnamen immer wieder aufrufen lässt. Allerdings
gibt es einen Trick, der nicht unversucht bleiben soll. Und zwar indem wir
beim EVA-Prinzip (= Daten
Eingabe,
Verarbeitung,
Ausgabe)
bei der Funktionalität
zwischen der Dateneingabe und der Verarbeitung
der Daten nicht
nur begrifflich unterscheiden, sondern diese auch bei der Programmierung
voneinander trennen! Wie man im Sourcecode des
nachfolgenden Programms sieht, wird die Dateneingabe für sich und getrennt
vom übrigen Programm vorgenommen.
Um die Dateneingabe
vorzunehmen, muss man diese zuvor starten, indem man auf der PC-Tastatur die Leertaste
betätigt (siehe roter Kasten). Nach erfolgter Dateneingabe,
hier das Eintasten einer Sekundenzahl als Maß für die Entfernung von Blitz
und Donner, wird die boolesche Variable
„rechne_boolean“
auf den Wert „true“
gesetzt, um für die Verarbeitung der Daten grünes Licht zu geben (siehe
blauer Kasten im roten Kasten) (Bild vergrößern: auf
Bild klicken! Webverzeichnis scratch_prog_01_17.sb) Ausgewertet werden die eingetasteten
Daten in
Form der Variablen „time_sekunden“
dann im Programmblock < wiederhole fortlaufend >. Und zwar hinsichtlich der Eingabe von
negativen Werten, von Werten aus dem Bereich t = [ 0, …, 3 ] Sekunden, wo sich das Gewitter praktisch über den Köpfen
der Bewohner befindet und gefährlich ist, bis hin zu Werten von t >= 4,
wo das Gewitter nicht mehr gefährlich ist (siehe grüner Kasten).
Ausgewertet werden die eingetasteten Daten werden aber nur dann
ausgewertet, wenn die boolesche Variable „rechne_boolean“ den Wert „true“
aufweist (siehe blauer Kasten im
grüner Kasten). Daten senden („TX“) und empfangen („RT“) Das obenstehende Programm „scratch_prog_01_17.sb“ (siehe Webverzeichnis) ist nicht nur
ziemlich professionell programmiert, sondern funktioniert inzwischen auch
recht gut, lässt aber trotzdem noch Wünsche offen. Beim Marketing und den Marketingexperten, das sind Fachleute
die sich Gedanken darüber machen, wie man ein neues Produkt im Markt, d.h.
bei den Konsumenten, bei den Verbrauchern und beim Kunden bekannt macht und
zwar so, dass dieser das beworbene Produkt sofort haben will, koste es was es
wolle. Dazu muss sich der Marketingfachmann ein
Marketingsprech ausdenken, das der Kunde versteht und z.B. Bilder, Fantasien
im Kopf auslöst, wo der Kunde bei strahlendem Sonnenschein im Strandkorb am
Strand liegt, zur Abkühlung ein leckeres Eis schleckt, aber leider nicht ins
Meer schwimmen gehen kann, um sich noch mehr abzukühlen, weil gerade Ebbe
herrscht und weit und breit kein Meer zu sehen ist. Dann wünscht man sich den
kleinen Arduino UNO herbei, der
mit seiner USB-Powerbank über
ausreichend „Saft“ (= Energie, 10 0000 mAh Ladungsmenge) verfügt und mit
seinem kraftvollen Gebläse für einen kühlen Luftstrom sorgt. Der Marketingexperte muss also mit seinem
potentiellen und kaufkräftigen Kunden, der auch noch technikaffin (= Technik
freundlich) ist kommunizieren, sich über Sprache
mit diesem „unterhalten“, um sein Produkt an den Mann, die Frau zu bringen.
Und das, obwohl der Fachmann seinen Kunden nicht sieht, nicht hört und auch
nicht weiß, welche Sprache dieser spricht und über welchen Wortschatz dieser
verfügt. - Nachfolgend geht es also darum, dass wir dem Arduino UNO das Kommunizieren
beibringen. Aber wie wir gleich sehen werden, sind es mehr Selbstgespräche,
schwätzt dieser mit sich selbst. Wie wir ja bereits wissen, verfügt der Arduino UNO intern über eine serielle
„RS-232“-Schnittstelle
zwecks serieller Datenübertragung, die sich über einen
der seriellen Ports wie
z.B. COM1, COM2, …, COM5, die allesamt über den USB-Anschluss am Personal
Computer verfügbar sind, ansprechen lässt. Da man ja beim Senden („TX“) von Daten stets auch einen Empfänger („RX“) braucht, bietet es
sich an, das allseits bekannte und beliebte „PuTTY“-Programm
entweder als Sender oder Empfänger zu verwenden: (Zum Vergrößern bitte
auf das Bild klicken!) Leider lässt sich das „PuTTY“-Programm im Moment nicht
zur seriellen Datenkommunikation
über den Port „COM5“ nutzen, weil das „S4A 1.6“-Programm auf allen anlogen
Anschlüssen über COM5 seriell irgendwelche
Schrottdaten sendet: (Zum Vergrößern bitte
auf das Bild klicken!) Wenn man sich die Platine vom Arduino UNO anschaut, dann sieht man
oben rechts in der Ecke die beiden Steckkontakte
„TX → Pin 1“ und „RX → Pin 0“ über die Daten
seriell gesendet (= „TX“) oder empfangen (=“RX“) werden: (Zum Vergrößern bitte
auf das Bild klicken!) Wer über einen zweiten Arduino UNO oder einen kleinen
Arduino
NANO verfügt, (Zum Vergrößern bitte
auf das Bild klicken!) der kann die beiden seriellen Schnittstellen miteinander verbinden. Dazu muss man den Steckkontakt „TX“ für das Senden („TX“) von Daten des Arduino UNO mit dem Steckkontakt „RX“ für das Empfangen („RX“) von Daten des Arduino NANO verbinden. Ferner muss man den Steckkontakt „TX“ für das Senden („TX“) von Daten des Arduino NANO mit dem Steckkontakt „RX“ für das Empfangen („RX“) von Daten des Arduino UNO verbinden. Demzufolge werden beide
Steckkontakte für das Senden
und Empfangen über Kreuz miteinander
verbunden. Zum Programmieren
verwenden wir den sogenannten „Calliope mini 2.0“
als Hardware, einen Mikrocontroller mit ARM Cortex M0
Prozessor. >> Der Calliope mini ist ein Einplatinencomputer, der für Bildungszwecke
entwickelt wurde und an deutschen Grundschulen
eingesetzt wird. Ziel ist es, Schülern ab der dritten Klasse einen
spielerischen Einstieg in das Programmieren
und algorithmische
Denken zu ermöglichen. Neben Schülern sollen auch Lehrkräfte und das
Bildungssystem erreicht werden, damit langfristig mehr digitale Inhalte an
Schulen vermittelt werden können. Die Programmierung
des Mikrocontrollers ist über unterschiedliche,
webbasierte Entwicklungsumgebungen möglich.
(…) Der Calliope mini wurde im
Jahr 2015 parallel und auf Grundlage des BBC
micro:bit entwickelt und mithilfe von Lehrkräften erweitert.
Im Vergleich zu dem BBC micro:bit besitzt der Calliope mini zusätzliche
Bauteile wie einen Lautsprecher, ein Mikrofon und eine RGB-Leuchtdiode, zwei
Grove-Konnektoren, erweiterte In- und Output Optionen und eine für Kinder
kurzschlussvermeidende Sternenform. Seit Sommer 2017 ist der Mikrocontroller
käuflich zu erwerben. Hinter der
Weiterentwicklung steckt die Calliope gemeinnützige GmbH. Gesellschafter sind
die Professorinnen Gesche Joost und Franka Futterlieb, der
Psychologe Stephan Noller, der Designer Jørn Alraun, der
IT-Berater Maxim Loick und der Wirtschaftswissenschaftler Klaus Jürgen Buß. Der Name "Calliope mini" bezieht sich auf die
griechische Muse Kalliope, eine Tochter des Zeus und Schutzgöttin der
Wissenschaft, der Philosophie und der epischen Dichtung. Sie gilt unter Informatikern
als die „Tabletmuse“, da sie früher häufig mit einer Schreibtafel dargestellt
wurde. Informatiker bezeichnen sie als eine frühe Vorbotin digitaler
Bildungsideale. << (Quelle: Wikipedia) Wir legen
gleich los und steigen in die Programmierung des „Calliope mini“ ein. Und
zwar direkt in der online Entwicklungsumgebung
deines Browsers: (Zum Vergrößern bitte auf das Bild klicken!) Die im obenstehenden Bild
zu sehende Entwicklungsumgebung teilt sich in drei Bereiche (Spalten) auf: 1.
die
Simulation des „Calliope mini“, 2.
die
Programm-Bibliothek des „Calliope mini“, 1.
die
Programmier-Oberfläche des „Calliope mini“, Unser erstes Programm „programm_01_01.hex“
lässt sich direkt aus dem Browser
heraus mittels rechter Maustaste
und im Untermenü <Link speichern unter>
auf die lokale Festplatte des heimischen Desktop-PCs herunterladen und von
dort aus auf den „Calliope mini“ über das angesteckte Mikro-USB-Kabel
aufspielen! Beim Programmieren mit den
sogenannten (Programm-) „Blöcken“ gibt es im Wesentlichen zwei Programmblöcke
und zwar ·
den Programmblock „beim Start“ sowie „dauerhaft“. Dabei wird der Programmblock „beim Start“
gleich als erstes zu Beginn beim Starten des Programms ausgeführt. Im Programmblock „beim Start“ stehen deshalb nur Befehle, d.h. engl.
„statements“, die nur beim Programmstart ausgeführt werden sollen und später
beim weiteren Programmablauf keine Rolle mehr spielen! Im vorliegenden
Fall sind das nur zwei Statements, und zwar ·
das Statement <Bildschirminhalt löschen> sowie ·
das Statement <zeige Text „Blitz & Donner“>. Dabei ist mit „Bildschirm“
die 9 x 9
Matrix (= Tabelle) in Form von sehr kleinen, rechteckigen
LEDs gemeint, wobei
jede der 9 x 9 = 81 LEDs einen, wenn auch großen Bildpunkt darstellt. Damit man den Schriftzug „Blitz & Donner“
trotzdem einigermaßen gut lesen kann, wird dieser in einer roten Laufschrift
angezeigt. Rot deshalb, weil die LEDs rotes Licht abstrahlen, sozusagen in
„schwarzweiß“ in roter Farbe. Später werden wir noch einen Befehl
kennenlernen mit dem sich die Helligkeit der LEDs „dimmen“, d.h. heller oder
dunkler stellen lässt. Bevor
man das Programm „programm_01_01“, ·
das übrigens mit dem Dateinamen „mini-programm_01_01.hex“
heruntergeladen startet, ·
indem man auf das kleine, weiße Quadrat „Stop“ (-Taste) klickt, sollte man dieses
durch Mausklick ganz unten in der
Mitte auf das Symbol „Diskette“ abspeichern!
(Bild
vergrößern: auf Bild klicken! Webverzeichnis
programm_01-01.hex) Früher oder später könnte
es nämlich mal passieren, dass sich der „Calliope mini“
wider Erwarten aufhängt und einfriert, sodass nichts mehr geht, man
das Gerät von der Stromversorgung abkoppeln und neu starten
muss, indem man die Stromzufuhr wieder herstellt. Wohl dem, der sein mehr
oder weniger umfangreiches Programm zuvor abgespeichert hatte! Wenn man das Programm nach
der Programmierung auch auf der Hardware
des „Calliope
mini“ ausprobieren möchte, dann muss man nur auf die Schaltfläche <Herunterladen>
klicken, sodass sich das Dateifenster vom Windows
Explorer (= Dateimanager von Windows) öffnet. Nun muss man sich
entscheiden, ob man „Calliope mini“-Programm auf der lokalen Festplatte C:\ des (Windows-) Desktop-PCs oder direkt in den
Flashspeicher des
„Calliope mini“
speichern will, das dann anschließend automatisch ausgeführt wird. Wenn man den „Calliope mini“
über das Mikro-USB-Kabel an einen (Windows-) Desktop-PC anschließt, dann wird
dieser nicht nur vom Desktop-PC mit Strom versorgt, sondern auch automatisch
in das Windows-Dateisystem
eingebunden! Und zwar in der Form, dass im Dateisystem ein weiteres Laufwerk ähnlich
dem einer Festplatte, eines CD-/DVD-Laufwerks oder eben eines USB-Laufwerks mit
der Bezeichnung „MBED VFS USB Device …“
eingerichtet wird. Dabei steht die Angabe „MBED“ für „embedded“, d.h.
„eingebettet“ im Sinne von „in das Windows-Dateisystem integriert“, die Angabe „VFS“ steht für engl. „virtual
file system“, d.h. virtuelles Dateisystem, im Sinne von „nicht wirklich
physisch vorhandenes Dateisystem“. Im Gegensatz zu einer tatsächlich physisch
vorhandenen Festplatte
als Hardware, die im Desktop-PC verbaut ist.
Wenden wir uns wieder dem Block-Programm „progamm_01_01“
zu: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
programm_01-01.hex) Der Programmblock „beim Start“ wird direkt beim Programmstart, d.h.
beim Ausführen des Programms auf dem „Calliope mini“
ausgeführt. Und zwar nur beim Programmstart und später nie wieder! Dabei werden im Programmblock „beim Start“
zwei Statements (= Befehle) ausgeführt und zwar das Löschen des „Bildschirms“
mit der 9 x 9 LED-Matrix-Anzeige und anschließend die Anzeige des konstanten
Textstrings (= Zeichenkette) „Blitz & Donner“. Dass es sich dabei um einen
konstanten Textstring handelt, bedeutet nichts anderes, als dass es
sich um einen konstanten, d.h. während des Programmablaufs nicht
veränderlichen Text unter Verwendung einer Text-Variablen handelt. Früher oder später werden Block-Programme
(siehe oben) ziemlich umfangreich und dabei gleichzeitig nicht nur bunter,
sondern auch unübersichtlicher! Deshalb gewöhnen wir es uns
von Anfang an, auch Statements (= Befehle) in der „JavaScript“-Programmiersprache
zu programmieren, die sich besser „lesen“, aber wegen der Syntax (= Satzbau eines
Statements/Befehls) etwas schwerer verstehen lässt: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
programm_01-01.js) Wie man im obenstehenden Programmkode sieht,
gibt es sogenannte „Basis“-Befehle,
engl. „basic“.
Dabei handelt es sich um eine sogenannte Klasse
von „Basis“-Befehlen. (Zum
Vergrößern auf das Bild klicken!) Was aber hat es im
obenstehenden „JavaScript“-Programm
mit dem Statement basic.forever(function () { }) Wie man sieht, handelt es
sich um den „Basis“-Befehl
„forever“,
deutsch „für ewig“ im Sinne von dauerhaft, fortwährend, der übrigens eine namentlich
unbestimmte Funktion „function() { … }“
enthält bzw. ausführt! Was aber ist eine
„Funktion“? Eine Funktion, engl. „function“, nimmt zwischen den geschweiften Klammern { … }
mehrere Statements auf, die z.B. Daten einlesen, verarbeiten,
ausgeben/anzeigen usw. Demzufolge kann eine
Funktion etwas, bewirkt eine Funktion etwas, tut eine Funktion etwas. Nehmen wir als Beispiel das
Objekt „Fahrrad“, das über eine funktionierende
Kettenschaltung vorn an der
Tretkurbel und hinten am Hinterrad verfügt. Dabei funktioniert
aber die Funktion „Kettenschaltung“
nur ordnungsgemäß, wenn die Kette nicht verrostet ist, mit Kettenöl eingeölt
wurde, damit sie leichtgängig ist und sich geschmeidig schalten lässt.
Außerdem muss die Kettenschaltung in Form der Seilzüge richtig eingestellt
und entsprechend justiert sein, damit die Kette beim Schalten nicht abspringt
oder sich verhakt. Schauen wir uns zur
besseren Veranschaulichung noch das „Block“-Programm dazu an: (Zum
Vergrößern auf das Bild klicken!) Webdesigner entwickeln Webseiten hauptsächlich in HTML 5, Cascading Style
Sheets (CSS), JavaScript,
während Webdeveloper
(= Webentwickler) und professionelle Softwareentwickler
(= Programmierer) u.a. auch in der Programmiersprache
„Python“
programmieren, die es zwar in der Version 1.0 schon seit 1994 gibt, aber erst
ab der Version 3.0 seit 2008 in Mode gekommen ist. So wurde beispielsweise
der Google Assistant
als Google Android App in Python programmiert. Obwohl die Entwicklungsumgebung des „Calliope mini“
von Microsoft programmiert wurde, gibt es diese noch nicht für die „Python“-Programmiersprache. Bei dem EC-Karten großen „micro:bit“-Rechner, der
u.a von der BBC London für Grundschulen entwickelt und herausgegeben wurde,
gibt es die ansonsten gleiche Entwicklungsumgebung von Microsoft auch für die
höhere Programmiersprache „Python“: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
programm_01-01.py) Besonders interessant ist
an dem obenstehenden „Python“-Programm
„programm_01_01_microbit.py“ ·
die Definition der Funktion „on_forever()“, ·
des
Statements „basic.forever(on_forever)“ aufgerufen und ausgeführt
wird. Das Statement “pass” in der Funktion „on_forever()“
bedeutet, dass hier der Programmkode der Funktion endet. Ferner ist interessant,
dass der Funktion „on_forever()“
mit dem Funktionsaufruf „basic.forever(on_forever)“ keine Parameter mit übergeben werden! - Wir fahren fort mit dem „Blitz & Donner“-Programm
bei dem es darum geht, dass wir mittels des Laufzeitunterschieds ∆t =
4 s zwischen Blitz und Donner die Entfernung des Gewitters zu unserem
Standort hin berechnen: sEntfernung = vDonner
/ tDonner → ∆sEntfernung=
vDonner / ∆t = 340 m/s * 4 s = 1.360 m ≈ 1,4 km (Zum
Vergrößern bitte auf das Bild klicken!) Zu diesem Zweck deklarieren
wir erstmalig eine Variable „time_sekunden“,
die wir dann mit dem Wert „0“ initialisieren,
d.h. der wir den Wert „0“
wie folgt zuweisen: Statement setze time_sekunden auf 0 Anschließend fordern wir den
Anwender durch mehrmaliges Drücken der Taste „A“ auf, die zwischen Blitz
und Donner verstrichene Zeit ∆t = 4 s einzutasten: Statement zeige Text „Taste mit A Sekunden ein!“ Dabei wird dann später bei
jedem Tastendruck auf die Taste „A“
der entsprechende Wert um +1 erhöht und im Display angezeigt: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
mini-programm_01_02.hex) Dabei nennt man das Erhöhen des Wertes der Variablen „time-sekunden“ um
+1 inkrementieren und das Verringern
des Wertes der Variablen „time-sekunden“ um
-1 dekrementieren (siehe Wikipedia): Statement setze time_sekunden auf time_sekunden + 1 Mit dem Statement zeige Text verbinde „ “ time_sekunden wird dann der um +1 erhöhte
Wert der Variablen „time_sekunden“ im
Display angezeigt. Dabei gilt es zu beachten,
dass es sich bei der Variablen „time_sekunden“
wegen der anfänglichen Zuweisung mit dem Wert
„0“
und der späteren Inkrementierung (= Erhöhung um +1) um eine ganzzahlige
Variable vom Typ „integer“ handelt. Ferner muss man wissen,
dass es sich bei der Textanzeige
um die Anzeige im Display von alphanumerischen Werten im Sinne von Ziffern,
einzelnen Buchstaben, engl. „characters“ oder einer Zeichenkette,
engl. „string“, handelt. Dabei gilt es zu beachten,
dass sich Ziffern nur anzeigen lassen und zwar im Sinne einzelner
Symbole mit denen man nicht rechnen kann! Deswegen handelt es sich bei
den Zahlen auf dem Zifferblatt
einer Uhr um Ziffern und eben nicht um Zahlen, weil Zahlen
dem Rechnen und Berechnen vorbehalten
sind! Demzufolge muss der
jeweilige Zahlenwert der numerischen „Integer“-Variablen time_sekunden bereits vor der Anzeige im Display in
einen sogenannten „String“, d.h. in eine alphanumerische Zeichenkette umgewandelt
werden! Das ist dann auch der Grund
dafür, dass das Statement zeige Text verbinde „ “ time_sekunden etwas komplizierter aussieht! (Bild
vergrößern: auf Bild klicken! Webverzeichnis
mini-programm_01_02.js) Im obenstehenden „JavaScript“-Programm „mini-programm_01_02.js“
ist beispielsweise interessant, wie die Umwandlung
des Inhalts der numerischen Variable
„time_sekunden“
vom Typ „integer“
bei der Anzeige im Display erfolgt: Statement
basic.showString(““ +
time_sekunden) Nämlich durch die vorangestellten
““ wird die Displayanzeige wenn auch als leerer
Textstring eingeleitet,
sodass die Umwandlung der
nachfolgenden numerischen Variable
„time_sekunden“
vom Typ „integer“ in
einen Textstring,
d.h. Zeichenkette, quasi automatisch erfolgt. Als nächstes wechseln wir
zum „micro:bit“-Rechner
mit dem „Block“-Befehl-Programm „microbit-programm_01_02.hex“: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
microbit-programm_01_02.hex) Dabei fällt im Programmblock „wenn Knopf A gedrückt“
auf, dass bei der Anzeige im Display praktisch keine Umwandlung des numerischen Inhalts der Variable „time_sekunden“
vom Type „integer“,
d.h. ganzzahlig, in einen entsprechenden Textstring, d.h. Zeichenkette,
erfolgt. Jedenfalls wird das nach außen nicht sichbar offeriert! Interessant ist auch das „Python“-Programm „microbit-programm_01_02.py“
beim „micro:bit“-Rechner
bei dem der numerische Inhalt die numerischen Variable „time_sekunden“ explizit mittels des Statements str(time_sekunden) innerhalb des Statements
basic.show_string(""
+ str(time_sekunden)) in einen Textstring
bzw. eine Zeichenkette umgewandelt wird: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
microbit-programm_01_02.py) In diesem Zusammenhang kann
man im obenstehenden Statement
basic.show_string("" + str(time_sekunden)) auch die beiden Anführungszeichen “”, die für einen Leerstring
stehen, wie folgt weglassen: Statement
basic.show_string(str(time_sekunden)) Wir bleiben auf dem “micro:bit”-Rechner
mit Python
und programmieren als nächstes die Berechnung der Entfernung zwischen Blitz
und Donner: Statement entfernung = time_sekunden *
340 Wie man sieht, wird die
Entfernung mittels der Schallgeschwindigkeit von 340 m/s
berechnet: sEntfernung = vDonner
/ tDonner → ∆sEntfernung=
vDonner / ∆t = 340 m/s * 4 s = 1.360 m ≈ 1,4 km Das Berechnen der
Entfernung soll aber erst dann erfolgen, wenn der Anwender zuvor mittels des Tasteres „A“ die zwischen Blitz und Donner verstrichene Zeit ∆t =
4 s eingetastet hat! Demzufolge soll das obenstehende Statement mit der
Entfernungsberechnung erst nach dem Tastendruck auf die Taste „B“ erfolgen, sodass wir jetzt
die Abfrage des Tasters „B“
programmieren müssen. Zu diesem Zweck kopieren
wir den Programmblock „def on_button_pressed_a()“
des Tasters „A“
nebst Funktionsaufruf „input.on_button_pressed(…)“: def on_button_pressed_a(): global time_sekunden time_sekunden = time_sekunden + 1 basic.show_string(str(time_sekunden)) input.on_button_pressed(Button.A, on_button_pressed_a) und benennen diese nach Taster „B“ um, entfernen die
Statements des Tasters „A“
und fügen stattdessen das Statement
zum Berechnen
der Entfernung wie folgt ein: def on_button_pressed_b(): entfernung =
time_sekunden * 340 basic.showString(str(entfernung)) input.on_button_pressed(Button.B, on_button_pressed_b) Als nächstes stellt sich
die Frage, wie wir den erweiterten Quellkode
in den (Programmier-) Editor des „micro:bit“-Rechners übertragen
bekommen. Das aber geht einfacher als erwartet, nämlich mittels „Copy &
Paste“: (Bild
vergrößern: auf Bild klicken! Webverzeichnis
microbit-programm_01_03.py) Als nächstes betreiben wir
noch etwas (Programm-) Kosmetik,
indem wir das Programm noch anwenderfreudlicher, d.h. mitteilsamer
programmieren, damit der Anwender
besser weiß, warum und weshalb er etwas eintasten (im
sprichtwörtlichen Sinne mittels Taster
„A“ und „B“) soll: (Bild
vergrößern: auf Bild klicken! Quellkode im Browser: microbit-programm_01_04.py) Selbstverständlich geht „Copy &
Paste“ nicht nur in eine Richtung, sondern auch in die
andere, d.h. hin zu unserem (Text-/Programmier-) Editor „Notepad
++“ (siehe obenstehendes Bild mit dem „Python“-Quellkode des „micro:bit“-Rechners).
- Mittels „Copy & Paste“
sind wir nun auch in der Lage, den Quellkode
eines „JavaScript“-
oder „Python“-Programms in
den „Notepad++“-Editor zu
kopieren und von dort aus auf den heimischen Rechner zu speichern! Mittels „Copy & Paste“
sind wir ferner in der Lage, den Quellkode eines „JavaScript“-Programms
vom „micro:bit“-Editor in
den „Calliope
mini“-Editor zu
kopieren und von dort aus zu starten. Dabei sollten wir uns aber
daran erinnern, dass sich zwar „Python“-Programme
als Quellkode in den „Calliope mini“-Editor
kopieren, aber eben nicht ausführen bzw. simulieren lassen. Und das,
obwohl beide Rechner über denselben Prozessor vom Typ „AMD Cortex M0“
verfügen! Aber bei dem Simulationsprogramm geht es eben nicht
um die Hardware als solche,
sondern um die Software, d.h. die Simulation
für „Block“- und „JavaScript“-Programmen,
jedenfalls, wenn es um den „Calliope mini“-Rechner
geht. Beide Simulationsprogramme,
d.h. das vom „micro:bit“-Rechner
und das vom „Calliope mini“-Rechner
verfügen quasi über eine gemeinsame, d.h. kompatible Schnittstelle zur „JavaScript“-Programmierung.
Einer der Gründe dafür ist der, dass beide Simulationsprogramme nebst (Programmier-) Editoren von Microsoft entwickelt wurden! Da es sich bei dem „Calliope mini“-Rechner
aber über eine in jüngster Zeit neu entwickelte Hardware handelt, wurde die „Block“-Programm-Programmierung
von Anfang an überarbeitet und verbessert, sodass die „Block“-Programme
des „Calliope
mini“-Rechners
leider nicht zu 100 % kompatibel sind! - „Python“-Programm vom „micro:bit“ in
„Block“-Programm des „Calliope mini“ konvertieren Wir wissen ja inzwischen,
dass man mit dem „Calliope mini“-Rechner direkt
in der Online-Simulation leider keine
„Python“-Programme
entwickeln kann, während das hingegen auf dem älteren „micro:bit“-Rechner
nebst Online-Simulation sehr
wohl möglich ist (siehe oben). Und genau das lässt sich
entsprechend ausnutzen, indem wir das „Python“-Programm „microbit-programm_01_04.py“ in
den „micro:bit“-Rechner
laden bzw. importieren: (Zum
Vergrößern bitte auf das Bild klicken!) Wie man im nachfolgenden
Screenshot sieht, lässt sich das „Python“-Programm „microbit-programm_01_04.py“ in
der online „micro:bit“-Simulation
durch einfachen Mausklick auf <JavaScript> konvertieren, dann
als Ganzes markieren und mittels „Copy & Paste“ in
die online „Calliope mini“-Simulation
einfügen, die aber zuvor in den „JavaScript“-Modus umgeschaltet
werden muss: (Zum
Vergrößern bitte auf das Bild klicken!) Bevor man aber das neue,
d.h. konvertierte „JavaScript“-Programm „mini-programm_01_04.js“
durch Mausklick auf <Blöcke> umwandelt, sollte man es zuvor getestet,
d.h. testweise ausgeführt/gestartet haben: (Zum
Vergrößern bitte auf das Bild klicken!) Wie man sieht, klappt das Konvertieren
eines „Python“-Programms
über den Zwischenschritt von „JavaScript“ hin zum „Block“-Programm bzw. dem „Block“-Quellkode
problemlos! Vorausgesetzt natürlich, dass das ursprüngliche „Python“-Programm
selbst fehlerfrei war und sich in der Simulation des „mircr:bit“-Rechners
fehlerfrei ausführen ließ! |
|
||||||||||||
|
[ Easy Elektro Start ] [ Seitenanfang ] [zurück ] |
|