Die Datei steht auf einer SD? Dann SD öffnen (Lib SdFat), Zeilenweise lesen und mit strtok zerlegen und mit atof in float umwandeln. Infos zu Zeichenketten in C.
Du solltest aber wissen, wieviele Zeilen Du maximal erwartest, damit Du die Arraygröße festlegen kannst.
Das sind je 6 Beschleunigungswerte aller Freiheitsgrade inkl. der jeweiligen Zeit in der ersten Spalte in sec.
Das Problem ist, dass das insgesamt mehr als 10.000 Zeilen Daten sind. Somit kann ich die alle schlecht manuell in ein Array schreiben…
Deshalb bräuchte ich einen Sketch der mir aus dem eingefügten Text die Werte holt und in ein mehrdimensionales Array einliest.
Ok das ist schlecht...
Und würde die Möglichkeit über eine SD-Karte funktionieren? Über Serielle Kommunikation die Daten einzulesen?
Tommy56:
Edit: Woher kommen die Werte denn?
Die Datei habe ich von einem Freund. Das sind gemessene Beschleunigungsdaten eines Fahrzeugs. Wie genau die Werte gemessen wurden kann ich nicht sagen.
Ja genau die Werte je einer Zeile "durchlaufen" einmal das gesamte Programm und beim nächsten Durchlauf sollen die Werte der nächsten Zeile verwendet werden.
Ja die Werte sind immer gleich angeordnet (winkelx; winkely; winkelz; ax; ay; az;) und die Reihenfolge der Abarbeitung entspricht der Datei, also Zeile für Zeile (wie gerade beschrieben).
Gut, dann geht es, wenn die Datei auf SD-Card liegt und von dort zeilenweise gelesen wird.
Immer eine Zeile bis zum '\n' mit fgets in ein Char-Array lesen und wie in meinem ersten Posting geschrieben mit strtok zerlegen.
Du arbeitest dann intern mit einem eindimensionalen Array aus 7 float-Werten.
Nimm nicht die originale SD-Lib, sondern die SdFat.
Ich weiß nicht, wieviel Erfahrung Du schon mit dem Arduino hast. Evtl. kann es sinnvoll sein, erst mal die Grundlagen zu lernen, bevor Du Dich an dieses Projekt setzt.
Weist du ob das ganze von den Zeitschritten bzw. der Daten-Frequenz her funktionieren würde?
Sprich die Messdaten sind in einer Auflösung von 100Hz aufgenommen, aber ich würde die Datei hoffentlich auch in 10Hz Auflösung bekommen.
Und somit ist die Frage ob es klappt die Daten so schnell zu verarbeiten und an die Servos zu schicken, dass die Servowinkel auch in 10Hz “Abständen” an die Servos geschickt werden?
Da ich mit Servos noch nichts gemacht habe, muss ich diese Frage an die Wissenden auf diesem Gebiet im Forum weiter reichen.
Das zeilenweise einlesen und zerlegen ist zeitlich kein Problem. In wieweit die Servos schnell genug sind, kann ich nicht beurteilen.
Ist eine Variante, doch der muss auch erst beschrieben werden und für 280.000 Bytes muss man da schon einiges basteln. Da ist die SD, die am PC beschrieben werden kann schon einfacher.
Nur mit den Servos kenne ich mich überhaupt nicht aus. Da sollte jemand anderes klare Aussagen, besonders zur Geschwindigkeit (10Hz) treffen können.
Da ein Standard-Servo alle 20ms den Impuls erwartet, werden wohl nicht viel mehr als 50 Werte pro Sekunde 'möglich' sein - alleine, da das Servo noch am Einlesen des aktuellen Impuls ist.
Mit digitalen Servos habe ich keine Erfahrung, hier dürfte auch 'Mehr' gehen.
Bei der analogen Variante würde ich über einen Timer gehen, Der je aktuellem Wert das Signal 1...2ms HIGH hält und nach 18ms 'von vorne anfängt'.
Alternativ eine per I²C ansprechbare Servo-Platine - wie Die auf schnellere Änderungen reagiert, als das analoge Signal braucht, müsste man austesten.
Der Arduino braucht nur den neuen Sollwert zu senden, dann bewegt sich der Servo zur neuen Position. Dafür dürfte der Wert des Servos (Model: DS-319HV) "Operating Speed: 0.05sec.60º 7.4V" ausschlaggebend sein.