gpt4 book ai didi

arduino - 对动画序列的编程结构和存储的建议

转载 作者:行者123 更新时间:2023-12-03 17:55:24 24 4
gpt4 key购买 nike

我正在处理一些 animatronics用于将使用多个步进电机和一些高功率 LED 的艺术装置。过去,当我做这种事情时,我使用了一台系留计算机来处理逻辑和时序。对于这个项目,我想尝试使其独立(例如,只是 Arduino 板)。对于 Arduino 硬件,我有一个 Arduino Mega并且可以用 SD card 扩展它shield如需更多存储空间,如有需要。

我真的很欢迎任何关于如何解决这个问题的想法或建议(并且不是要求代码)。

对于数据,基本上我会为每个步进器和每个 LED 存储提示。当然,我需要某种时钟或时间戳来跟踪事物。

步进提示将类似于:

  • 提示开始时间
  • 步进器 ID
  • 步进方向
  • 步进速度
  • 步数

  • LED 提示将类似于:
  • 提示开始时间
  • LED ID
  • 启动亮度
  • 结束亮度
  • 持续时间

  • 所以我想知道的是:
  • 关于足够紧凑以存储大量线索的数据格式的想法
  • 有关时钟或时间戳的任何建议。 (一个简单的计数器是显而易见的选择。)

  • 至于有多少线索/多少数据,因为我才刚刚开始,我会在遇到的任何限制内工作。

    最佳答案

    所以现在我决定推出我自己的简单数据格式,以保持项目的进展。我还担心以不占用 RAM 的方式存储提示数据。

    由于我使用的是带有 128 KB 闪存的 Arduio Mega,因此我想在使用 SD 卡之前先使用它。使用出色的 Flash Library 访问 PROGMEM 非常容易,我能够在几分钟内粗略地绘制出一个测试草图。

    对于电机控制,我使用使用串行通信的专用电机 Controller 板。每个板控制两个电机。为了测试我需要发送的最大数据大小是四个值:速率、斜率、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;
    }

    关于arduino - 对动画序列的编程结构和存储的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448075/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com