Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
skript:klassen-arduino [2018/10/26 23:06] d.golovko [1. Deklaration] |
skript:klassen-arduino [2021/06/11 11:28] (aktuell) d.golovko |
||
---|---|---|---|
Zeile 49: | Zeile 49: | ||
// Konstruktor; noteList: Notenabfolge, arraySize: Laenge des Noten-Arrays, pin: Piezo-Pin | // Konstruktor; noteList: Notenabfolge, arraySize: Laenge des Noten-Arrays, pin: Piezo-Pin | ||
Song::Song(int noteList[], int arraySize, int pinNumber) { | Song::Song(int noteList[], int arraySize, int pinNumber) { | ||
- | for (int i = 0; i < arraySize; i++) { | + | this->arraySize = arraySize; |
- | this->notes[i] = noteList[i]; | + | this->notes = noteList; |
- | } | + | |
this->pin = pinNumber; | this->pin = pinNumber; | ||
} | } | ||
+ | |||
//[...] | //[...] | ||
</file> | </file> | ||
- | |||
- | Dementsprechend müssen wir die Konstruktordeklaration auch in Zeile 3 der Header-Datei ändern: \\ | ||
- | ''Song(int noteList[], int arraySize, int pinNumber);'' | ||
Genauso wie in Java wird ''this'' benutzt, um auf die Instanz der Klasse (d.h. auf die gerade erzeugte Objekt vom Typ ''Song'') zu zeigen. Achtung: in C++ wird statt Punkt ein Pfeil verwendet. | Genauso wie in Java wird ''this'' benutzt, um auf die Instanz der Klasse (d.h. auf die gerade erzeugte Objekt vom Typ ''Song'') zu zeigen. Achtung: in C++ wird statt Punkt ein Pfeil verwendet. | ||
Zeile 66: | Zeile 63: | ||
#include "Arduino.h" | #include "Arduino.h" | ||
//[...] | //[...] | ||
+ | // Spielt die Melodie ab | ||
void Song::play() { | void Song::play() { | ||
- | for (int i = 0; i < sizeof(notes) / sizeof(notes[0]); i++) { | + | for (int i = 0; i < arraySize ; i++) { |
- | tone(pin, notes[i], 500); // jede Note spielt 0,5 Sekunde | + | tone(pin, notes[i]); |
+ | delay(500); | ||
} | } | ||
+ | noTone(pin); | ||
} | } | ||
//[...] | //[...] | ||
Zeile 81: | Zeile 81: | ||
// Konstruktor; noteList: Notenabfolge, arraySize: Laenge des Noten-Arrays, pin: Piezo-Pin | // Konstruktor; noteList: Notenabfolge, arraySize: Laenge des Noten-Arrays, pin: Piezo-Pin | ||
Song::Song(int noteList[], int arraySize, int pinNumber) { | Song::Song(int noteList[], int arraySize, int pinNumber) { | ||
- | for (int i = 0; i < arraySize; i++) { | + | this->arraySize = arraySize; |
- | this->notes[i] = noteList[i]; | + | this->notes = noteList; |
- | } | + | |
this->pin = pinNumber; | this->pin = pinNumber; | ||
} | } | ||
Zeile 89: | Zeile 88: | ||
// Spielt die Melodie ab | // Spielt die Melodie ab | ||
void Song::play() { | void Song::play() { | ||
- | for (int i = 0; i < sizeof(notes) / sizeof(notes[0]); i++) { | + | for (int i = 0; i < arraySize ; i++) { |
- | tone(pin, notes[i], 500); // jede Note spielt 0,5 Sekunde | + | tone(pin, notes[i]); |
+ | delay(500); | ||
} | } | ||
+ | noTone(pin); | ||
} | } | ||
</file> | </file> | ||
Zeile 129: | Zeile 130: | ||
</file> | </file> | ||
- | Der Konstruktor hier wird aufgerufen, bevor ''setup()'' anfängt. Das kann ungünstig sein im Fall, wenn der Konstruktor Parameter hat, deren Werte am Anfang des Programms noch nicht bekannt sind (z.B. wenn sie von Sensormessungen abhängen, die in ''setup()'' gemacht werden). Anders als in Java, können wir nicht einfach ''Song mySong;'' in Zeile 3 schreiben. Das daran, dass ''mySong'' eine Referenz ist, und Referenzen dürfen nicht gleich NULL sein. | + | Der Konstruktor hier wird aufgerufen, bevor ''setup()'' anfängt. Das kann ungünstig sein im Fall, wenn der Konstruktor Parameter hat, deren Werte am Anfang des Programms noch nicht bekannt sind (z.B. wenn sie von Sensormessungen abhängen, die in ''setup()'' gemacht werden). Anders als in Java, können wir nicht einfach ''Song mySong;'' in Zeile 3 schreiben. Das liegt daran, dass ''mySong'' eine Referenz ist, und Referenzen dürfen nicht gleich NULL sein. |
<note> | <note> |