Einführung
Das Konzept der ⇒Funktionen ist ein gutes Werkzeug zur Strukturierung eines Programms. Häufig verwendete Programmteile müssen nur einmal erstellt werden. Sie können dann an beliebiger Stelle im Programm aufgerufen werden. Eine Funktion kann einen Befehl ausführen und eine Variable an die Stelle zurückgeben (return), von der sie aufgerufen wurde oder lediglich eine Folge von Befehlen „abarbeiten“.
Klassen und deren Objekte sind eine Weiterentwicklung der Funktionen.
Variablen besitzen vordefinierte Typen:int, float, char, String
Ein Objekt muss als eine Art „Bauplan“ programmiert werden. In der objektorientierten Programmierung wird dieser Objekttyp Klasse genannt.
Am Beispiel eines Zufallsgenerator soll das Prinzip erklärt werden.
Beispiel Zufallszahlen generieren
class
Zunächst wird die Klasse mit dem Schlüsselwort class eingeleitet. Anschließend werden die notwendigen Variablen für den Zahlenraum definiert, in dem die Zufallszahlen ermittelt werden sollen.
|
1 2 3 4 5 6 |
// Definition der Klasse class Zufall { // Variablen der Klasse int Minimum; int Maximum; |
Konstruktor
Der Konstruktor übermittelt dem später erzeugten Objekt einige Informationen. Der Konstruktor kann auf die Attribute (Variablen) einer Klasse zugreifen.Er wird genauso wie eine normale Methode definiert, jedoch ohne das Schlüsselwort void.
Das Schlüsselwort public teilt der Klasse mit, dass sie auf Methoden und Attribute zugreifen darf.
|
1 2 3 4 5 6 7 |
// Konstruktor public: Zufall(int minimumZahl, int maximumZahl) { Minimum = minimumZahl; Maximum = maximumZahl; } |
Methode
Funktionen innerhalb einer Klasse werden Methoden genannt. Die Methode Zufallszahl() ermittelt eine Zufallszahl.
Die Definition der Klasse wird mit einem ; abgeschlossen.
|
1 2 3 4 5 6 7 |
// Funktion Zufallszahl int Zufallszahl() { int Zahl = random(Minimum, Maximum); return Zahl; } }; |
Objekte erzeugen
Wie an einem Abreißblock können Objekte der Klasse Zufall erzeugt werden. Als Parameter wird dem Objekt die kleinste und die größte Zahl des Zahlenraums übergeben.
|
1 2 3 4 5 6 7 8 9 |
/* neue Objekte der Klasse Zufall erzeugen Parameter: Minimum und Maximum des Zahlenraums der Zufallszahlen random rundet immer nach unten -> Zahlenraum um 1 erhöhen */ Zufall ersteZufallsZahl(1, 7); Zufall zweiteZufallsZahl(10, 21); Zufall dritteZufallsZahl(100, 201); |
Das Programm
Objekt und Methode der Klasse werden durch einen . getrennt.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// Definition der Klasse class Zufall { // Variablen der Klasse int Minimum; int Maximum; // Konstruktor public: Zufall(int minimumZahl, int maximumZahl) { Minimum = minimumZahl; Maximum = maximumZahl; } // Funktion Zufallszahl int Zufallszahl() { int Zahl = random(Minimum, Maximum); return Zahl; } }; /* neue Objekte der Klasse Zufall erzeugen Parameter: Minimum und Maximum des Zahlenraums der Zufallszahlen random rundet immer nach unten -> Zahlenraum um 1 erhöhen */ Zufall ersteZufallsZahl(1, 7); Zufall zweiteZufallsZahl(10, 21); Zufall dritteZufallsZahl(100, 201); void setup() { Serial.begin(9600); } void loop() { Serial.println("Zahl zwischen 1 und 6: " + String(ersteZufallsZahl.Zufallszahl())); Serial.println("Zahl zwischen 10 und 20: " + String(zweiteZufallsZahl.Zufallszahl())); Serial.println("Zahl zwischen 100 und 200: " + String(dritteZufallsZahl.Zufallszahl())); delay(1000); Serial.println("------------------------------"); Serial.println("Neue Zahlen"); Serial.println("------------------------------"); } |

