➨Funktionen werden normalerweise neben dem setup- und dem loop-Teil in einer einzigen Datei abgespeichert. Häufig verwendete Programmteile können in einer separaten Datei ausgelagert werden.
Beispiel:
Im Programm ➨Einmaleinsreihen soll die Funktion ReiheAnzeigen ausgelagert werden :
Erstelle mit einem beliebigen Texteditor eine Datei ReiheAnzeigen.h.
void ReiheAnzeigen(long Reihe)
{
Serial.print("Einmaleins der ");
Serial.println(Reihe);
for (int zaehler = 1; zaehler <= 10; zaehler++)
{
Serial.print(zaehler);
Serial.print(" * ");
Serial.print(Reihe);
Serial.print(" = ");
Serial.print(zaehler * Reihe);
Serial.print("\n");
}
Serial.print("-------------------------------\n");
}
Speichere diese Datei im gleichen Ordner, in dem sich auch die .ino Datei befindet.
Das eigentliche Programm:
// Datei ReiheAnzeigen.h einbinden
# include "ReiheAnzeigen.h"
String Eingabe = "";
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
Serial.println("Einmaleins: Gib eine Zahl ein!");
Serial.println("------------------------------");
}
void loop()
{
while (Serial.available() > 0)
{
// Eingabe im Seriellen Monitor lesen
char Zahl = Serial.read();
// auf Zahl prüfen
if (isDigit(Zahl)) Eingabe += Zahl;
}
// Enter/Senden gedrückt
if (Zahl == '\n')
{
// eingegebene Zahl zu int umwandeln
long Reihe = Eingabe.toInt();
// Funktion ReiheAnzeigen aus ReiheAnzeigen.h aufrufen
ReiheAnzeigen(Reihe);
Eingabe = "";
}
}
}
Weiteres Beispiel:
Im Programm ➨Lottozahlen - Anzeige im Seriellen Monitor sollen die Funktionen ausgelagert werden:
Erstelle mit einem beliebigen Texteditor eine Datei Ziehung.h.
int Ziehung(int LottoZahl[], int Anzahl, int Minimum, int Maximum)
{
for (int i = 0; i < Anzahl; i++)
{
/*
die Lottozahl gilt solange als bereits gezogen
bis in der for-Schleife nachgewiesen wird, dass sie neu ist
BereitsGezogen den Wert false hat
*/
bool BereitsGezogen = true;
while (BereitsGezogen)
{
// Zahl ziehen
LottoZahl[i] = random(Minimum, Maximum);
BereitsGezogen = false;
/*
Zufallszahl mit den bereits gezogenen Zahlen vergleichen
i wird in der ersten for-Schleife hochgezählt
alle bisherigen Zahlen (ii) werden mit den bisher gezogenen
verglichen (ii < i)
ist sie identisch, erhält BereitsGezogen den Wert true
es wird erneut eine Zufallszahl bestimmt
wenn die Zahl neu ist, (BereitsGezogen hat noch den Wert false)
wird die while-Schleife verlassen und die nächste Zahl gezogen
*/
for (int ii = 0; ii < i; ii++)
{
if (LottoZahl[i] == LottoZahl[ii]) BereitsGezogen = true;
}
}
}
return LottoZahl[Anzahl];
}
void ZahlenSortieren(int Zahlen[], int Groesse)
{
// unsortierten Bereich des Arrays durchlaufen
for (int i = 0; i < (Groesse - 1); i++)
{
// bei jedem Durchlauf wird das jeweils letzte Element weggelassen
for (int ii = 0; ii < (Groesse - (i + 1)); ii++)
{
/*
wenn die aktuelle Zahl größer als die nachfolgende Zahl ist
-> aktuelle Zahl temporär speichern
-> Zahlen vertauschen
-> temporäre Zahl der nachfolgenden Zahl zuweisen
*/
if (Zahlen[ii] > Zahlen[ii + 1])
{
int zwischengespeicherteZahl = Zahlen[ii];
Zahlen[ii] = Zahlen[ii + 1];
Zahlen[ii + 1] = zwischengespeicherteZahl;
}
}
}
}
void LottzahlenAnzeigen(int Treffer, String GespielteZahlen, String GezogeneZahlen, String AnzahlTreffer, int Durchlauf)
{
// Anzeige Serieller Monitor
Serial.println("Ziehung " + String(Durchlauf));
Serial.println("-----------------------------");
Serial.println("Gespielte Zahlen");
Serial.println("-----------------------------");
Serial.println(GespielteZahlen);
Serial.println("-----------------------------");
// Anzeige der Zahlen Serieller Monitor
Serial.println("Gezogene Zahlen");
Serial.println("-----------------------------");
Serial.println(GezogeneZahlen);
Serial.println("-----------------------------");
if (Treffer == 0) Serial.println("keine richtige Zahl!");
else if (Treffer == 1) Serial.println("Treffer: " + AnzahlTreffer + "(" + String(Treffer) + " richtige Zahl)");
else Serial.println("Treffer: " + AnzahlTreffer + "(" + String(Treffer) + " richtige Zahlen)");
Serial.println("-----------------------------");
}
Speichere diese Datei im gleichen Ordner, in dem sich auch die .ino Datei befindet.
Das eigentliche Programm:
// Ziehung.h einbinden
# include "Ziehung.h"
// Anzahl der zu ziehenden Zahlen
const int Anzahl = 6;
int LottoZahl[Anzahl];
// Array für die angekreuzten Zahlen
int SpielZahl[Anzahl];
// Minimum/Maximum der Zufallszahlen
int Minimum = 1;
int Maximum = 49;
int Durchlauf = 0;
void setup()
{
Serial.begin(9600);
// Zufallsgenerator starten
randomSeed(analogRead(A0));
// auf serielle Verbindung warten
while (!Serial) {;}
Serial.println("z = N\u00e4chste Ziehung");
}
void loop()
{
String GespielteZahlen = "";
String GezogeneZahlen = "";
String Eingabe = "";
String AnzahlTreffer = "";
int Treffer = 0;
// auf serielle Eingabe warten
while (Serial.available() > 0)
{
// solange lesen, bis return \n = return eingegeben wurde
Eingabe = Serial.readStringUntil('\n');
}
// wenn "z" eingegeben wurde
if (Eingabe == "z")
{
// Ziehung der "angekreuzten" Zahlen
Ziehung(LottoZahl, Anzahl, Minimum, Maximum);
/*
Array Sortieren mit ArduinoSort
sortArray(NameArray, AnzahlElemente)
sortArrayReverse(NameArray, AnzahlElemente)
*/
ZahlenSortieren(LottoZahl, 6);
// String GespielteZahlen aus den Elementen des Arrays LottoZahl
// zusammensetzen
for (int i = 0; i < Anzahl; i++)
{
GespielteZahlen = GespielteZahlen + LottoZahl[i] + " ";
SpielZahl[i] = LottoZahl[i];
}
// Ziehung der Lottozahlen
Ziehung(LottoZahl, Anzahl, Minimum, Maximum);
ZahlenSortieren(LottoZahl, 6);
// Vergleichen der Elemente der Arrays SpielZahl und LottoZahl
for (int i = 0; i < Anzahl; i++)
{
for (int ii = 0; ii < Anzahl; ii++)
{
// Übereinstimmung gefunden -> Treffer um 1 erhöhen
if (SpielZahl[i] == LottoZahl[ii])
{
AnzahlTreffer = AnzahlTreffer + SpielZahl[i] + " ";
Treffer ++;
}
}
}
// String GezogeneZahlen aus den Elementen des Arrays LottoZahl
// zusammensetzen
for (int i = 0; i < Anzahl; i++)
{
GezogeneZahlen = GezogeneZahlen + LottoZahl[i] + " ";
}
Durchlauf ++;
LottzahlenAnzeigen(Treffer, GespielteZahlen, GezogeneZahlen, AnzahlTreffer, Durchlauf);
}
}
Letzte Aktualisierung: