【Gravity:AS7341测评】色温感知测量之四 单通道逐个读取数据
[复制链接]
本帖最后由 北方 于 2020-12-30 10:32 编辑
1、 经过前面的资料分析,这个传感器就是一个多通道传感器,分别是一个NIR,8个频谱通道。
这次的测试就是分别读取单个通道的数据,具体这就是色温感知的元数据的来源。
2、代码经过arduino封装后,就比较简单,
首先需要导入库函数,并初始化DFRobot_AS7341
-
- DFRobot_AS7341 as7341;
-
- while (as7341.begin() != 0) {
-
- }
完成以上任务,就直接读取各个通道的数据了。
- as7341.startMeasure(as7341.eF1F4ClearNIR);
-
- data1 = as7341.readSpectralDataOne();
-
- Serial.print("F1(405-425nm):");
- Serial.println(data1.ADF1);
- Serial.print("F2(435-455nm):");
- Serial.println(data1.ADF2);
- Serial.print("F3(470-490nm):");
- Serial.println(data1.ADF3);
- Serial.print("F4(505-525nm):");
- Serial.println(data1.ADF4);
-
-
-
-
- as7341.startMeasure(as7341.eF5F8ClearNIR);
-
- data2 = as7341.readSpectralDataTwo();
- Serial.print("F5(545-565nm):");
- Serial.println(data2.ADF5);
- Serial.print("F6(580-600nm):");
- Serial.println(data2.ADF6);
- Serial.print("F7(620-640nm):");
- Serial.println(data2.ADF7);
- Serial.print("F8(670-690nm):");
- Serial.println(data2.ADF8);
- Serial.print("Clear:");
- Serial.println(data2.ADCLEAR);
- Serial.print("NIR:");
- Serial.println(data2.ADNIR);
以上数据是首先按照clearNIR的方式读取,
分两组,每组其实只有4通道的数据,
读取数据后要清零。
那么,如果希望快速读取传感器数据的应用,就还需要更底层的数据访问,以取得更准确的时间。
读取的数据如下,
光照之后数据发生变化,
3、大致分析源函数startMeasure();,了解读取的过程
- void DFRobot_AS7341::startMeasure(eChChoose_t mode)
- {
- uint8_t data=0;
-
- readReg(REG_AS7341_CFG_0,&data,1);
- data = data & (~(1<<4));
- writeReg(REG_AS7341_CFG_0,&data,1);
-
- enableSpectralMeasure(false);
- writeReg(0xAF,0x10);
- if(mode == eF1F4ClearNIR)
- F1F4_Clear_NIR();
- else if(mode == eF5F8ClearNIR)
- F5F8_Clear_NIR();
- enableSMUX(true);
- if(measureMode == eSyns){
- setGpioMode(INPUT);
- config(eSyns);
- //writeReg(byte(0xA9), byte(0));
- }
- else if(measureMode == eSpm){
- config(eSpm);
- }
- enableSpectralMeasure(true);
- if(measureMode == eSpm){
- while(!measureComplete()){
- delay(1);
- }
- }
- }
可以看出,根据不同的通道数,选择参数,eF1F4ClearNIR,I2C通道对应写入寄存器,就可以实现功能,具体的寄存器地址,就是数据手册上标明的数据。
因此,如果需要移植到其他平台上的时候,可以参考这个开源的源代码来实现。
|