Database Arduino从sd卡读取数据库文件

Database Arduino从sd卡读取数据库文件,database,search,arduino,Database,Search,Arduino,我参与了一个项目,该项目使用arduino作为一个类似这样的配电盘的测试设备 用户将通过键盘输入“类型”编号,根据输入,设备应能够重新分配pin模式 对我来说,其他的一切似乎都是完美无瑕的,只是我已经到了有太多可能的类型的地步。目前,我能够使用switch-case语句完成所需的过程,因为对于原型,我决定只合并10种类型 主要目标是该设备应能够区分具有子类型(100+)的多个(1-100)类型。因此,总共可能有数百个项目需要存储在设备中,这就是为什么我决定使用SD卡来保存数据 我对编程并不陌生,

我参与了一个项目,该项目使用arduino作为一个类似这样的配电盘的测试设备

用户将通过键盘输入“类型”编号,根据输入,设备应能够重新分配pin模式

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

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

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

我所要求的只是某种处理流程,用于在sd卡上的文件上执行查询并返回值(需要分配的管脚号,以便设备允许在某些管脚上输入并在某些管脚上发送输出)。不需要特定的行,但非常感谢提供查询和返回值的示例。谢谢


另外,设备将不会连接到任何其他平台。

您可以在SD卡()上存储一些数据,但它不是可编译的代码,因此您必须以ASCII格式存储一些数据结构

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

这并不能解决您的根本问题,即大开关语句。请看一下这些想法:


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

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

    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];

键入用户输入---->Get first_level_id-->Index first_second_map_array---->Get second_level_id-->From Subtype-->Get pin out

位屏蔽思想似乎很容易实现。这实际上是个好主意!如果数组中有24位,会不会有问题?用户输入是字符串,因为im使用键盘进行用户输入,输入中可能有“.”(句号)。我计划从sd卡读取一个文件,并运行一个特定字符串的查询,例如键入12.1,然后将以下参数保存到一个变量中,以便在代码中使用。我对如何实现这一点有一个模糊的想法,但是我唯一关心的是类型号可以达到200个元素。就arduino而言,这会是一个问题吗?对于24位的位掩码,可以使用无符号int 32位,如果不可用,则使用两个uint16。200可以很容易地容纳在uint8_t中,所以这不会是问题。如果你不打算更新,你也可以将这个数组移动到代码空间,否则你可以使用SD卡。谢谢你的建议,但是,我不认为在arduino中硬编码我的数据库是个好主意。我正在尝试将arduino与包含数据库的sd卡读卡器连接起来。最有效的方法是什么?我打算将文件每行的第一个字符串与用户输入进行比较。。