|
@@ -17,6 +17,8 @@
|
|
|
|
|
|
|
|
ColorSensor CS[CS_MAX] = {0}; //检测孔
|
|
ColorSensor CS[CS_MAX] = {0}; //检测孔
|
|
|
|
|
|
|
|
|
|
+ColorSensor CS_Slave[CS_MAX] = {0}; //检测孔
|
|
|
|
|
+
|
|
|
uint8_t SensorState1=0,SensorState2=0,SensorState3=0,SensorState4=0,SensorState5=0,
|
|
uint8_t SensorState1=0,SensorState2=0,SensorState3=0,SensorState4=0,SensorState5=0,
|
|
|
SensorState6=0,SensorState7=0,SensorState8=0,SensorState9=0,SensorState10=0;
|
|
SensorState6=0,SensorState7=0,SensorState8=0,SensorState9=0,SensorState10=0;
|
|
|
//extern uint8_t I2C_data;
|
|
//extern uint8_t I2C_data;
|
|
@@ -54,7 +56,7 @@ uint8_t I2CReadOneByte(I2C_HandleTypeDef *hi2c, uint8_t u8SlaveAddr, uint8_t u8D
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t I2C_data = 0;
|
|
uint8_t I2C_data = 0;
|
|
|
-void TCA9548A_SetChannel(uint8_t ID)
|
|
|
|
|
|
|
+void TCA9548A_SetChannel(ColorSensor *CS)
|
|
|
{
|
|
{
|
|
|
/********************************************************/
|
|
/********************************************************/
|
|
|
/**************background light--PA0*********************/
|
|
/**************background light--PA0*********************/
|
|
@@ -71,88 +73,88 @@ void TCA9548A_SetChannel(uint8_t ID)
|
|
|
/***********************LED--PF4*************************/
|
|
/***********************LED--PF4*************************/
|
|
|
/***********************DEC--PB15************************/
|
|
/***********************DEC--PB15************************/
|
|
|
|
|
|
|
|
- switch(ID)
|
|
|
|
|
|
|
+ switch(CS->ID)
|
|
|
{
|
|
{
|
|
|
case 0:
|
|
case 0:
|
|
|
I2C_data = TCA9548A_CHANNEL_0;
|
|
I2C_data = TCA9548A_CHANNEL_0;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,ID);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,CS->ID);
|
|
|
break;
|
|
break;
|
|
|
case 1:
|
|
case 1:
|
|
|
I2C_data = TCA9548A_CHANNEL_0;
|
|
I2C_data = TCA9548A_CHANNEL_0;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
HAL_Delay(50);
|
|
HAL_Delay(50);
|
|
|
I2C_data = TCA9548A_CHANNEL_2;
|
|
I2C_data = TCA9548A_CHANNEL_2;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 2:
|
|
case 2:
|
|
|
I2C_data = TCA9548A_CHANNEL_3;
|
|
I2C_data = TCA9548A_CHANNEL_3;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 3:
|
|
case 3:
|
|
|
I2C_data = TCA9548A_CHANNEL_4;
|
|
I2C_data = TCA9548A_CHANNEL_4;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 4:
|
|
case 4:
|
|
|
I2C_data = TCA9548A_CHANNEL_5;
|
|
I2C_data = TCA9548A_CHANNEL_5;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 5:
|
|
case 5:
|
|
|
I2C_data = TCA9548A_CHANNEL_6;
|
|
I2C_data = TCA9548A_CHANNEL_6;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 6:
|
|
case 6:
|
|
|
I2C_data = TCA9548A_CHANNEL_7;
|
|
I2C_data = TCA9548A_CHANNEL_7;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 7:
|
|
case 7:
|
|
|
I2C_data = TCA9548A_CHANNEL_8;
|
|
I2C_data = TCA9548A_CHANNEL_8;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 8:
|
|
case 8:
|
|
|
|
|
|
|
|
I2C_data = TCA9548A_CHANNEL_1;
|
|
I2C_data = TCA9548A_CHANNEL_1;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
|
|
|
HAL_Delay(50);
|
|
HAL_Delay(50);
|
|
|
I2C_data = TCA9548A_CHANNEL_0;
|
|
I2C_data = TCA9548A_CHANNEL_0;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
HAL_Delay(50);
|
|
HAL_Delay(50);
|
|
|
I2C_data = TCA9548A_CHANNEL_2;
|
|
I2C_data = TCA9548A_CHANNEL_2;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 9:
|
|
case 9:
|
|
|
// I2C_data = TCA9548A_CHANNEL_0;
|
|
// I2C_data = TCA9548A_CHANNEL_0;
|
|
|
// I2CWriteOneByte(I2C0,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
// I2CWriteOneByte(I2C0,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
// DelayMS(100);
|
|
// DelayMS(100);
|
|
|
I2C_data = TCA9548A_CHANNEL_3;
|
|
I2C_data = TCA9548A_CHANNEL_3;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
case 10:
|
|
case 10:
|
|
|
// I2C_data = TCA9548A_CHANNEL_0;
|
|
// I2C_data = TCA9548A_CHANNEL_0;
|
|
|
// I2CWriteOneByte(I2C0,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
// I2CWriteOneByte(I2C0,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
// DelayMS(100);
|
|
// DelayMS(100);
|
|
|
I2C_data = TCA9548A_CHANNEL_4;
|
|
I2C_data = TCA9548A_CHANNEL_4;
|
|
|
- I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void SensorMeasurementFactor(uint8_t measfactor)
|
|
|
|
|
|
|
+void SensorMeasurementFactor(ColorSensor *CS, uint8_t measfactor)
|
|
|
{
|
|
{
|
|
|
- I2CWriteOneByte(&hi2c1,RGB381_ADDR,RGB381_MeasRate,measfactor);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_MeasRate,measfactor);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void SensorSetGain(uint8_t gain)
|
|
|
|
|
|
|
+void SensorSetGain(ColorSensor *CS, uint8_t gain)
|
|
|
{
|
|
{
|
|
|
- I2CWriteOneByte(&hi2c1,RGB381_ADDR,RGB381_Gain,gain);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_Gain,gain);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-uint8_t SensorGetID(uint8_t ID)
|
|
|
|
|
|
|
+uint8_t SensorGetID(ColorSensor *CS)
|
|
|
{
|
|
{
|
|
|
- TCA9548A_SetChannel(ID);
|
|
|
|
|
|
|
+ TCA9548A_SetChannel(CS);
|
|
|
HAL_Delay(100);
|
|
HAL_Delay(100);
|
|
|
- return I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_PartID);
|
|
|
|
|
|
|
+ return I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_PartID);
|
|
|
// return I2CReadOneByte(I2C0,RGB381_ADDR,RGB381_PartID);
|
|
// return I2CReadOneByte(I2C0,RGB381_ADDR,RGB381_PartID);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -165,11 +167,11 @@ void SensorGetRawData(ColorSensor *CS)
|
|
|
uint32_t u32LastTick;
|
|
uint32_t u32LastTick;
|
|
|
uint32_t time;
|
|
uint32_t time;
|
|
|
|
|
|
|
|
- TCA9548A_SetChannel(CS->ID);
|
|
|
|
|
|
|
+ TCA9548A_SetChannel(CS);
|
|
|
HAL_Delay(40);
|
|
HAL_Delay(40);
|
|
|
u32LastTick = sysinf.ms_conter;
|
|
u32LastTick = sysinf.ms_conter;
|
|
|
time = u32LastTick - u32StartTick;
|
|
time = u32LastTick - u32StartTick;
|
|
|
- while((I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_MainState)&0x08)==0x08){
|
|
|
|
|
|
|
+ while((I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_MainState)&0x08)==0x08){
|
|
|
// 超时检测
|
|
// 超时检测
|
|
|
u32LastTick = sysinf.ms_conter;
|
|
u32LastTick = sysinf.ms_conter;
|
|
|
time = u32LastTick - u32StartTick;
|
|
time = u32LastTick - u32StartTick;
|
|
@@ -186,14 +188,14 @@ void SensorGetRawData(ColorSensor *CS)
|
|
|
};
|
|
};
|
|
|
HAL_Delay(10);
|
|
HAL_Delay(10);
|
|
|
// LOG_E("error_state :%d\n",time);
|
|
// LOG_E("error_state :%d\n",time);
|
|
|
- CS->RDR=(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataLow)|
|
|
|
|
|
- (I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataMid)<<8)|
|
|
|
|
|
- (I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataHIG)<<16));
|
|
|
|
|
|
|
+ CS->RDR=(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataLow)|
|
|
|
|
|
+ (I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataMid)<<8)|
|
|
|
|
|
+ (I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataHIG)<<16));
|
|
|
if(CS->RDR == 0){
|
|
if(CS->RDR == 0){
|
|
|
HAL_Delay(10);
|
|
HAL_Delay(10);
|
|
|
- CS->RDR=(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataLow)|
|
|
|
|
|
- (I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataMid)<<8)|
|
|
|
|
|
- (I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataHIG)<<16));
|
|
|
|
|
|
|
+ CS->RDR=(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataLow)|
|
|
|
|
|
+ (I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataMid)<<8)|
|
|
|
|
|
+ (I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataHIG)<<16));
|
|
|
if(CS->RDR == 0){
|
|
if(CS->RDR == 0){
|
|
|
Van_Device_Printf(VAN_LOG_ERROR, "error_Data\n");
|
|
Van_Device_Printf(VAN_LOG_ERROR, "error_Data\n");
|
|
|
}
|
|
}
|
|
@@ -208,9 +210,9 @@ void SensorGetRawData(ColorSensor *CS)
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void SensorEnable(void)
|
|
|
|
|
|
|
+void SensorEnable(ColorSensor *CS)
|
|
|
{
|
|
{
|
|
|
- I2CWriteOneByte(&hi2c1,RGB381_ADDR,RGB381_MainCtrl,CS_Modle|ALS_Active);
|
|
|
|
|
|
|
+ I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_MainCtrl,CS_Modle|ALS_Active);
|
|
|
HAL_Delay(10);
|
|
HAL_Delay(10);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -218,11 +220,11 @@ uint8_t SensorInit(ColorSensor *CS)
|
|
|
{
|
|
{
|
|
|
|
|
|
|
|
Refresh_IWDG();
|
|
Refresh_IWDG();
|
|
|
- if(SensorGetID(CS->ID)==0xC2)// device id is 0xC2
|
|
|
|
|
|
|
+ if(SensorGetID(CS)==0xC2)// device id is 0xC2
|
|
|
{
|
|
{
|
|
|
- SensorEnable();
|
|
|
|
|
- SensorMeasurementFactor(ALS_MeasRes_17B|ALS_MeasRate_50ms);
|
|
|
|
|
- SensorSetGain(ALS_Gain_9X);
|
|
|
|
|
|
|
+ SensorEnable(CS);
|
|
|
|
|
+ SensorMeasurementFactor(CS,ALS_MeasRes_17B|ALS_MeasRate_50ms);
|
|
|
|
|
+ SensorSetGain(CS,ALS_Gain_9X);
|
|
|
CS->TtMax=0.0;
|
|
CS->TtMax=0.0;
|
|
|
// CS->TtNow=0.0;
|
|
// CS->TtNow=0.0;
|
|
|
// CS->ColDifInit=0.0;
|
|
// CS->ColDifInit=0.0;
|
|
@@ -251,24 +253,26 @@ uint8_t SensorInit(ColorSensor *CS)
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-int SensorSelfCheckPass(void)
|
|
|
|
|
|
|
+int SensorSelfCheckPass(uint8_t number)
|
|
|
{
|
|
{
|
|
|
- SensorState1=SensorInit(&CS[0]);
|
|
|
|
|
- SensorState2=SensorInit(&CS[1]);
|
|
|
|
|
- SensorState3=SensorInit(&CS[2]);
|
|
|
|
|
- SensorState4=SensorInit(&CS[3]);
|
|
|
|
|
- SensorState5=SensorInit(&CS[4]);
|
|
|
|
|
- SensorState6=SensorInit(&CS[5]);
|
|
|
|
|
- SensorState7=SensorInit(&CS[6]);
|
|
|
|
|
- SensorState8=SensorInit(&CS[7]);
|
|
|
|
|
- SensorState9=SensorInit(&CS[8]);
|
|
|
|
|
- SensorState10=SensorInit(&CS[9]);
|
|
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
|
|
+ SensorState1=SensorInit(&pGroup[0]);
|
|
|
|
|
+ SensorState2=SensorInit(&pGroup[1]);
|
|
|
|
|
+ SensorState3=SensorInit(&pGroup[2]);
|
|
|
|
|
+ SensorState4=SensorInit(&pGroup[3]);
|
|
|
|
|
+ SensorState5=SensorInit(&pGroup[4]);
|
|
|
|
|
+ SensorState6=SensorInit(&pGroup[5]);
|
|
|
|
|
+ SensorState7=SensorInit(&pGroup[6]);
|
|
|
|
|
+ SensorState8=SensorInit(&pGroup[7]);
|
|
|
|
|
+ SensorState9=SensorInit(&pGroup[8]);
|
|
|
|
|
+ SensorState10=SensorInit(&pGroup[9]);
|
|
|
|
|
|
|
|
if(SensorState1|SensorState2|SensorState3|SensorState4|SensorState5|SensorState6|SensorState7|SensorState8|SensorState9|SensorState10)
|
|
if(SensorState1|SensorState2|SensorState3|SensorState4|SensorState5|SensorState6|SensorState7|SensorState8|SensorState9|SensorState10)
|
|
|
return 0;
|
|
return 0;
|
|
|
else return 1;
|
|
else return 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
void SensorGetCalData(ColorSensor *CS)
|
|
void SensorGetCalData(ColorSensor *CS)
|
|
|
{
|
|
{
|
|
|
// SensorGetRawData(CS);
|
|
// SensorGetRawData(CS);
|
|
@@ -278,6 +282,10 @@ void SensorGetCalData(ColorSensor *CS)
|
|
|
|
|
|
|
|
void SensorInitial(void)
|
|
void SensorInitial(void)
|
|
|
{
|
|
{
|
|
|
|
|
+ for (int i = 0; i < CS_MAX; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ CS[i].IICPort = &hi2c1;
|
|
|
|
|
+ }
|
|
|
CS[0].ID = Sensor1;
|
|
CS[0].ID = Sensor1;
|
|
|
CS[1].ID = Sensor2;
|
|
CS[1].ID = Sensor2;
|
|
|
CS[2].ID = Sensor3;
|
|
CS[2].ID = Sensor3;
|
|
@@ -288,6 +296,23 @@ void SensorInitial(void)
|
|
|
CS[7].ID = Sensor8;
|
|
CS[7].ID = Sensor8;
|
|
|
CS[8].ID = Sensor9;
|
|
CS[8].ID = Sensor9;
|
|
|
CS[9].ID = Sensor10;
|
|
CS[9].ID = Sensor10;
|
|
|
|
|
+
|
|
|
|
|
+#ifdef ONECHIP_MINI_PLUS
|
|
|
|
|
+ for (int i = 0; i < CS_MAX; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ CS_Slave[i].IICPort = &hi2c2;
|
|
|
|
|
+ }
|
|
|
|
|
+ CS_Slave[0].ID = Sensor1;
|
|
|
|
|
+ CS_Slave[1].ID = Sensor2;
|
|
|
|
|
+ CS_Slave[2].ID = Sensor3;
|
|
|
|
|
+ CS_Slave[3].ID = Sensor4;
|
|
|
|
|
+ CS_Slave[4].ID = Sensor5;
|
|
|
|
|
+ CS_Slave[5].ID = Sensor6;
|
|
|
|
|
+ CS_Slave[6].ID = Sensor7;
|
|
|
|
|
+ CS_Slave[7].ID = Sensor8;
|
|
|
|
|
+ CS_Slave[8].ID = Sensor9;
|
|
|
|
|
+ CS_Slave[9].ID = Sensor10;
|
|
|
|
|
+#endif
|
|
|
}
|
|
}
|
|
|
int Returntozero(ColorSensor *CS) //lxx-add-2022.12.26
|
|
int Returntozero(ColorSensor *CS) //lxx-add-2022.12.26
|
|
|
{
|
|
{
|
|
@@ -368,75 +393,76 @@ void Sensor_calibration_data(ColorSensor *CS) //lxx_add_2023.07.27
|
|
|
{
|
|
{
|
|
|
CS->RtR = (CS->CDR-CS->RDR)*CS->gain;
|
|
CS->RtR = (CS->CDR-CS->RDR)*CS->gain;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-void sample_first_zero(void)
|
|
|
|
|
|
|
+void sample_first_zero(uint8_t number)
|
|
|
{
|
|
{
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- Returntozero(&CS[i]);
|
|
|
|
|
|
|
+ Returntozero(&pGroup[i]);
|
|
|
//从零点输出
|
|
//从零点输出
|
|
|
- Sensor_calibration_data(&CS[i]);
|
|
|
|
|
|
|
+ Sensor_calibration_data(&pGroup[i]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-int check_first_zero(void)
|
|
|
|
|
|
|
+int check_first_zero(uint8_t number)
|
|
|
{
|
|
{
|
|
|
int noAlignNum = 0;
|
|
int noAlignNum = 0;
|
|
|
-
|
|
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- if(Returntozero(&CS[i]) == 1){
|
|
|
|
|
|
|
+ if(Returntozero(&pGroup[i]) == 1){
|
|
|
noAlignNum ++;
|
|
noAlignNum ++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if(noAlignNum == 0){
|
|
if(noAlignNum == 0){
|
|
|
error_clear();
|
|
error_clear();
|
|
|
return 0;
|
|
return 0;
|
|
|
- }else{
|
|
|
|
|
- error_set(ERROR_SENSOR_CARD_CHECK);
|
|
|
|
|
|
|
+ }else{
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void sample_calibrate_calc(uint32_t times)
|
|
|
|
|
|
|
+void sample_calibrate_calc(uint32_t times,uint8_t number)
|
|
|
{
|
|
{
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
Refresh_IWDG();
|
|
Refresh_IWDG();
|
|
|
- SensorGetRawData(&CS[i]); // get the original data every 1S
|
|
|
|
|
|
|
+ SensorGetRawData(&pGroup[i]); // get the original data every 1S
|
|
|
if(CS->RDR == 0){
|
|
if(CS->RDR == 0){
|
|
|
// if(!(g_cfg.skip_CheckOrRun & SKIP_CHECK_CARDINSERT)){
|
|
// if(!(g_cfg.skip_CheckOrRun & SKIP_CHECK_CARDINSERT)){
|
|
|
// error_set(ERROR_SENSOR_SELF_CHECK);
|
|
// error_set(ERROR_SENSOR_SELF_CHECK);
|
|
|
// return;
|
|
// return;
|
|
|
// }
|
|
// }
|
|
|
}
|
|
}
|
|
|
- Sensor_calibration_data(&CS[i]);
|
|
|
|
|
|
|
+ Sensor_calibration_data(&pGroup[i]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (times < 19)
|
|
if (times < 19)
|
|
|
{
|
|
{
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- Get_SAMP_DATA(&CS[i]);// save the returntozero data in 30minutes
|
|
|
|
|
|
|
+ Get_SAMP_DATA(&pGroup[i]);// save the returntozero data in 30minutes
|
|
|
}
|
|
}
|
|
|
// samp_num++;
|
|
// samp_num++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void sample_calc_avg_std(void)
|
|
|
|
|
|
|
+void sample_calc_avg_std(uint8_t number)
|
|
|
{
|
|
{
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- Get_average(&CS[i]);
|
|
|
|
|
- Get_STD(&CS[i]);
|
|
|
|
|
|
|
+ Get_average(&pGroup[i]);
|
|
|
|
|
+ Get_STD(&pGroup[i]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void sample_calc_tt(void)
|
|
|
|
|
|
|
+void sample_calc_tt(uint8_t number)
|
|
|
{
|
|
{
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- Get_Tt(&CS[i]);
|
|
|
|
|
|
|
+ Get_Tt(&pGroup[i]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
void SingleChannelJudge(ColorSensor *CS)
|
|
void SingleChannelJudge(ColorSensor *CS)
|
|
@@ -451,11 +477,12 @@ void SingleChannelJudge(ColorSensor *CS)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
-void SystemResaultJudge(void)
|
|
|
|
|
|
|
+void SystemResaultJudge(uint8_t number)
|
|
|
{
|
|
{
|
|
|
|
|
+
|
|
|
int nc_index = 0; //内参
|
|
int nc_index = 0; //内参
|
|
|
uint8_t *p = &result.hole1_result; //孔结果
|
|
uint8_t *p = &result.hole1_result; //孔结果
|
|
|
-
|
|
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
result.Devicenum = 0;
|
|
result.Devicenum = 0;
|
|
|
strcpy(result.card_num,sysinf.psmMaster.card_param_info.pid);
|
|
strcpy(result.card_num,sysinf.psmMaster.card_param_info.pid);
|
|
|
// result.card_num = card_param_info.pid;
|
|
// result.card_num = card_param_info.pid;
|
|
@@ -471,41 +498,47 @@ void SystemResaultJudge(void)
|
|
|
result.hole9_item = sysinf.psmMaster.card_param_info.hole_info[8].item;
|
|
result.hole9_item = sysinf.psmMaster.card_param_info.hole_info[8].item;
|
|
|
result.hole10_item = sysinf.psmMaster.card_param_info.hole_info[9].item;
|
|
result.hole10_item = sysinf.psmMaster.card_param_info.hole_info[9].item;
|
|
|
|
|
|
|
|
- result.hole1_Tt[0] = (uint8_t)CS[0].Tt;
|
|
|
|
|
- result.hole1_Tt[1] = (uint8_t)((CS[0].Tt-(uint8_t)CS[0].Tt)*100);
|
|
|
|
|
- result.hole2_Tt[0] = (uint8_t)CS[1].Tt;
|
|
|
|
|
- result.hole2_Tt[1] = (uint8_t)((CS[1].Tt-(uint8_t)CS[1].Tt)*100);
|
|
|
|
|
- result.hole3_Tt[0] = (uint8_t)CS[2].Tt;
|
|
|
|
|
- result.hole3_Tt[1] = (uint8_t)((CS[2].Tt-(uint8_t)CS[2].Tt)*100);
|
|
|
|
|
- result.hole4_Tt[0] = (uint8_t)CS[3].Tt;
|
|
|
|
|
- result.hole4_Tt[1] = (uint8_t)((CS[3].Tt-(uint8_t)CS[3].Tt)*100);
|
|
|
|
|
- result.hole5_Tt[0] = (uint8_t)CS[4].Tt;
|
|
|
|
|
- result.hole5_Tt[1] = (uint8_t)((CS[4].Tt-(uint8_t)CS[4].Tt)*100);
|
|
|
|
|
- result.hole6_Tt[0] = (uint8_t)CS[5].Tt;
|
|
|
|
|
- result.hole6_Tt[1] = (uint8_t)((CS[5].Tt-(uint8_t)CS[5].Tt)*100);
|
|
|
|
|
- result.hole7_Tt[0] = (uint8_t)CS[6].Tt;
|
|
|
|
|
- result.hole7_Tt[1] = (uint8_t)((CS[6].Tt-(uint8_t)CS[6].Tt)*100);
|
|
|
|
|
- result.hole8_Tt[0] = (uint8_t)CS[7].Tt;
|
|
|
|
|
- result.hole8_Tt[1] = (uint8_t)((CS[7].Tt-(uint8_t)CS[7].Tt)*100);
|
|
|
|
|
- result.hole9_Tt[0] = (uint8_t)CS[8].Tt;
|
|
|
|
|
- result.hole9_Tt[1] = (uint8_t)((CS[8].Tt-(uint8_t)CS[8].Tt)*100);
|
|
|
|
|
- result.hole10_Tt[0] = (uint8_t)CS[9].Tt;
|
|
|
|
|
- result.hole10_Tt[1] = (uint8_t)((CS[9].Tt-(uint8_t)CS[9].Tt)*100);
|
|
|
|
|
|
|
+ result.hole1_Tt[0] = (uint8_t)pGroup[0].Tt;
|
|
|
|
|
+ result.hole1_Tt[1] = (uint8_t)((pGroup[0].Tt-(uint8_t)pGroup[0].Tt)*100);
|
|
|
|
|
+ result.hole2_Tt[0] = (uint8_t)pGroup[1].Tt;
|
|
|
|
|
+ result.hole2_Tt[1] = (uint8_t)((pGroup[1].Tt-(uint8_t)pGroup[1].Tt)*100);
|
|
|
|
|
+ result.hole3_Tt[0] = (uint8_t)pGroup[2].Tt;
|
|
|
|
|
+ result.hole3_Tt[1] = (uint8_t)((pGroup[2].Tt-(uint8_t)pGroup[2].Tt)*100);
|
|
|
|
|
+ result.hole4_Tt[0] = (uint8_t)pGroup[3].Tt;
|
|
|
|
|
+ result.hole4_Tt[1] = (uint8_t)((pGroup[3].Tt-(uint8_t)pGroup[3].Tt)*100);
|
|
|
|
|
+ result.hole5_Tt[0] = (uint8_t)pGroup[4].Tt;
|
|
|
|
|
+ result.hole5_Tt[1] = (uint8_t)((pGroup[4].Tt-(uint8_t)pGroup[4].Tt)*100);
|
|
|
|
|
+ result.hole6_Tt[0] = (uint8_t)pGroup[5].Tt;
|
|
|
|
|
+ result.hole6_Tt[1] = (uint8_t)((pGroup[5].Tt-(uint8_t)pGroup[5].Tt)*100);
|
|
|
|
|
+ result.hole7_Tt[0] = (uint8_t)pGroup[6].Tt;
|
|
|
|
|
+ result.hole7_Tt[1] = (uint8_t)((pGroup[6].Tt-(uint8_t)pGroup[6].Tt)*100);
|
|
|
|
|
+ result.hole8_Tt[0] = (uint8_t)pGroup[7].Tt;
|
|
|
|
|
+ result.hole8_Tt[1] = (uint8_t)((pGroup[7].Tt-(uint8_t)pGroup[7].Tt)*100);
|
|
|
|
|
+ result.hole9_Tt[0] = (uint8_t)pGroup[8].Tt;
|
|
|
|
|
+ result.hole9_Tt[1] = (uint8_t)((pGroup[8].Tt-(uint8_t)pGroup[8].Tt)*100);
|
|
|
|
|
+ result.hole10_Tt[0] = (uint8_t)pGroup[9].Tt;
|
|
|
|
|
+ result.hole10_Tt[1] = (uint8_t)((pGroup[9].Tt-(uint8_t)pGroup[9].Tt)*100);
|
|
|
|
|
|
|
|
//判断孔结果
|
|
//判断孔结果
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- SingleChannelJudge(&CS[i]);
|
|
|
|
|
- *p = CS[i].Result;
|
|
|
|
|
|
|
+ SingleChannelJudge(&pGroup[i]);
|
|
|
|
|
+ *p = pGroup[i].Result;
|
|
|
p += 5;
|
|
p += 5;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
//找id == -1
|
|
//找id == -1
|
|
|
for(nc_index = 0; nc_index < 10; nc_index++)
|
|
for(nc_index = 0; nc_index < 10; nc_index++)
|
|
|
- {
|
|
|
|
|
- if(sysinf.psmMaster.card_param_info.hole_info[nc_index].item == 0xFF)
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ { if((number == 0)){
|
|
|
|
|
+
|
|
|
|
|
+ if(sysinf.psmMaster.card_param_info.hole_info[nc_index].item == 0xFF)
|
|
|
|
|
+ break;
|
|
|
|
|
+ }else{
|
|
|
|
|
+
|
|
|
|
|
+ if(sysinf.psmSlave.card_param_info.hole_info[nc_index].item == 0xFF)
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
if(nc_index == 10)
|
|
if(nc_index == 10)
|
|
|
{
|
|
{
|
|
@@ -514,11 +547,11 @@ void SystemResaultJudge(void)
|
|
|
|
|
|
|
|
//判断最终检测结果
|
|
//判断最终检测结果
|
|
|
p = &result.hole1_item_result; //检测结果
|
|
p = &result.hole1_item_result; //检测结果
|
|
|
- if(CS[nc_index].Result == ResultPositive) //内参结果为阳
|
|
|
|
|
|
|
+ if(pGroup[nc_index].Result == ResultPositive) //内参结果为阳
|
|
|
{
|
|
{
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- if(CS[i].Result==ResultPositive) //孔结果为阳,最终结果为阳
|
|
|
|
|
|
|
+ if(pGroup[i].Result==ResultPositive) //孔结果为阳,最终结果为阳
|
|
|
{
|
|
{
|
|
|
*p = ResultPositive;
|
|
*p = ResultPositive;
|
|
|
}
|
|
}
|
|
@@ -533,7 +566,7 @@ void SystemResaultJudge(void)
|
|
|
{
|
|
{
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- if(CS[i].Result==ResultPositive) //孔结果为阳,最终结果为阳
|
|
|
|
|
|
|
+ if(pGroup[i].Result==ResultPositive) //孔结果为阳,最终结果为阳
|
|
|
{
|
|
{
|
|
|
*p = ResultPositive;
|
|
*p = ResultPositive;
|
|
|
}
|
|
}
|
|
@@ -548,27 +581,39 @@ void SystemResaultJudge(void)
|
|
|
//内参自身检测结果,等于孔结果
|
|
//内参自身检测结果,等于孔结果
|
|
|
p = &result.hole1_item_result; //检测结果
|
|
p = &result.hole1_item_result; //检测结果
|
|
|
p += 5*nc_index;
|
|
p += 5*nc_index;
|
|
|
- *p = CS[nc_index].Result;
|
|
|
|
|
|
|
+ *p = pGroup[nc_index].Result;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
-void sample_calc_result(void)
|
|
|
|
|
|
|
+void sample_calc_result(uint8_t number)
|
|
|
{
|
|
{
|
|
|
- for (int i = 0; i < CS_MAX; i++)
|
|
|
|
|
- {
|
|
|
|
|
- //从二维码获取Tt范围
|
|
|
|
|
- CS[i].TtMax = sysinf.psmMaster.card_param_info.hole_info[i].TtMax[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMax[1] / 100.0f;
|
|
|
|
|
- CS[i].TtMin = sysinf.psmMaster.card_param_info.hole_info[i].TtMin[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMin[1] / 100.0f;
|
|
|
|
|
|
|
+ if(number == 0){
|
|
|
|
|
+ for (int i = 0; i < CS_MAX; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ //从二维码获取Tt范围
|
|
|
|
|
+ CS[i].TtMax = sysinf.psmMaster.card_param_info.hole_info[i].TtMax[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMax[1] / 100.0f;
|
|
|
|
|
+ CS[i].TtMin = sysinf.psmMaster.card_param_info.hole_info[i].TtMin[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMin[1] / 100.0f;
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ for (int i = 0; i < CS_MAX; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ //从二维码获取Tt范围
|
|
|
|
|
+ CS_Slave[i].TtMax = sysinf.psmSlave.card_param_info.hole_info[i].TtMax[0] + sysinf.psmSlave.card_param_info.hole_info[i].TtMax[1] / 100.0f;
|
|
|
|
|
+ CS_Slave[i].TtMin = sysinf.psmSlave.card_param_info.hole_info[i].TtMin[0] + sysinf.psmSlave.card_param_info.hole_info[i].TtMin[1] / 100.0f;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- SystemResaultJudge();
|
|
|
|
|
|
|
+ SystemResaultJudge(number);
|
|
|
}
|
|
}
|
|
|
-void calc_balance(void)
|
|
|
|
|
|
|
+void calc_balance(uint8_t number)
|
|
|
{
|
|
{
|
|
|
|
|
+ ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
|
|
|
// 获取插卡前白平衡值
|
|
// 获取插卡前白平衡值
|
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
for (int i = 0; i < CS_MAX; i++)
|
|
|
{
|
|
{
|
|
|
- Get_GAIN(&CS[i]);
|
|
|
|
|
|
|
+ Get_GAIN(&pGroup[i]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|