Millis() in Switch Case Problem

Hallo,

Wegen struct. Fast richtig erfasst. :slight_smile: Kann auch sein du meinst das und hast dich nur ungünstig ausgedrückt. Passiert mir auch bei neuen Dingen. Ich präzisiere nochmal etwas. Du kennst die definierten Datentypen byte, int, long usw. Da passen genau ein, zwei bzw. 4 Bytes rein. Mit struct baust du dir deinen eigenen Datentyp.
Der Datentyp heißt nun nicht byte, int oder long sondern t_setup. Kannste auch anders benennen. Aber das ist dein neuer Datentyp. Und genau der Datentyp nimmt in der angegebenen Reihenfolge, zwei Bytes, ein bool, ein unsigned int und ein unsigned long auf. Der Datentyp t_setup ist demnach 9 Byte groß.

Mit einem Datentyp alleine kann man nichts anfangen. Demzufolge muss man damit noch Variablen deklarieren bzw. initialisieren. Diese Variable heißt hier KOMBI (soll für Kombination stehen, kannste auch umbenennen) und ist ein Array. Array deshalb weil wir bzw. du mehrere benötigen und nicht jedesmal einen neuen Variablennamen erstellen möchten, was den Zugriff wieder erschweren würde. Und der reine Indexzugriff so nicht möglich wäre mit einem Durchlauf.

Also statt

byte var[] = { ... };
steht hier
t_setup KOMBI[] = { ... };

Für eine einzige Variable mit dem eigenen Datentyp würde

t_setup KOMBI;

genügen. Das wäre eine reine Deklaration
Der Zugriff darauf bzw. Initialisierung wäre dann

KOMBI.pin_S = 2;
KOMBI.state = false;

Mit dem hier

t_setup KOMBI[] = {
 {2, 7, 2000},  // Sensorpin, Relaispin, Delay
 {3, 8, 3000},
 {4, 9, 4000},

erstellen wir praktisch 3 Variablen mit dem Datentyp t_setup gebunden in einem Array. Der Zugriff erfolgt nun nicht mit 3 verschiedenen Variablennamen sondern mit einem und der Indexnummer. Was wie du gesehen hast nur Vorteile bringt. Wenn dir jetzt auffällt das pro Index nur 3 Werte von den 5 initialisiert wurden, dann ist das erstmal richtig erkannt. Die "fehlenden" werden mittels Konstruktur mit einem Defaultwert initialisiert, false und 0.