Projekt: Das personenerkennende Haus Universität Potsdam Grundlagen der Programmiersprache Grundstruktur eines Programmes Alle Programme sind wie folgt aufgebaut: 1. Einbindung von Bibliotheken, falls notwendig 2. Deklaration von Variablen 3. Deklaration von Funktionen und Methoden 4. Setup­Methode 5. Loop­Methode Wir werden nun auf die einzelnen Punkte näher eingehen. Ein einfaches Programm sieht folgendermaßen aus: int ledPin = 3; void setup(){ pinMode(ledPin, OUTPUT); } void loop(){ digitalWrite(ledPin, HIGH); delay(2000); digitalWrite(ledPin, LOW); delay(2000); } Was tut dieses Programm? Deklarationsteil – Hier legen wir fest, an welchen Pins unsere Ein­ und Ausgänge anliegen. Dies wird immer in einer Integer­Variablen gespeichert. In unserem Fall haben wir eine LED, die an Pin 3 angeschlossen ist. Setup­Methode – Diese Methode wird stets am Anfang einmal durchlaufen. Hier legen wir fest, welche Pins Input und welche Output sind. Im obigen Fall haben wir eine LED. Da LEDs keine Daten einlesen, sondern ausgeben, sind sie Output. Loop­Methode – Diese Methode wird fortlaufend wiederholt. Hier beginnt der „eigentliche Programmcode“, in dem steht, was das Arduino­Board fortlaufend wiederholen soll. In unserem Programm wird unsere LED eingeschaltet (digitalWrite(ledPin, HIGH);), dann wird zwei Sekunden gewartet (delay(2000);) bis die LED wieder ausgeschaltet wird (digitalWrite(ledPin, LOW);). Daraufhin wird wieder zwei Sekunden gewartet (delay(2000);). Aufgabe 1: Schreibe ein Programm, das zwei verschiedene Lampen abwechselnd zum Leuchten bringt. Unterschied zwischen digital und analog Digitale Kanäle kennen nur zwei Zustände. So ist eine Lampe, die entweder an oder aus sein kann, ein digitaler Ausgang. Ein Button, der entweder gedrückt oder nicht gedrückt sein kann, ist ein digitaler Eingang. Analoge Kanäle hingegen kennen mehr Zustände. So sind Lichtsensoren analoge Eingänge, da sie nicht nur sagen, ob es hell ist oder nicht, sondern auch wie hell es ist. Wichtige Befehle Befehl Erklärung Beispiel pinMode() Ein digitaler Kanal, der durch die Nummer pinMode(3, OUTPUT); seines Pins gekennzeichnet ist, wird pinMode(7, INPUT); entweder als Eingang (INPUT) oder als Ausgang (OUTPUT) deklariert. digitalWrite() Ein zuvor als OUTPUT deklarierter Pin, der digitalWrite(3, HIGH); durch seine Nummer identifiziert ist, kann digitalWrite(3, LOW); ein (HIGH) oder aus (LOW) geschaltet werden. Dies ist z.B. bei LEDs möglich. digitalRead() Ein zuvor als INPUT deklarierter Pin, der digitalRead(7); durch seine Nummer identifiziert ist, kann ausgelesen werden. Es wird entweder HIGH oder LOW zurückgegeben. Dies ist z.B. bei Buttons möglich. Die Funktion hat den Wert HIGH, wenn der Button gedrückt ist und sonst den Wert LOW. analogWrite() Der Befehl setzt eine Spannung auf einen analogWrite(2, 200); analogen Kanal, der durch seine Pinnummer gekennzeichnet ist. Die Spannung wird als Wert zwischen 0 und 255 übergeben. analogRead() Das anliegende Signal am übergebenen analogRead(1); analogen Input wird eingelesen. Digitale Kanäle können dafür nicht verwendet werden. delay() Der Programmablauf wird um die Delay(1000); übergebene Anzahl von Millisekunden // Verzögerung um verzögert. eine Sekunde Aufgabe 2: Schreibe ein Programm, das einen Lichtsensor als Eingang und eine Lampe als Ausgang hat. Die Lampe soll angehen, wenn der Lichtsensor auf eine schwarze Stelle auf einem Blatt gehalten wird und ausgehen, ist die Stelle weiß. Probiere aus, welcher Wert für die Helligkeit hierbei sinnvoll ist. Speichern von Variablen Es gibt folgende Typen von Variablen: Variablentyp Bedeutung Beispiel int Ganze Zahlen zwischen int x = 10; ­32.768 und 32.767 long Ganze Zahlen zwischen ­2 long y = 20; Milliarden und 2 Milliarden float Fließkommazahlen float f = 2.5; char Zeichen char buchstabe = 'a' array Variablenfeld, in dem int zahlen[5] = {1,2,3,4,5} mehrere Werte eines Typs gespeichert werden können boolean Wahrheitswerte (true oder int wahrheitswert = true; false) Methoden und Funktionen definieren In Funktionen und Methoden kann man Anweisungen gruppieren und seinen Programmcode übersichtlicher machen. Funktionen haben folgende Struktur: <Rückgabetyp> <Funktionsname> (<Parameter, die übergeben werden>){ <Anweisungen> <Rückgabe mithilfe von return> } Ein Beispiel hierfür ist: int plus (int a, int b){ int c = a + b; return c; } Methoden sind wie Funktionen aufgebaut, haben jedoch stehts void als Rückgabetyp und enthalten keine return­Anweisung. Ein Beispiel hierfür ist: int a = 0; void erhoehe (int b){ a = a+b; } Funktionen und Methoden werden im Programmcode mit ihrem Namen und Parametern ausgegeben. Beispiel: plus(4,7); erhoehe(6); Vergleichsoperatoren Symbol Prüfung von... Beispiel == Gleichheit a == b != Ungleichheit a != b < a kleiner b a < b <= a kleiner gleich b a <= b > a größer b a > b >= a größer gleich b a >= b Symbol Bedeutung Beispiel && und (a == b) && (a != c) || oder (a != b) || (b < c) ! nicht !(a < b) Boolsche Operatoren if-Abfragen Die if­Abfrage überprüft, ob die angegebene Bedingung wahr ist. In diesem Fall wird der if­Block, sonst der else­Block abgearbeitet. Beispiel: if (digitalRead(button)==HIGH) { digitalWrite(ledPin,HIGH); } else { digitalWrite(ledPin,LOW); } Schleifen Die Anweisungen in der while­Schleife werden wiederholt, solange die Bedingung wahr ist. Beispiel: while (digitalRead(button)==HIGH) { digitalWrite(ledPin,HIGH); delay(1000); digitalWrite(ledPin,LOW); } Aufgabe 3: Was macht obiges Programmfragment? _________________________________ ________________________________________________________________________________ ________________________________________________________________________________ Ansteuern eines Standard-Servo-Motors #include <Servo.h> //Einbinden der Bibliothek für Servo­Motoren Servo meinMotor; int motorPosition = 0; // Erzeugen eines Servo Objekts // Variable zum Speichern der Position void setup(){ myservo.attach(9); } // Initialisierung des Pins für den Motor void loop(){ while(motorPosition < 180) { meinMotor.write(motorPosition); delay(15); motorPosition = motorPosition + 1; // Diese Schleife wird durchlaufen, solange die Position des Motors unter 180 Grad ist // Der Motor wird bewegt // Es wird 15 Millisekunden gewartet // Die Variable der Motorposition wird um 1 erhöht } } Aufgabe 4: Schreibe ein Programm, das einen Servomotor um 45 Grad dreht und dann eine Sekunde wartet. Dies soll wiederholt werden, bis 180 Grad erreicht sind.