我正在研究一些animatronics的艺术装置,它将使用几个步进电机和一些高功率LED。在过去,当我做了这种事情时,我使用了系留计算机来处理逻辑和时序。对于这个项目,我想尝试使它自成一体(例如,只是Arduino板)。对于Arduino硬件,我有Arduino Mega,如果需要,可以使用SD card shield扩展它以获得更多存储空间。
我真的很欢迎任何有关如何处理此问题的想法或建议(并且我不会要求代码)。
对于数据,基本上我会为每个步进器和每个LED存储提示。当然,我需要某种时钟或时间戳来跟踪事物。
步进提示将类似于:
LED提示将类似于:
所以我想知道:
至于有多少提示/多少数据,因为我刚刚开始这个,我会在我遇到的任何限制范围内工作。
答案 0 :(得分:0)
所以现在我决定推出自己的简单数据格式,以保持项目的顺利进行。我还担心以不占用RAM的方式存储提示数据。
由于我使用的是带有128 KB闪存的Ardunio Mega,我想在使用SD卡之前使用它。通过优秀的Flash Library访问PROGMEM非常简单,我能够在几分钟内完成测试草图。
对于电机控制,我使用串行通讯专用电机控制器板。每块板控制两个电机。为了测试我需要发送的最大数据大小是四个值: rate,slope,x target,y target 以便进行移动以确定我的电机数据格式。当我添加时间戳和电路板ID值时,这将改变。
使用Flash lib,您可以定义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;
}