c++ - 将类型分配给 uint8_t 值

标签 c++ arduino uint8t

在我的项目中,我从 RFID 标签读取唯一 ID,结果采用 uint8_t TagRead[4] 形式。

将结果与许多预定义的标签 ID 值进行比较,以确定已读取哪个标签。

例如:

uint8_t RED1[4] = { 0x73, 0xD5, 0xB7, 0xAC };
uint8_t RED2[4] = { 0x7E, 0x27, 0x49, 0x4E };
uint8_t RED3[4] = { 0x02, 0xFD, 0x06, 0x40 };
uint8_t GREEN1[4] = { 0xAB, 0xEC, 0x68, 0x80 };
uint8_t GREEN2[4] = { 0xEE, 0x20, 0x50, 0x4E };
uint8_t GREEN3[4] = { 0x27, 0x06, 0x40, 0x73 };

if (*((uint32_t *)TagRead) == *((uint32_t *)RED2)) {
    // RED2 tag has been read
}

else if (*((uint32_t *)TagRead) == *((uint32_t *)GREEN3)) {
    // GREEN3 tag has been read
}

我的问题涉及能够将类型/类别分配给一组标签,以便可以根据已扫描标签的颜色执行操作。

可能是当扫描到红色标签时,我们打开红色 LED,当扫描到绿色标签时,我们打开蓝色 LED。

因为每种颜色大约有 50 个标签,所以我不想在 If 语句中列出所有标签名称。相反,是否可以将颜色分配给标签?

然后可以这样做:

如果扫描到的标签是红色类型,则执行红色操作。 如果扫描的标签是绿色类型,则执行绿色操作。

感谢您的帮助。

最佳答案

您可以创建一个带有 id 和颜色枚举的结构:

enum class Color { red, green };

struct Tag
{
    uint8_t id[4];
    Color color;
};

Tag RED1 = { { 0x73, 0xD5, 0xB7, 0xAC }, Color::red } ;
Tag RED2 = { { 0x7E, 0x27, 0x49, 0x4E }, Color::red } ;
Tag RED3 = { { 0x02, 0xFD, 0x06, 0x40 }, Color::red } ;
Tag GREEN1 = { { 0xAB, 0xEC, 0x68, 0x80 }, Color::green } ;
Tag GREEN2 = { { 0xEE, 0x20, 0x50, 0x4E }, Color::green } ;
Tag GREEN3 = { { 0x27, 0x06, 0x40, 0x73 }, Color::green } ;

void test(Tag tag)
{
    if (tag.color == Color::red)
    {
        //
    }
    else if (tag.color == Color::green)
    {

    }
}

关于c++ - 将类型分配给 uint8_t 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410236/

相关文章:

c - c中uint8_t的字符串赋值

c++ - 在 C++ 中将十六进制转换为 uint8_t

swift - 来自 notification.userInfo 的数据

.net - 当我调整标签的大小时,代码垃圾会在新的空白区域短暂显示

C++ QT 桌面工具栏

java - 丢弃数字的前 10 位

c++ - C++中使用extern共享变量

c++ - 为什么这个函数会出现段错误?

c++ - 静态 opencv 在 arm Linux busybox 上找不到 USB 网络摄像头?

python - Arduino Serial.write() 丢失数据