FTDuino Schleife Ausgänge Eingänge

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Grau
Beiträge: 115
Registriert: 03 Jan 2015, 17:21

FTDuino Schleife Ausgänge Eingänge

Beitrag von Grau » 12 Aug 2018, 17:42

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

Benutzeravatar
geometer
Beiträge: 595
Registriert: 28 Jan 2011, 12:24
Wohnort: Bochum
Kontaktdaten:

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von geometer » 12 Aug 2018, 20:06

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.

richard.kunze
Administrator
Beiträge: 583
Registriert: 26 Dez 2015, 23:49
Wohnort: Rhein-Main-Gebiet

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von richard.kunze » 12 Aug 2018, 22:49

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 );
}

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von ski7777 » 12 Aug 2018, 23:21

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

Benutzeravatar
geometer
Beiträge: 595
Registriert: 28 Jan 2011, 12:24
Wohnort: Bochum
Kontaktdaten:

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von geometer » 13 Aug 2018, 00:37

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.

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von MasterOfGizmo » 13 Aug 2018, 20:18

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.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Grau
Beiträge: 115
Registriert: 03 Jan 2015, 17:21

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von Grau » 19 Aug 2018, 17:01

Hallo,
danke für die vielen Vorschläge.
@MoG vielleicht kannst du das in die Anleitung übernehmen.
Gruß Grau

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: FTDuino Schleife Ausgänge Eingänge

Beitrag von MasterOfGizmo » 19 Aug 2018, 17:39

Ja, der Hinweis, das man die Ein- und Aushänge abzählen kann gehört sicher ins Handbuch.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Antworten