FTDuino Schleife Ausgänge Eingänge

Alles rund um COMPUTING inkl. Microcontroller & Co.
Everything about COMPUTING incl. Microcontrollers
Forumsregeln
Bitte beachte die Forumsregeln!

FTDuino Schleife Ausgänge Eingänge

Beitragvon 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
Grau
 
Beiträge: 101
Registriert: 03 Jan 2015, 18:21

Re: FTDuino Schleife Ausgänge Eingänge

Beitragvon 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.
Dominostein-Aufsteller: http://youtu.be/im__tkT311w
geometer
 
Beiträge: 186
Registriert: 28 Jan 2011, 13:24
Wohnort: Bochum

Re: FTDuino Schleife Ausgänge Eingänge

Beitragvon 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 );
}
richard.kunze
 
Beiträge: 477
Registriert: 27 Dez 2015, 00:49
Wohnort: Rhein-Main-Gebiet
Alter: 48

Re: FTDuino Schleife Ausgänge Eingänge

Beitragvon 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
ski7777
 
Beiträge: 786
Registriert: 22 Feb 2014, 15:18
Wohnort: Saarwellingen
Alter: 16

Re: FTDuino Schleife Ausgänge Eingänge

Beitragvon 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.
Dominostein-Aufsteller: http://youtu.be/im__tkT311w
geometer
 
Beiträge: 186
Registriert: 28 Jan 2011, 13:24
Wohnort: Bochum

Re: FTDuino Schleife Ausgänge Eingänge

Beitragvon 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.
ftDuino, der Arduino für fischertechnik: http://ftduino.de
Benutzeravatar
MasterOfGizmo
 
Beiträge: 1365
Registriert: 30 Nov 2014, 08:44


Zurück zu Robo Pro / Computing / Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron