Aufzählungen
Aufzählungen braucht man immer dann, wenn man es mit einer endlichen Menge an Werten zu tun hat. Man könnte das ganze ja einfach durchnummerieren, aber es ist viel schöner und später auch deutlich lesbarer, wenn man den Werten verünftige Namen geben kann. Beispiel wir brauchen etwas, was die Farbe representiert. z.B. bei einer Ampel. Da haben wir rot, rotgeln, gelb, grün. Eine Aufzählung sehe dann so aus.
enum AMPEL { ROT, GELB, ROTGELB, GRUEN }; ... AMPEL ampel = ROT; ... if (ampel == ROT) { ... }
Man kann also eine Variablen direkt den Namen zuweisen. Das macht den Code deutlich lesbarer. Leider sind jetzt Operation wie + oder - nicht mehr so ohne weiteres erlaubt. Vergleiche aber schon, so ist z.B. ROT < GELB < ROTGELB… Auch kann man enumerations schön in Switch-Anweisungen verwenden:
switch (ampel) { case ROT: ampel = GELB; break; case GELB: ... default: ampel = ROT; }
Hintergrund: enums werden intern als integers dargestellt. Über Umwege kann man dann doch damit rechnen. Solange man weiß, was man tut… geht auch sowas:
int ampelInt = ampel; ampelInt = ampelInt + 1; ampel = (AMPEL) ampelInt;
enum als Parameter
Will man enums als Parameter eigener Funktionen verwenden, geht das so ohne weiteres erstmal nicht. Der Compiler meckert herum, daß er den Typ nicht kenne. Das liegt daran, daß die IDE vom Arduino eine c++ aufbaut, wo die eigenen Funktionen als Header direkt nach den includes
eingefügt werden. Leider auch vor der eigenen Definition.
Abhilfe schafft da, einen eigene Header-Datei zu erzeugen. Oben rechts ist ein nach unten stehender Pfeil. Dort kann man ein neues Tab erzeugen. Das nennen wir dann einfach <Name>.h. In diese Datei kommen dann die Definitionen. In der Hauptdatei binden wir dann per include
das ganze ein.
Beispiel: Ampel