Beispiel Blinklichter
Das Programm im Film
Erläuterung des Programms
Das Programm erstellt eine Klasse Blinklicht, die Methode Blinken sorgt für das Ein- und Ausschalten der LED für variable Zeitspannen.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
// Definition der Klasse class Blinklicht { /* Variablen der Klasse LEDPin = digitaler Pin der LED ZeitEingeschaltet = Einschaltdauer der LED ZeitAusgeschaltet = Ausschaltdauer der LED */ int LEDPin; long ZeitEingeschaltet; long ZeitAusgeschaltet; // Status der LED (ein/aus) int LEDStatus; // gesicherte Zeit, wird für die Ermittlung der Ein- und Ausschaltdauer benötigt unsigned long gesicherteZeit; // Konstruktor public: Blinklicht(int PinMummer, long einGeschaltet, long ausGeschaltet) { LEDPin = PinMummer; pinMode(LEDPin, OUTPUT); ZeitEingeschaltet = einGeschaltet; ZeitAusgeschaltet = ausGeschaltet; LEDStatus = LOW; gesicherteZeit = 0; } void Blinken() { // aktuelle Zeit ermitteln unsigned long aktuelleZeit = millis(); /* wenn die LED eingeschaltet ist und (&&) die Zeitdifferenz zwischen der aktuellen Zeit und der zuvor gesicherten Zeit größer als die Einschaltdauer ist -> LED ausschalten und aktuelle Zeit für den nächsten Durchlauf sichern */ if ((LEDStatus == HIGH) && (aktuelleZeit - gesicherteZeit > ZeitEingeschaltet)) { LEDStatus = LOW; gesicherteZeit = aktuelleZeit; digitalWrite(LEDPin, LEDStatus); } /* wenn die LED ausgeschaltet ist und (&&) die Zeitdifferenz zwischen der aktuellen Zeit und der zuvor gesicherten Zeit größer als die Ausschaltdauer ist -> LED einschalten und aktuelle Zeit für den nächsten Durchlauf sichern */ else if ((LEDStatus == LOW) && (aktuelleZeit - gesicherteZeit > ZeitAusgeschaltet)) { LEDStatus = HIGH; gesicherteZeit = aktuelleZeit; digitalWrite(LEDPin, LEDStatus); } } }; // neue Objekte der Klasse Blinklicht erzeugen, zwei LEDs an Pin 6 und 7 // Parameter: Pin, Dauer eingeschaltet, Dauer ausgeschaltet Blinklicht led1(6 100, 400); Blinklicht led2(7, 350, 350); void setup() { // bleibt leer } // Objekt und Methode durch . getrennt void loop() { led1.Blinken(); led2.Blinken(); } |
Beispiel Blinklicht mit einem Array
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
class Led { int LedPin; bool StatusLED; public: Led(byte PinNummer) { LedPin = PinNummer; StatusLED = false; pinMode(LedPin, OUTPUT); } // Methoden der Klasse void Blinken() { digitalWrite(LedPin, HIGH); delay(200); digitalWrite(LedPin, LOW); delay(200); } void EinAus() { StatusLED = !StatusLED; digitalWrite(LedPin, StatusLED); delay(200); } }; // Array mit den Pins der LEDs Led ListeLED[] = {Led(3), Led(4), Led(5), Led(6), Led(7), Led(8), Led(9)}; void setup() { // bleibt leer } void loop() { // alle LEDs blinken nacheinander for (int i = 0; i < sizeof(ListeLED) / sizeof(ListeLED[0]); i++) { ListeLED[i].Blinken(); } // Lauflicht for (int i = 0; i < sizeof(ListeLED) / sizeof(ListeLED[0]); i++) { ListeLED[i].EinAus(); } } |
Quellen
- https://spacehal.github.io/docs/arduino/objectOriented
- https://wolles-elektronikkiste.de/bibliotheken-und-klassen-erstellen-teil-i
Letzte Aktualisierung: