如何在Arduino中设置关联数据结构

时间:2013-05-18 01:00:19

标签: arrays struct arduino associative-array

我正在开发一个小型遥控器,让我可以通过互联网控制我的IR受控设备。一切正常,但我仍然需要以一种我可以轻松访问它们的方式存储代码。所以我想有一种方法可以让我有两个变量:

  • A' char rc_name []'它包含遥控器的名称,例如TV,SAT和AMPLIFIER
  • A' char rc_function []'它包含要执行的函数的名称,例如,POWER,VOLUME_UP和BUTTON_1

鉴于这两个变量,我想接收所有必要的数据。

  • ' int code_type_num'
  • ' char code_value []',例如" 400555AA"
  • ' int code_type_bits

这一般看起来都很简单,但是我找不到一种能让我通过字符串键而不是整数二进制来访问数据的方法。

在PHP中我会使用这样的东西:

$remotes = array(
    'tv' => array(
                    'POWER' => array(1, '400555AA', 32),
                    'MUTE'   => array(1, '400557AA', 32),
            ),
);

$rc_name = 'tv';
$rc_function = 'power';
$rc_data = $remotes[$rc_name][$rc_function];

在Arduino中设置这样一个结构的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

我目前的方法也是迭代它。我希望有一种更优雅的方式。 如果其他人需要它,我现在就是这样做的:

typedef struct {
   char* remote_name;
   char* function_name;
   int code_type;
   int code_bits;
   char* code_value;
} IR_Code;

int num_codes = 58;
IR_Code ir_codes[58] = {
   { "amp", "power", 1, 32, "400501FE" }, 
   ...
   { "tv", "power", 1, 32, "20DF10EF" },
};

void send_defined_code(char* remote_name, char* function_name) {
  for( int i=0; i < num_codes; i++) {
     if(strcmp(remote_name, ir_codes[i].remote_name) == 0 && strcmp(function_name, ir_codes[i].function_name) == 0) {
       long unsigned int code = strtoul( ir_codes[i].code_value, 0, 16);
       Serial.print(F(" Type:"));
       Serial.print(ir_codes[i].code_type);
       Serial.print(F(" Value:0x"));
       Serial.print(code, HEX);
       Serial.print(F(" Bits:"));
       Serial.print(ir_codes[i].code_bits);
       return;
     }
  } 
}