Datei aus SD-Karte in Echtzeit streamen ? Erfahrung?

Hallo, weiss jemand wie das geht oder schon damit ausprobiert?

Ich möchte SD Card Modul an Arduino UNO oder Mega anschließen.
Und dann die Datei auf der SD Karte “streamen”.

Das bedeutet, dass nur Blockweise schnell ausgelesen wird, in eine Aktivität umgesetzt wird, z.B. LEDs oder Display ansteuern ohne Verzögerung. Es soll nicht die ganze Datei geladen werden, weil Speicher auf Arduino zu klein ist. Das Prinzip ist ähnlich wie mit GCode für diese Reprap-3D-Drucker welche auch Arduino Mega 2560 verwendet.

Mein Vorhaben ist: Midi-Datei auslesen und dann Servos ansteuern.

Gibt es vielleicht sowas schon fertiggeschriebenes?

Schau dir die sdFat Library an wenn es um Geschwindigkeit und Vielseitigkeit geht. Dafür sollten aber mehr als nur Arduino Grundkenntnisse vorhanden sein

Es soll nicht die ganze Datei geladen werden, weil Speicher auf Arduino zu klein ist.

Du bist nicht der erste mit diesem Problem. Das macht jede SD Library für dich. Allerdings braucht jede Library einen Puffer von 512 Byte. 1 Datei auf einem Uno (gleichzeitig offen) geht aber.

"Echtzeit" ist kein Problem, wenn du Servos ansteuern willst. Mechanik ist deutlich langsamer als die SD-Karte. Hauptsache, du kannst die Datei normal (vorwärts) lesen. Das meinst du sicher mit "streamen".

SDFat habe ich schon im Visier. Nur ähm ja es ist schon etwas umfangreich. Ich glaube da brauche ich ein Beispielscode oder Blog, oder ein Tutorial fürs Streamen mit SDFat oder mit einer anderen SD Library. Sowas könnte mir etwas weiterhelfen, denke ich.

Außerdem hat das Servoansteuersignal 50Hz und darum kann die Position immer nur alle 20mS verändert werden (abgesehen davon daß die Mechanik zu langsam ist um dem Signal zu folgen).

Grüße Uwe

Ich glaube da brauche ich ein Beispielscode

Jetzt mach dir mal nicht ins Hemd aus lauter Angst vor dem "Streamen".

Das ist die natürliche Art und Weise, mit einer geöffneten Datei umzugehen. ;)

Die Libraries haben alle Beispiele dabei, mit denen du beliebig große Dateien in beliebig kleinen Stückchen lesen und verarbeiten kannst.

Ähm, jetzt wird es mir peinlich: Ich stelle fest dass MIDI-Format gar nicht in Stream-Format aufgebaut ist. Kann das sein?

Das konnte ich hier feststellen indem ich aus Binary(hex) zu Text umwandle:

http://flashmusicgames.com/midi/mid2txt.php Oder ist es der Umwandler ?

Wenn eine MIDI-Datei mehrere Tracks hat, dann beginnt zuerst Track 1, danach Track 2. So zeigt mir diese Textausgabe: Das heisst, ich müsste immer zwischen Tracks hin und her springen und dort weiterlesen. Weil ich möchte pro Track ein Servo ansteuern. Und es müssen alle Servos gleichzeitig bewegt werden.

Danach https://www.csie.ntu.edu.tw/~r92092/ref/midi/

könntest du Format_0 oder Format_2 Midi-Files, und einen Track eines Format_1 mit deinen Servos abspielen...

Hallo,

Hinweis, mach dir erstmal einen Kopf wie du blockierfrei deine Servos ansteuerst und die Genauigkeit beibehälst trotz anderer Aufgaben. Es gibt verschiedene Ansätze und alle haben Vor- und Nachteile. Und das Wort Echtzeit wird häufig falsch verwendet. Weil das ist eine reine Definitionsfrage für genau das Projekt um welches es sich handelt. Das kann jeder anders für sich definieren. Damit ergibt sich fast schon die Variante für die Servoansteuerung.

Nicht das du dein Streaming fertig hast, dann die Servos hinzufügst und dich wunderst das danach nichts mehr funktioniert.

Bei den Libraries sind Beispiele dabei