Grundlagen der Programmiersprache

Werbung
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.
Herunterladen