2

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

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

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

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

总的来说,这一切似乎都很简单,但我真的找不到一种方法可以让我通过字符串键而不是整数 inex 访问数据。

在 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 中设置这种结构的最佳方法是什么?

4

1 回答 1

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;
     }
  } 
}
于 2013-05-18T13:27:43.070 回答