我正在用Arduino写USB到PS / 2转换器,并且有一个数据结构,如果我使用另一种高级语言,则可以像字典一样实现。这些条目将类似于:

{ 0x29: { name: "esc", make: [0x76], break: [0xfe, 0x76] } }

此处,0x29是密钥的USB代码,因此这是此字典查找的密钥。然后,我将使用entry.name进行调试,entry.make是按下键时需要发送的字节数组(keyDown),释放键时需要发送字节数组(keyUp)。

用C++实现这一目标的方法是什么?

最佳答案

看来ArduinoSTL 1.1.0不包含unordered_map,因此您可以像这样创建map

  • 下载Arduino STL ZIP文件并将其放置在好的
  • Sketch \ Include库\添加ZIP库,并为其提供ZIP文件的完整路径。

  • 然后,尽管有很多关于未使用变量的STL警告,它仍应编译。
    #include <ArduinoSTL.h>
    #include <iostream>
    #include <string>
    #include <map>
    
    struct key_entry {
        std::string name;
        std::string down;
        std::string up;
        key_entry() : name(), down(), up() {}
        key_entry(const std::string& n, const std::string& d, const std::string& u) :
            name(n),
            down(d),
            up(u)
        {}
    };
    
    using keydict = std::map<unsigned int, key_entry>;
    
    keydict kd = {
        {0x28, {"KEY_ENTER",  "\x5a", "\xf0\x5a"}},
        {0x29, {"KEY_ESC",    "\x76", "\xf0\x76"}}
    };
    
    void setup() {
        Serial.begin( 115200 );
    }
    
    void loop() {
        auto& a = kd[0x29];
        // use a.down or a.up (or a.name for debugging)
        Serial.write(a.up.c_str(), a.up.size());
    }
    

    关于c++ - 像Arduino C++中的字典一样的数据结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53498564/

    10-13 09:12