今のところ私はプロジェクトを動かすために自分のシンプルなデータフォーマットを使うことに決めました。私はまた、RAMを食べないような方法でキューデータを保存することを心配していました。
128kバイトのフラッシュメモリを搭載したArdunio Megaを使用しているので、SDカードを使用する前にそれを使用したいと思います。優れたFlash Library PROGMEMへのアクセスは非常に簡単で、数分でテストスケッチを作成することができました。
モータ制御については、シリアル通信を使用する専用のモータコントローラボードを使用しています。各基板は2つのモーターを制御します。私が送信する必要があった最大データサイズをテストするためには、モータのデータフォーマットを決定するように動かすために、レート、スロープ、xターゲット、yターゲットの4つの値がありました。これはタイムスタンプとボードID値を追加すると変わります。
Flash libでは、FLASH_TABLEを定義してPROGMEMに格納し、単純な配列ブラケットアクセスを使用してアクセスできます。何千ものエントリを使ったテストでは問題はありません。
したがって、データを取り出してスタンドアロンボードに送信するか、内部で使用するという簡単な作業になります。
//簡単な例:
#include <Flash.h>
FLASH_TABLE(int, command_table, 4 /* width of table */,
{111, 222, 333, 444},
{1001, 900,, -4567},
{1002, 1000,, -4567},
{1003, 1100,, -4567},
{666, 777, 888, 999}
);
void setup() {
Serial.begin(9600);
Serial.print("Mem: "); Serial.println(availableMemory());
// Determine the size of the array
Serial.print("Rows: "); Serial.println(command_table.rows());
Serial.print("Cols: "); Serial.println(command_table.cols());
Serial.print("RAM: "); Serial.println(sizeof(command_table));
Serial.print(command_table[8][0]);
Serial.print("s");
Serial.print(command_table[8][1]);
Serial.print("r");
Serial.print(command_table[8][2]);
Serial.print("x");
Serial.print(command_table[8][3]);
Serial.print("y");
Serial.println("gi");
}
void loop() {
}
int availableMemory()
{
int size = 1024;
byte *buf;
while ((buf = (byte *) malloc(--size)) == NULL);
free(buf);
return size;
}
MIDI形式がしばしばある(AB)非音楽データのこの種のために使用。 (劇場の照明など)あなたもあなたのロボットバレエ用に使うことができます。 MIDIは非常に軽量の記憶容量で、比較的解析が簡単です。 – wildplasser
@wildplasser - 面白い、ありがとう。私はMIDI ab /これも使用されている見てきましたが、それは私には全く起こりませんでした。 –
これは、タイミング、キューイング/同期、複数のボイス/チャンネルといった組み込みのコア機能を備えています。 (IIRCループ/繰り返しが後で追加された)。 – wildplasser