Nachdem ich ziemlich lange über das Internet gesucht habe , habe ich keine andere Wahl, als jemanden zu fragen, ob er mir diese anscheinend seltsame Situation erklären kann.
Ich mache einige Tests mit einigen Servomotoren und versuche, sie mit millis()
und Servo
Objekt fast zusammen zu bewegen .
Es funktioniert natürlich entweder für einzelne Servos oder für mehrere Servos.
Der detailliertere Fall betrifft Folgendes:
- Bewegen Sie einen, zwei oder mehr Servomotoren zusammen.
- Zwingen Sie sie, FAST die gleiche Zeit zu nehmen, um eine Aktion auszuführen.
- Haben Sie eine dynamische Anzahl von Servos.
Über die ersten beiden Punkte hatte ich keine Probleme, sie zu lösen. Ich war leicht in der Lage, eine Funktion zu erstellen und dann eine Bibliothek zu erstellen, um einen solchen Job zu erledigen.
Da ich jedoch NICHT an C ++ gewöhnt bin und mich gefragt habe, ob es tatsächlich möglich ist, ein Array von Servo-Objekten zu erstellen, wie Sie es tatsächlich auf Arduino mit Strings tun können:
String stringArray[] = {"string1", "string2", "and so on, I love it."};
Nachdem ich mich eine Weile gefragt habe, habe ich Folgendes versucht:
Servo servObject;
Servo servObject_2;
Servo servObject_3;
Servo servos[] = {servObject, servObject_2, servObject_3};
Und weißt du was cool ist? Meine Funktion funktioniert tatsächlich korrekt, indem die Anzahl der Elemente des Servo-Arrays erzwungen wird.
Was ich damit meine ist, dass wenn ich meine Funktion zwinge zu wissen, dass sie 3 Elemente im Array haben wird, es natürlich funktionieren wird; Doch aus irgendeinem Grunde, wenn ich sizeof(servos);
den Wert zurückkehrte, überraschend, ist 2
.... Außerdem, wenn ich nur zwei Servo - Push - Objekte anstelle von drei in den Servo Array, deren sizeof
Rückkehr 6
.
Durch Googeln habe ich einige Diskussionen darüber herausgefunden, dass sizeof aus bestimmten Gründen in einigen Fällen einen falschen Wert zurückgibt (wenn ich mich nicht irre, war es der richtige Wert -1), aber in meinem Fall es folgt anscheinend überhaupt keiner Logik.
Das Board, das ich benutze, ist ein Arduino Nano mit ATMEGA 328.
Irgendeine Idee, warum nicht der richtige Wert zurückgegeben wird? Bin ich eigentlich total falsch, weil ich keine Reihe von Servoobjekten erstellen sollte?
ps: Ich habe nicht den gesamten Code gepostet, weil er nutzlos gewesen wäre, da sizeof die erste Funktion ist, die in der aufgerufen wird loop()
Grüße,
briosheje
sizeof
, das für jedes Array-Objekt verfügbar ist. Daher gibt jedes Array (z. B. int elements [] = {2,3,1,3,9};) seinen korrekten Wert aus (im vorherigen Fall 5), und ich erhalte den Wert direkt vom seriellen Port. Auf jeden Fall werde ich heute Abend den gesamten Code hochladen, ich bin nicht zu Hause und kann ihn nicht wirklich aus meinem Nexus 5: P
sizeof
am Anfang meiner Schleife drucke, wird es immer noch ausgegeben Wert wie in der Funktion, in der ich es benutze. Gibt es auch eine Alternative, um zu überprüfen, ob ein Array-Element vorhanden ist? Wenn es möglich ist, könnte ich meinen eigenen sizeof
Prototyp machen.
#define countof(a) (sizeof(a)/sizeof(a[0]))
, um die Anzahl der Elemente in einem Array zu ermitteln. Da dies jedoch davon abhängt, wird sizeof()
es Ihnen nicht viel helfen.