Chandler_B:
So hab habe ich das gelernt.
Im Prinzip funktioniert das so.
Aber ich würde das nicht ganz so machen, weil es wegen des delay()-Aufrufs weder besonders effektiv noch wegen des Mixens von Verarbeitung und Ausgabe wirklich strukturiert ist und es bei Erweitungen ziemlich unübersichtlich werden kann.
Wenn es in einem Mikrocontrontrollerprogramm sowohl "viele Eingaben" von Buttons und anderen Eingabegerätschaften gibt und ebenso "viele Verarbeitungsmöglichkeiten" und "viele Ausgaben" produziert werden sollen, dann bietet es sich an, die Funktionsbereiche Eingabe, Verarbeitung und Ausgabe zuerst mal komplett voneinander zu trennen.
Hast Du schon mal was vom EVA-Prinzip (Eingabe, Verarbeitung, Ausgabe) oder vom IPO principle (Input, Processing, Output) bei der Programmierung gehört?
Chandler_B:
Im prinzip machen die alle das selbe, nur mit anderen Parametern.
Gerade solche Dinge, die "fast alle dasselbe" machen, sind in einem Programm immer besonders einfach zu erschlagen, durch Wahl geeigneter Datenstrukturen (z.B. "array" oder "array of struct"), und Algorithmen (z.B. "for-Schleife").
Also grobe Gliederung der loop-Funktion:
void loop()
{
eingabe();
verarbeitung();
ausgabe();
}
oder wenn Du mehr auf Neudeutsch stehst:
void loop()
{
input();
processing();
output();
}
und zum Abfragen der Buttons eine "eingabe()" Funktion schreiben, die in einer "for-Schleife" alle fünf Buttons nacheinander abfragt und die Ergebnisse der Buttonabfrage dann bereitstellt.
Kommt so eine Art der Gliederung für Dein Programm in Frage, oder findest Du es völlig abwegig, dass Du über die Buttons etwas eingibst, der Controller die erfolgten Eingaben verarbeitet, und am Ende irgendeine Art Ausgabe erfolgt (z.B. LEDs oder andere Geräte an und aus geschaltet oder sogar irgendwo Texte angezeigt werden)?