您可以查看此网站:http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NSK1042,以便更好地了解我正在谈论的内容。例如,网站上写着:传感器的i2c地址是0x10,那里的值表是:
Address Type Contents
00 – 07H chars Serial Version Number
43H byte Sensor 1 DC Signal Strength
如何在C中访问这些值?感谢。
答案 0 :(得分:3)
这些寄存器可以是存储器映射的。您需要做的一些事情:
volatile关键字将阻止编译器“优化”程序不正确。例如通过假设读取到相同的内存位置将产生相同的结果,因为程序没有写入它。
这很容易的部分是声明一个结构,使得所有偏移都与设备相同,并且每个部分的大小都合适。
即
struct hitech {
char serial_version[8];
char manufacturer[8];
/* etc */
};
volatile struct hitech *my_device;
第二部分是设备映射的位置。如果它已插入您的计算机,您应该能够看到这一点。您可能需要执行以下操作之一:mmap设备的物理地址。或者只写my_device = 0x<地址>。或者是两者的结合。
来自网站: “IRSeeker V2传感器的I2C地址为0x10”
所以你想为my_device写上面的0x10。
然后,您需要编译正确的微控制器,并将程序作为固件加载到正确的位置。
你最好使用他们的编程语言。
答案 1 :(得分:0)
假设他们没有为您提供SDK来访问这些值:
// I'm assuming these are read-only, hence the "const"
const char *g_serialVersionNumber = (const char *)0x00; // be careful not to access more than 8 bytes
const unsigned char *g_sensor1DCSignalStrength = (const unsigned char *)0x43;
void main()
{
printf("Serial version number: %s\n", g_serialVersionNumber);
printf("Sensor 1 DC Signal Strength: %d\n", *g_sensor1DCSignalStrength);
}