因此,現在我決定推出我自己的簡單數據格式,以保持項目移動。我還擔心存儲提示數據的方式不會佔用內存。
因爲我使用的是128KB閃存的Ardunio Mega,我想在使用SD卡之前使用它。使用優秀的Flash Library訪問PROGMEM非常簡單,我可以在幾分鐘內完成測試草圖。
對於電機控制,我使用專用電機控制器板使用串行通信。每個電路板控制兩個電機。爲了測試我需要發送的最大數據量是四個值:速率,斜率,x目標,y目標,以便進行移動以便確定我的電機數據格式。當我添加時間戳和電路板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