ich bin derzeit am herumprobieren, um das Programmieren der Arduinos zu lernen. Ich habe ein kleines Programm geschrieben, wenn dieses zu Ende ist, soll der Arduino ziemlich viele der Daten ausgeben, damit ich diese überprüfen kann. Das Programm läuft quasi die ganze Zeit aber sollte es einmal unplanmäßig beendet sein (z.B. ein Sensor löst aus), sollen alle relevanten Variablen ausgegeben werden. Ich möchte hier nicht das gesamte Programm posten, habe deshalb mal ein kleines Minibeispiel fertig gemacht. Ich habe Variablen der Typen int und double. Diese sollen nun aus der loop-Funktion heraus in die Funktion "ausgabefunktion" übergeben werden, klar hier könnte ich diese einfach einfügen im Sinne: ausgabefunktion(a, b, c, d....); allerdings ist dies sicher nicht die sauberste Lösung, da sehr viele Variablen überreicht werden müssten... Ich dachte mir evtl die Daten in einem Array unterzubringen mit Referenz auf die einzelnen Variablen, um Ressourcenschohnend zu arbeiten?!
Evtl. habt ihr ja eine Lösung für mir parat, vielen Dank im Voraus.
Hier der Code:
void ausgabefunktion()
{
//Hier wird nun der Printbefehl eingeführt
//um alle Daten auszugeben
}
void setup() {
}
void loop() {
static bool programmende = false;
int a = random(0,100);
int b = random(0,100);
int c = random(0,100);
int d = random(0,100);
double e = random(0,100);
int f = random(0,100);
double g = random(0,100);
int h = random(0,100);
if(programmende = true)
{
ausgabefunktion();
}
}
Entweder übergibst Du alle Werte der Funktion (Übergabewerte in Klammern)
oder benutzt globale Variablen die Außerhalb jeder Funktion deklariert werden müssen.
Danke für die schnellen Antworten, ich versuche eigentlich keine globalen Variablen zu verwenden, die scheinen ja recht verpönt zu sein... Ggf. noch eine alternative Lösung?
Mirko79:
Danke für die schnellen Antworten, ich versuche eigentlich keine globalen Variablen zu verwenden, die scheinen ja recht verpönt zu sein... Ggf. noch eine alternative Lösung?
In diesem Fall wären globale Variablen die einfachste Lösung. Ich wüsste auch nicht, wieso globale Variablen im Zusammenhang mit Arduino verpönt sein sollten. Das Blöde an lokalen Variablen ist, dass sie jedesmal angelegt und zum Ende der Funktion loop() wieder vernichtet werden. Mit globalen Variablen sparst Du Prozessorzeit, wobei es hier vermutlich nur um Nanosekunden geht.
Du könntest natürlich auch ein struct definieren, davon eine lokale Variable anlegen und einen Zeiger darauf an die Funktion übergeben.
Es gibt viele Möglichkeiten.