2013-05-18 26 views
1

我只是在開發一個小型的遙控器,它可以讓我通過互聯網控制我的受控設備IR。所有工作,但我仍然需要以我可以輕鬆訪問它們的方式存儲代碼。所以,我想有一個方式,我可以有兩個變量:如何在Arduino中設置關聯數據結構

  • A「字符rc_name []」持有遙控器的名稱,例如,電視,SAT和放大器
  • 'char rc_function []',其中包含要執行的函數的名稱,例如POWER,VOLUME_UP和BUTTON_1

給定這兩個變量,然後我想接收所有必要的數據。

  • '詮釋code_type_num'
  • '字符code_value []',例如, 「400555AA」
  • 「廉政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的這種結構的最佳方式?

+0

如果我理解正確的問題,那麼一個HashMap可能是一個很好的解決方案。 http://playground.arduino.cc/Code/HashMap – spuder

回答

2

我現在的方法也是遍歷它。我希望有一種更優雅的方式。 如果別人需要它,這裏是我如何做到這一點現在:

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; 
    } 
    } 
} 
+0

你的答案幫助我解決了類似的問題。確實如此,應該有更多elegatn的方式來做到這一點。 – Nahuel