所以现在我决定推出我自己的简单数据格式,以保持项目的进展。我还担心以不占用 RAM 的方式存储提示数据。
由于我使用的是带有 128 KB 闪存的 Ardunio Mega,因此我想在使用 SD 卡之前先使用它。借助出色的Flash 库,访问 PROGMEM 非常容易,我能够在几分钟内粗略地绘制出测试草图。
对于电机控制,我使用的是使用串行通信的专用电机控制器板。每个板控制两个电机。为了测试我需要发送的最大数据大小是四个值:速率、斜率、x 目标、y 目标,以便进行移动,从而确定我的电机数据格式。当我添加时间戳和板 ID 值时,这将改变。
使用 Flash 库,您可以定义一个 FLASH_TABLE,将其存储在 PROGMEM 中,然后使用简单的数组括号访问来访问它。使用数千个条目进行测试显示没有问题。
因此,提取数据并将其发送到独立板或在内部使用它成为一项简单的任务。
// 简单示例:
#include <Flash.h>
FLASH_TABLE(int, command_table, 4 /* width of table */,
{111, 222, 333, 444},
{1001, 900, 3210, -4567},
{1002, 1000, 3210, -4567},
{1003, 1100, 3210, -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;
}