在我的项目中,我从 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/