【问题标题】:Arduino reading a database file from sd cardArduino 从 sd 卡读取数据库文件
【发布时间】:2013-09-08 05:34:32
【问题描述】:

我参与了一个项目,该项目使用 arduino 作为电气面板的测试设备,就像这样。

用户将通过键盘输入“类型”数字,根据输入,设备应该能够重新分配引脚模式。

对我来说,其他一切似乎都完美无缺,只是我已经到了涉及太多可能类型的地步。目前,我能够使用 switch-case 语句完成所需的过程,因为对于原型,我决定只包含 10 种类型。

主要目标是设备应该能够区分具有子类型 (100+) 的多个 (1-100) 类型。所以总共可能有数百个项目需要存储在设备中,这就是我决定使用 SD 卡来保存数据的原因。

我对编程并不陌生,所以我可以轻松掌握概念,但我现在最大的问题是我不知道实现这个过程的最佳方法。

我要求的只是某种流程来实现对 sd 卡上的文件的查询并返回值(需要分配的引脚号,以便设备允许在某些引脚上输入并发送一些输出。)不需要特定的行,但非常感谢查询和返回值的示例。谢谢!

附言。该设备不会连接到任何其他平台。

【问题讨论】:

    标签: database search arduino


    【解决方案1】:

    您可以在 SD 卡 (http://arduino.cc/en/Reference/SD) 上存储一些数据,但它不是可编译的代码,因此您必须以 ASCII 格式存储一些数据结构。

    另一个建议是使用不同型号的 Arduino,例如 Arduino Due,它有高达 512KB 的闪存用于代码(普通 Arduino 有 32KB)。

    这并不能解决您的根本问题,即大型 switch 语句。看看这些想法:

    【讨论】:

    • 感谢您的建议,但我不认为在 arduino 本身内对我的数据库进行硬编码是个好主意。我试图将 arduino 与包含数据库的 sd 卡读卡器连接起来。这样做最有效的方法是什么?我打算只将文件每一行中的第一个字符串与用户输入进行比较..
    【解决方案2】:

    我认为您可以从实现查找表类型的结构开始,使用结构和数组的混合。 因为我不知道用户将输入的输入格式 让我们寻找一个简单的例子,其中类型和子类型都是 1 到 100 之间的数字。 在这种情况下,可以使用简单的二维数组,数组的每个元素对应于引脚映射。 现在这个引脚映射可以是位图。因为我不知道你在做什么映射的太多信息。 例如,假设您有 8 个引脚,每个引脚都可以输入或输出,为此您可以使用 8 位,每个位号本身对应于引脚号,位值对应于输入或输出。如果您有两个以上的状态,那么您可以使用两位而不是一位来获得 4 四个可能的值。

    但是,如果用户输入是字符串形式。在这种情况下,您将需要使用结构数组来创建类似数据结构的地图,并在其中搜索特定的引脚。

        struct first_level_map
        {
          string type;
          uint8_t firs_level_id;
        }
    
        struct second_level_map
        {
          string subtype;
          uint8_t pin_out;
        }
    
        struct first_level_map type_array[100];
        struct second_level_map subtype_array[100];
    
        struct first_second_map
        {
          uint8_t second_level_id;
          struct second_level_map subtype_array[100];
        }
       struct first_second_map first_second_map_array[100];
    

    Type user input--->Get first_level_id ----> Index first_second_map_array----> Get second_level_id-->From Subtype--->Get pin-out

    【讨论】:

    • 位掩码的想法似乎很容易实现。这实际上是个好主意!如果数组中有 24 位,会不会有问题?用户输入是字符串,因为我使用小键盘进行用户输入,并且输入中可能包含“.”(句点)。我正计划从 sd 卡读取文件并运行特定字符串的查询,例如。键入 12.1 并将以下参数保存到要在代码中使用的变量中。我对如何实现这一点有一个模糊的想法,但我唯一担心的是类型编号最多可以达到 200 个元素。就 arduino 而言,这会是个问题吗?
    • 对于 24 位的位掩码,您可以使用 unsigned int 32 位,如果这不可用,则使用两个 uint16。 200 可以很容易地容纳在 uint8_t 中,所以这不会是问题。如果您不打算更新,也可以将此数组移动到代码空间中,否则您可以继续使用 SD 卡。
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2023-03-16
    相关资源
    最近更新 更多