Seite 1 von 1

FTDuino Schleife Ausgänge Eingänge

Verfasst: 12 Aug 2018, 17:42
von Grau
Hllo,
wie kann ich die Ausgänge oder Eingäng in einer Schleife verarbeiten.


for (i = 0; i < 5; i = i + 1)
{
ftduino.output_set (Ftduino ::Oi , Ftduino :: LO ); // Oi = O1,O2..
}

Gruß Grau

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 12 Aug 2018, 20:06
von geometer
Hm, Ftduino::O0 gibt es nicht, oder?
Ftduino::O1 ist, solange MoG das nicht ändert, eine uint8_t-Konstante mit Wert 0. Darum sollte aktuell und etwas unsauber
for (uint8_t i = 0; i < 4; i++) ftduino.output_set(i, Ftduino::LO);
die Ausgänge O1, O2, O3 und O4 auf LO setzen.

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 12 Aug 2018, 22:49
von richard.kunze
Sauber, aber verschwendet eventuell (wenn der Compiler nicht erkennt dass das eh alles statisch ist, die ganze Schleife wegoptimiert und nur vier ftduino.output_set(...)-Aufrufe stehen lässt :-)) Speicher (für das Array und die Größenangabe) und Rechenzeit (für die Indirektion beim Array-Lookup) und ist hier eher etwas überkandidelt: (aber nützlich wenn man z.B. die Ports in der Reihenfolge O1, O3, O4, O2 durchlaufen wollte - dann muss man nur die Reihenfolge im Array passend setzen)

Code: Alles auswählen

static const uint8_t PORTS[] = { Ftduino::O1, Ftduino::O2, Ftduino::O3, Ftduino::O4 };
static const size_t PORTS_LENGTH = sizeof(PORTS) / sizeof(uint8_t); 
for (size_t i = 0; i<PORTS_LENGTH; i++) {
    ftduino.output_set(PORTS[i], Ftduino::LO );
}
Theoretisch etwas unsauberer (weil es sich blind darauf verlässt dass Ftduino::O1 bis Ftduino::O4 jeweils mit Abstand 1 aufeinanderfolgen) aber deutlich besser lesbar und daher hier meine Empfehlung:

Code: Alles auswählen

for (uint8_t port = Ftduino::O1; port <= Ftduino::O4; port++) {
    ftduino.output_set(port, Ftduino::LO );
}

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 12 Aug 2018, 23:21
von ski7777
Ich habe gefühlt null Ahnung von C/C++, aber wäre es nicht sinnvoll diese Konstanten in der Bibliothek als enum zu definieren?

Raphaek

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 13 Aug 2018, 00:37
von geometer
ski7777 hat geschrieben:Ich habe gefühlt null Ahnung von C/C++, aber wäre es nicht sinnvoll diese Konstanten in der Bibliothek als enum zu definieren?
Nein. In C belegt man mit enum letztendlich Konstanten vom Typ signed int mit Namen. Das ist nicht sinnvoll, um Ausgänge abzuzählen. Ein anderer für Grau wesentlicher Grund wäre, dass man Aufzählungstypen nicht direkt in for-Schleifen benutzen kann.

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 13 Aug 2018, 20:18
von MasterOfGizmo
richard.kunze hat geschrieben:Theoretisch etwas unsauberer (weil es sich blind darauf verlässt dass Ftduino::O1 bis Ftduino::O4 jeweils mit Abstand 1 aufeinanderfolgen) aber deutlich besser lesbar und daher hier meine Empfehlung:

Code: Alles auswählen

for (uint8_t port = Ftduino::O1; port <= Ftduino::O4; port++) {
    ftduino.output_set(port, Ftduino::LO );
}
Ja, so sieht die einfachste Lösung aus. Alternativ kann man auch ähnlich Graus Ansatz von 0 bis 3 zählen und dann im output_set als Port Ftduino::O1+i schreiben. Darauf dass die Werte aufeinander folgen könnt ihr euch verlassen.

Enums sind in der Tat keine Option, da man mit ihnen nicht zählen oder rechnen kann ohne sie etwas unschön in Integer zu verwandeln.

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 19 Aug 2018, 17:01
von Grau
Hallo,
danke für die vielen Vorschläge.
@MoG vielleicht kannst du das in die Anleitung übernehmen.
Gruß Grau

Re: FTDuino Schleife Ausgänge Eingänge

Verfasst: 19 Aug 2018, 17:39
von MasterOfGizmo
Ja, der Hinweis, das man die Ein- und Aushänge abzählen kann gehört sicher ins Handbuch.