wie in meinem anderen Projekt bereits angekündigt möchte ich hier ein neues Projekt starten. Ziel ist es, die Signale die über 2 Kanäle von einer Flysky Funke kommen, aufzuarbeiten und damit bis zu 16 Schaltkanäle unabhängig zu steuern. Verwendet wird ein Arduino Nano. Dies wird mein erstes Projekt geben das mit Strukturen aufgebaut werden soll. Bisher absolutes Neuland für mich, aber nur so lernt man dazu. Ich würde mich sehr freuen, auch hier eine so tatkräftige Unterstützung wie bei dem vorherigen Projekt zu bekommen. Bisher habe ich so angefangen:
Die Sachen in der loop dienen im Moment nur dazu, zu sehen ob das soweit funktioniert. Und das erste Problem ist auch schon da Der Code funktioniert nur bis Kanal 10. Sobald ein pin mit A0 usw deklariert ist nicht mehr. Kann man die Pins A0 bis A5 irgendwie umbenennen in Pin 14 bis 19?
die outputs für alle im Daten Kanal angegebenen Pins.
OK. Also in der for Schleife greift er nicht auf das struct zu. Verstanden. Ich habe noch nie mit struct usw gearbeitet, deswegen tue ich mir da gerade schwer und versuche aus Beispielen mir was zusammen zu reimen.
so ist es. selbst wenn es kürzer und eleganter geht reicht es eigentlich wenn du einen Weg findest der funktioniert und den du dir gut merken kannst.
Die erwähnten Tipps bezüglich der Benamung von Strukturen sind natürlich auch alle richtig.
Habe in nem Buch mal die Reihenfolge gelesen:
make it work
make it right
make it fast
Also ich würde mit dem schön machen anfangen nachdem es funktioniert was ja meistens gerade am anfang schon eine nicht gerade kleine hürde ist und schritt 1 und 2 auf einmal auch gerade am anfang überfordernd sein kann meiner Meinung nach.
Also wenn ich das jetzt richtig verstanden habe, dann beziehen sich die Funktionalitäten die ich direkt ins struct schreibe, auch nur auf dieses struct. Hätte ich mehrere, dann könnte ich diese dort deklarieren und im setup bzw in der loop einfach ansprechen.
Ja gerade am Anfang und mit neuer Materie ist es gar nicht so einfach das alles im Kopf zu sortieren. Das mag für fortgeschrittene alles easy sein, aber für Anfänger teilweise erschlagend. Noch dazu wenn man das wirklich verstehen will.
Ich muss leider kurz meine Kids wegbringen, dann gehts weiter.
Mein tatsächlich größtes Problem bei solchen Projekten ist es zu verstehen wie ich es am besten strukturiere. Das ist übrigens der Link zu dem besagten vorherigen Prokjekt:
In diesem Projekt habe ich die PWM Werte vom Empfänger abgefragt und mit case ein Unterprogramm aufgerufen das den entsprechenden Kanal schaltet. Dieses Unterprogramm gab es entsprechend oft den Kanälen. Von der gewünschten Funktion hat sich nichts geändert. Die Variable mem steht für memory. Wird ein Taster an der Funke gedrückt, weiß er über den Wertebereich im case welcher das ist. Bei mem=0 , wird der entsprechende Pin High und nach einer Wartezeit X wieder low. Bei mem=1 schaltet er den Pin High, wartet eine Zeit X und setzt stat auf true (quasi ist eingeschaltet). Bei nochmaligen betätigen wird der Pin Low und stat wird wieder false.
Jetzt soll das ganze ja quasi "global" funktionieren, ohne 16 Unterprogramme. In dem unten stehenden Code ist noch die "alte" Abfrage über case und das entsprechende Unterprogramm drin, damit man sieht was ich meine.
Meine erste Überlegung war in den cases eine weitere Variable auf true zu setzen und diese dann in einer for Schleife abzufragen.
ich tu mir mit Fließtext in einer Wurst schwer. Nicht viel besser:
Bei mem=0 , wird der entsprechende Pin High und nach einer Wartezeit X wieder low.
Bei mem=1 ..................schaltet er den Pin High, wartet eine ................Zeit X und
setzt stat auf true (quasi ist eingeschaltet).
Bei nochmaligen betätigen wird der Pin Low und stat wird wieder false.
ich würde mir da an deiner Stelle eine Finite State Machine aufzeichnen. Zeichnen geht einfach. Man erkennt klar ob der Ablauf rund ist und man erkennt alle Nebenbedingungen.
Bezüglich der Strukturierung der Daten: versuch es einfach: Du hast irgendwelche Ausgänge, Status, Memory-Einstellungen. Evtl. auch noch eine Funktionalität der Wartezeit.
Und dann hast die Funkauswertung die eben deinen Pins ansteuert. Und jetzt ist halt die Frage, welche Daten bekommst du aus deiner Funkauswertung (offenbar einen Wert aus der PWM Auswertung den du dann in 16 Bereiche gliederst) . Und wie steuerst du damit deine Pins ans.
Und es bleibt die Frage ... wie wird ein member mem von 0 auf 1 gesetzt? Welches Interface gibt es dafür oder geschieht das nur in der Initialisierung dass du diese Eigenschaft festlegst (geraten, weil mem ja const ist)?