【Gravity:AS7341测评】色温感知测量之四 单通道逐个读取数据
[复制链接]
本帖最后由 北方 于 2020-12-30 10:32 编辑
1、 经过前面的资料分析,这个传感器就是一个多通道传感器,分别是一个NIR,8个频谱通道。
这次的测试就是分别读取单个通道的数据,具体这就是色温感知的元数据的来源。
2、代码经过arduino封装后,就比较简单,
首先需要导入库函数,并初始化DFRobot_AS7341
#include "DFRobot_AS7341.h"
DFRobot_AS7341 as7341;
while (as7341.begin() != 0) {
}
完成以上任务,就直接读取各个通道的数据了。
as7341.startMeasure(as7341.eF1F4ClearNIR);
//Read the value of sensor data channel 0~5, under 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);
//Serial.print("Clear:");
//Serial.println(data1.ADCLEAR);
//Serial.print("NIR:");
//Serial.println(data1.ADNIR);
as7341.startMeasure(as7341.eF5F8ClearNIR);
//Read the value of sensor data channel 0~5, under 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通道对应写入寄存器,就可以实现功能,具体的寄存器地址,就是数据手册上标明的数据。
因此,如果需要移植到其他平台上的时候,可以参考这个开源的源代码来实现。
|