in einem meiner Projekte verwende ich für die Status mehrerer LEDs jeweils ein Integer, da jede LED nicht nur an oder aus sein kann, sondern auch Status wie z.B. "blinke alle 500ms" annehmen können soll. "blinke alle 500ms" hat dann z.B. den Integerwert "2", während "aus" die 0 und "an" die "1" ist.
Um nun nicht an jeder Stelle meines Codes Integer verwenden zu müssen, habe ich mir die "Konvertierungs-Funktion" e_sw_conv geschrieben. So kann ich für LEDs die lediglich an oder aus sein sollen (also nicht blinken) jeweils nur ein Bit verwenden.
LEDs die jedoch blinken sollen, bekommen diesen "Zustand" als Integer über die Funktion e_sw übermittelt.
In einer (hier nicht aufgeführten Funktion) werden anhand des main_LED_st-Arrays dann die LEDs entsprechend final geschaltet.
/************************************************** Bit-Konverter für e_sw (spaltet ein Byte in einzelne Integer auf) */
void e_sw_conv(byte input) // Es geht hierbei um die mit einer eins gekennzeichneten Bits: 00111110
{
e_sw(bitRead(input, 5), bitRead(input, 4), bitRead(input, 3), bitRead(input, 2), bitRead(input, 1));
}
/************************************************** LED-Beschaltung */
void e_sw(byte e1, byte e2, byte e3, byte e4, byte e5) // Beschaltet mit Integern die einzelnen LEDs
{
main_LED_st[0] = e1;
main_LED_st[1] = e2;
main_LED_st[2] = e3;
main_LED_st[3] = e4;
main_LED_st[4] = e5;
}
Das Ganze funktioniert soweit perfekt, doch sehr gerne würde ich den Code nun noch kompakter schreiben, weiss aber nicht wie.
Vielleicht wisst Ihr ja mehr und könnt mir helfen..
Chris72622:
Das Ganze funktioniert soweit perfekt, doch sehr gerne würde ich den Code nun noch kompakter schreiben, weiss aber nicht wie.
Wenn's funktioniert, dann lass es doch so!
Und wenn Du etwas optimieren möchtest, dann setze nicht alleine bei den Algorithmen an, sondern schon bei den im Programm verwendeten Datenstrukturen!
Datenstrukturen und Algorithmen gehören zusammen.
Wenn Du möglichst einfache Algorithmen haben möchtest, wäre der erste Schritt die Optimierung der Datenstrukturen, mit denen das Programm arbeitet.
Aus Deinen Ausführungen wird mir z.B. überhaupt nicht klar, wozu diese Umwandlung überhaupt gut sein soll: Du kannst doch genauso gut gleich aus der Bitcodierung heraus schalten, völlig ohne vorherige Konvertierung?
jurs:
Aus Deinen Ausführungen wird mir z.B. überhaupt nicht klar, wozu diese Umwandlung überhaupt gut sein soll:
In den allermeisten Fällen reicht es, wenn die LEDs an oder aus sind. Blinkende LEDs sind in meinem Code "Sonderfälle" und kommen nur an wenigen Stellen vor.
Die Anwendung der beiden von mir geposteten Funktionen soll verhindern, dass an allen Stellen an denen eine LED lediglich an oder aus sein soll ein Integer anstelle eines einfachen Bits zum Einsatz kommt.
Trotzdem möchte ich blinkende LEDs klar "erkennen" können, indem ich die entsprechende Position von main_LED_st abfrage.
Beim generieren des Codes war vor der Generierung der beiden Funktionen immer mein Problem, dass ich mit einem einzelnen Bit nur zwei Status einer blinkenden LED abbilden konnte.
Werde mich aber trotzdem noch mehr mit dem Thema Datenstrukturen auseinandersetzen.