This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3200的I2C引脚使用

官方的I2C例程使用的板子自带的温度传感器,现在我想使用自己的传感器读取数据,但是出现了问题。

1.从设备地址。这个地址是我们自己定义的,还是我们需要参考传感器的数据手册进行查询,查询的原则是按照ADR0=1,ADR1-0么。在网上找了很多的关于4脚光敏传感器的介绍,但是都没有找到,问了淘宝店家,店家也不知道,关于这方面数据该怎么查询呢?

2.I2C引脚。他有两个I2C引脚,一个时钟,一个数据,普通传感器只有一个数据引脚,并没有时钟控制的引脚。这里的时钟是定义给开发板,统一开发板的步调的么?对于外接传感器来说,是不是只要接数据线就可以了?

3.数据接收。官方有两个例程,一个温湿度,一个加速度,对于这两个数据接收,我很纳闷,都是使用字符数组接收的数据,但是温度就需要移位操作,而加速度就不需要了呢?

这是官方的例程

void getTemp(char *temp){
        int iRetVal=0;
        unsigned char ucData[2];
        ucData[0]=1;//初始化
        I2C_IF_Write(0x41,&ucData[0],1,0);//地址指向温度寄存器

        //获取温度,1为位数
        iRetVal=I2C_IF_Read(0x41,&ucData[0],1);//读取温度值存入ucData,
        Report("ucData=%s\n\r",ucData);
        //读取成功,处理并显示温度
        if(!iRetVal){
            unsigned short usTemp=(ucData[0]<<8)+ucData[1];
            Report("usTemp=%d\n\r",usTemp);
            if( !(usTemp & 0x8000) ){//处理正温度值
                int i=0;
                i+=sprintf(temp,"%d.",usTemp>>7);//显示整数
                Report("i=%d\n\r",i);
                i+=sprintf(temp+i,"%d",( (usTemp & 0x7f)*25 )>>5);//显示小数
                Report("i=%d\n\r",i);
            }
           }
         }



void getAcceleration(char* acc){
    int iRetVal=0;
    unsigned char ucData2[6];
    ucData2[0]=2;
    I2C_IF_Write(0x18,&ucData2[0],1,0);//地址指向加速度寄存器
    Report("ucData2[0]=%c\n\r",ucData2[0]);
    Report("ucData2[1]=%c\n\r",ucData2[1]);
    iRetVal=I2C_IF_Read(0x18,&ucData2[0],6);//读取加速度值存入ucData2
    Report("ucData=%s\n\r",ucData);
     if(!iRetVal){//成功,处理加速度数据
         int i=0;
         i+=sprintf(acc+i,"x=%03d  ",ucData2[1]);
         i+=sprintf(acc+i,"y=%03d  ",ucData2[3]);
         i+=sprintf(acc+i,"z=%03d  ",ucData2[5]);
     }
}

这是我改写的光敏传感器的代码

void getPhotoSensitive(char* LOutput){
    int iRetVal=0;
    unsigned char ucData3[2];
    ucData3[0]=3;
    I2C_IF_Write(ADDR,&ucData3[0],1,0);//地址指向光敏电阻寄存器
    Report("ucData3=%s\n\r",ucData3);
    iRetVal=I2C_IF_Read(ADDR,&ucData3[0],1);//读取DO输出值存入ucData3
    Report("iRetVal=%d\n\r",iRetVal);
    if(!iRetVal){
        Report("ucData3[0]=%s\n\r",ucData3[0]);
        Report("ucData3[1]=%s\n\r",ucData3[1]);
        int i=0;
        i+=sprintf(LOutput+i,"light is %d  ",ucData3[1]);
    }
}

谢谢各位指点~~~