This commit is contained in:
2025-10-21 10:00:16 +08:00
parent 8cc1c91bc1
commit e67749e2e4
5 changed files with 204 additions and 159 deletions

View File

@ -21,6 +21,7 @@ STRSensorInfo SensorIS11::initSensor()
radiance_struct_down.offset[i] = 0; radiance_struct_down.offset[i] = 0;
} }
SensorInfo.BandNum = 2048; SensorInfo.BandNum = 2048;
SensorInfo.maxValue = 65535;
uint8_t buff[4]; uint8_t buff[4];
String path2 = "/system/index.bin"; String path2 = "/system/index.bin";
File file; File file;
@ -192,45 +193,106 @@ void SensorIS11::GetOneDate(int msc)
//获取SHUTTER时间返回的是最大值 //获取SHUTTER时间返回的是最大值
// int SensorIS11::OptSnenser(int persent)
// {
// long maxtime = 20000;
// int maxvalue=SensorInfo.maxValue*1.0*persent / 100;
// int maxvaluenow = 0;
// static float shutternow = 100;
// GetOneDate(100);
// maxvaluenow= Getmaxvalue(DATABUFF, SensorInfo.BandNum);
// // Serial.print("now Shutter is :");
// // Serial.print(shutternow);
// // Serial.print(" maxvalue is :");
// // Serial.println(maxvaluenow);
// // write_log(log_path,"now Shutter is :"+String(shutternow)+" maxvalue is :"+String(maxvaluenow),10);
// static int numberoftry;
// write_log(log_path,"numberoftry is :"+String(numberoftry),10);
// while (maxvaluenow<maxvalue*0.95 || maxvaluenow>maxvalue) {
// if(numberoftry == 0) shutternow = 100;
// if (maxvaluenow > maxvalue)
// {
// shutternow = shutternow *0.7;
// }
// else
// {
// shutternow = maxvalue * 0.98 / (maxvaluenow * 1.0)*shutternow + 1;
// }
// if (shutternow > maxtime)
// {
// shutternow = maxtime;
// break;
// }
// GetOneDate(shutternow);
// maxvaluenow= Getmaxvalue(DATABUFF, SensorInfo.BandNum);
// #ifdef ARDUINO
// // Serial.print("now Shutter is :");
// // Serial.print(shutternow);
// // Serial.print(" maxvalue is :");
// // Serial.println(maxvaluenow);
// // write_log(log_path,"now Shutter is :"+String(shutternow)+" maxvalue is :"+String(maxvaluenow),10);
// #endif
// numberoftry++;
// if (numberoftry > 200)
// {
// numberoftry = 1;
// return maxtime;
// }
// if (shutternow == maxtime)
// {
// return maxtime;
// }
// vTaskDelay(1);
// }
// #ifdef ARDUINO
// // Serial.print("zi dong value:");
// // Serial.println(shutternow);
// write_log(log_path,"zi dong value:"+String(shutternow),10);
// #endif
// if (shutternow<0)
// {
// shutternow=maxtime;
// /* code */
// }
// write_log(log_path,"Finish OptSnenser",10);
// shutternow = shutternow;
// return shutternow;
// }
int SensorIS11::OptSnenser(int persent) int SensorIS11::OptSnenser(int persent)
{ {
long maxtime = 20000; long maxtime = 20000;
int maxvalue=SensorInfo.maxValue*1.0*persent / 100; int minvalue=(float)SensorInfo.maxValue * ((float)persent / 100.f);
int maxvalue=(float)SensorInfo.maxValue * 0.95;
int maxvaluenow = 0; int maxvaluenow = 0;
static float shutternow = 100; int shutternow = 100;
GetOneDate(100); GetOneDate(shutternow);
maxvaluenow= Getmaxvalue(DATABUFF, SensorInfo.BandNum); maxvaluenow= Getmaxvalue(DATABUFF, SensorInfo.BandNum);
// Serial.print("now Shutter is :");
// Serial.print(shutternow);
// Serial.print(" maxvalue is :");
// Serial.println(maxvaluenow);
// write_log(log_path,"now Shutter is :"+String(shutternow)+" maxvalue is :"+String(maxvaluenow),10);
static int numberoftry; int numberoftry = 0;
write_log(log_path,"numberoftry is :"+String(numberoftry),10); while (maxvaluenow<minvalue || maxvaluenow>maxvalue)
while (maxvaluenow<maxvalue*0.95 || maxvaluenow>maxvalue) { {
if(numberoftry == 0) shutternow = 100;
if (maxvaluenow > maxvalue) if (maxvaluenow > maxvalue)
{ {
shutternow = shutternow *0.7; shutternow = shutternow *0.7;
} }
else else
{ {
shutternow = maxvalue * 0.98 / (maxvaluenow * 1.0)*shutternow + 1; shutternow = ((float)maxvalue / (float)(maxvaluenow)) *shutternow + 1;
} }
if (shutternow > maxtime) if (shutternow > maxtime)
{ {
shutternow = maxtime; shutternow = maxtime;
break; break;
} }
GetOneDate(shutternow); GetOneDate(shutternow);
maxvaluenow= Getmaxvalue(DATABUFF, SensorInfo.BandNum); maxvaluenow = Getmaxvalue(DATABUFF, SensorInfo.BandNum);
#ifdef ARDUINO #ifdef ARDUINO
// Serial.print("now Shutter is :");
// Serial.print(shutternow);
// Serial.print(" maxvalue is :");
// Serial.println(maxvaluenow);
// write_log(log_path,"now Shutter is :"+String(shutternow)+" maxvalue is :"+String(maxvaluenow),10);
#endif #endif
numberoftry++; numberoftry++;
if (numberoftry > 200) if (numberoftry > 200)
@ -238,16 +300,14 @@ int SensorIS11::OptSnenser(int persent)
numberoftry = 1; numberoftry = 1;
return maxtime; return maxtime;
} }
if (shutternow == maxtime) if (shutternow == maxtime)
{ {
return maxtime; return maxtime;
} }
vTaskDelay(1); vTaskDelay(1);
} }
#ifdef ARDUINO #ifdef ARDUINO
// Serial.print("zi dong value:");
// Serial.println(shutternow);
write_log(log_path,"zi dong value:"+String(shutternow),10); write_log(log_path,"zi dong value:"+String(shutternow),10);
#endif #endif
if (shutternow<0) if (shutternow<0)
@ -260,6 +320,10 @@ int SensorIS11::OptSnenser(int persent)
return shutternow; return shutternow;
} }
void SensorIS11::shortLittletoBiG(unsigned short *data,int lenth) void SensorIS11::shortLittletoBiG(unsigned short *data,int lenth)
{ {
CoverLittleAndBig((char *)data,lenth); CoverLittleAndBig((char *)data,lenth);
@ -457,23 +521,64 @@ void SensorIS11::TakeOneJob()
ds1302_date.getDateTime(&sys_time); ds1302_date.getDateTime(&sys_time);
String time = String(sys_time.year) +"."+ String(sys_time.month) +"."+ String(sys_time.day)+" "+String(sys_time.hour)+":"+String(sys_time.minute)+":"+String(sys_time.second); String time = String(sys_time.year) +"."+ String(sys_time.month) +"."+ String(sys_time.day)+" "+String(sys_time.hour)+":"+String(sys_time.minute)+":"+String(sys_time.second);
write_log(log_path,time + " start take one job",10); write_log(log_path,time + " start take one job",10);
SensorInfo.BandNum = 2048;
work_progress = 0 ; work_progress = 0 ;
float temp[8]; float temp[8];
getall_temp(temp); getall_temp(temp);
//opt_up opt_down dark_up dn_up dn_down dark_down //opt_up opt_down dark_up dn_up dn_down dark_down
// write_log(log_path,"start take one jon",20); // write_log(log_path,"start take one jon",20);
// write_log(log_path,"start",10); // write_log(log_path,"start",10);
//1 opt_up //1 opt_up
servo_direction(1); servo_direction(1);
SetShutter(2); SetShutter(2);
shutterup=OptSnenser(70); shutterup=OptSnenser(70);
shutterdown = shutterup;
SetShutter(1); SetShutter(1);
work_progress = 30; work_progress = 30;
//2 dark
//dark_up
SetShutter(1);
GetOneDate(shutterup);
for (int i = 0; i < SensorInfo.BandNum;i++)
{
IS11_datastruct_dark_up.data[i] = DATABUFF[i];
IS11_datastruct_dark_down.data[i] = DATABUFF[i];
}
IS11_datastruct_dark_up.type = 0;
IS11_datastruct_dark_up.direction = 2;
IS11_datastruct_dark_up.tuigan_stat = get_tuigan_status();
IS11_datastruct_dark_up.year = sys_time.year;
IS11_datastruct_dark_up.month = sys_time.month;
IS11_datastruct_dark_up.day = sys_time.day;
IS11_datastruct_dark_up.hour = sys_time.hour;
IS11_datastruct_dark_up.minute = sys_time.minute;
IS11_datastruct_dark_up.second = sys_time.second;
IS11_datastruct_dark_up.shutter_time = shutterup;
IS11_datastruct_dark_up.index = index;
memcpy(IS11_datastruct_dark_up.temprature,temp,8*sizeof(float));
// dark_down
IS11_datastruct_dark_down.type = 0;
IS11_datastruct_dark_down.direction = 3;
IS11_datastruct_dark_down.tuigan_stat = get_tuigan_status();
IS11_datastruct_dark_down.year = sys_time.year;
IS11_datastruct_dark_down.month = sys_time.month;
IS11_datastruct_dark_down.day = sys_time.day;
IS11_datastruct_dark_down.hour = sys_time.hour;
IS11_datastruct_dark_down.minute = sys_time.minute;
IS11_datastruct_dark_down.second = sys_time.second;
IS11_datastruct_dark_down.shutter_time = shutterdown;
IS11_datastruct_dark_down.index = index;
memcpy(IS11_datastruct_dark_down.temprature,temp,8*sizeof(float));
work_progress = 45;
//3 dn_up //3 dn_up
SensorInfo.BandNum = 2048; SetShutter(2);
GetOneDate(shutterup);
SetShutter(1);
for (int i = 0; i < SensorInfo.BandNum;i++) for (int i = 0; i < SensorInfo.BandNum;i++)
{ {
IS11_datastruct_up.data[i] = DATABUFF[i]; IS11_datastruct_up.data[i] = DATABUFF[i];
@ -490,74 +595,8 @@ void SensorIS11::TakeOneJob()
IS11_datastruct_up.shutter_time = shutterup; IS11_datastruct_up.shutter_time = shutterup;
IS11_datastruct_up.index = index; IS11_datastruct_up.index = index;
memcpy(IS11_datastruct_up.temprature,temp,8*sizeof(float)); memcpy(IS11_datastruct_up.temprature,temp,8*sizeof(float));
work_progress = 45;
//2 dark
//dark_up
SetShutter(1);
GetOneDate(shutterup);
for (int i = 0; i < SensorInfo.BandNum;i++)
{
IS11_datastruct_dark_up.data[i] = DATABUFF[i];
IS11_datastruct_dark_down.data[i] = DATABUFF[i];
}
IS11_datastruct_dark_up.type = 0;
IS11_datastruct_dark_up.direction = 2;
IS11_datastruct_dark_up.tuigan_stat = get_tuigan_status();
IS11_datastruct_dark_up.year = sys_time.year;
IS11_datastruct_dark_up.month = sys_time.month;
IS11_datastruct_dark_up.day = sys_time.day;
IS11_datastruct_dark_up.hour = sys_time.hour;
IS11_datastruct_dark_up.minute = sys_time.minute;
IS11_datastruct_dark_up.second = sys_time.second;
IS11_datastruct_dark_up.shutter_time = shutterup;
IS11_datastruct_dark_up.index = index;
memcpy(IS11_datastruct_dark_up.temprature,temp,8*sizeof(float));
//dark_down
IS11_datastruct_dark_down.type = 0;
IS11_datastruct_dark_down.direction = 3;
IS11_datastruct_dark_down.tuigan_stat = get_tuigan_status();
IS11_datastruct_dark_down.year = sys_time.year;
IS11_datastruct_dark_down.month = sys_time.month;
IS11_datastruct_dark_down.day = sys_time.day;
IS11_datastruct_dark_down.hour = sys_time.hour;
IS11_datastruct_dark_down.minute = sys_time.minute;
IS11_datastruct_dark_down.second = sys_time.second;
IS11_datastruct_dark_down.shutter_time = shutterdown;
IS11_datastruct_dark_down.index = index;
memcpy(IS11_datastruct_dark_down.temprature,temp,8*sizeof(float));
work_progress = 60; work_progress = 60;
// //3 dn_up
// servo_direction(1);
// SetShutter(2);
// shutterdown = shutterup;
// GetOneDate(shutterdown);
// SetShutter(1);
// SensorInfo.BandNum = 2048;
// for (int i = 0; i < SensorInfo.BandNum;i++)
// {
// IS11_datastruct_up.data[i] = DATABUFF[i];
// }
// IS11_datastruct_up.type = 0;
// IS11_datastruct_up.direction = 0;
// IS11_datastruct_up.tuigan_stat = get_tuigan_status();
// IS11_datastruct_up.year = sys_time.year;
// IS11_datastruct_up.month = sys_time.month;
// IS11_datastruct_up.day = sys_time.day;
// IS11_datastruct_up.hour = sys_time.hour;
// IS11_datastruct_up.minute = sys_time.minute;
// IS11_datastruct_up.second = sys_time.second;
// IS11_datastruct_up.shutter_time = shutterup;
// IS11_datastruct_up.index = index;
// memcpy(IS11_datastruct_up.temprature,temp,8*sizeof(float));
// work_progress = 60;
//4 dn_down //4 dn_down
servo_direction(0); servo_direction(0);
SetShutter(2); SetShutter(2);
@ -582,58 +621,6 @@ void SensorIS11::TakeOneJob()
servo_off(); servo_off();
work_progress = 75; work_progress = 75;
// work_progress = 90;
//save data to file
// if(!SD_MMC.exists("/guangpu_data/"+ String(sys_time.year)))
// {
// sdcard::Mkdir("/guangpu_data/"+ String(sys_time.year));
// }
// if(!SD_MMC.exists("/guangpu_data/"+ String(sys_time.year) + "/" + String(sys_time.month)))
// {
// sdcard::Mkdir("/guangpu_data/"+ String(sys_time.year) + "/" + String(sys_time.month));
// }
// if(!SD_MMC.exists("/guangpu_data/"+ String(sys_time.year) + "/" + String(sys_time.month) + "/" + String(sys_time.day)))
// {
// sdcard::Mkdir("/guangpu_data/"+ String(sys_time.year) + "/" + String(sys_time.month) + "/" + String(sys_time.day));
// }
// String path1 = "/guangpu_data/"+ String(sys_time.year) + "/" + String(sys_time.month) + "/" + String(sys_time.day)+"/"+ String(sys_time.hour) + "-" + String(sys_time.minute) + "-" + String(sys_time.second);
// // sdcard::Mkdir(path1);
// String path2 = path1 + "/up.bin";
// File file;
// file = SD_MMC.open(path2,"wb");
// file.write((uint8_t *)(&IS11_datastruct_up),sizeof(IS11_datastruct));
// file.flush();
// file.close();
// work_progress = 92;
// path2 = path1 + "/dark_up.bin";
// file = SD_MMC.open(path2,"wb");
// file.write((uint8_t *)(&IS11_datastruct_dark_up),sizeof(IS11_datastruct));
// file.flush();
// file.close();
// work_progress = 94;
// path2 = path1 + "/down.bin";
// file = SD_MMC.open(path2,"wb");
// file.write((uint8_t *)(&IS11_datastruct_down),sizeof(IS11_datastruct));
// file.flush();
// file.close();
// work_progress = 96;
// path2 = path1 + "/dark_down.bin";
// file = SD_MMC.open(path2,"wb");
// file.write((uint8_t *)(&IS11_datastruct_dark_down),sizeof(IS11_datastruct));
// file.flush();
// file.close();
// path2 = "/system/index.bin";
// file = SD_MMC.open(path2,"wb");
// file.write((uint8_t *) &index,4);
// file.flush();
// file.close();
write_log(log_path,"start SD.",10); write_log(log_path,"start SD.",10);
if(!SD_MMC.exists("/guangpu_data/"+ String(sys_time.year))) if(!SD_MMC.exists("/guangpu_data/"+ String(sys_time.year)))
{ {
@ -660,7 +647,7 @@ void SensorIS11::TakeOneJob()
file.write((uint8_t *)(&IS11_datastruct_dark_down),sizeof(IS11_datastruct)); file.write((uint8_t *)(&IS11_datastruct_dark_down),sizeof(IS11_datastruct));
file.flush(); file.flush();
file.close(); file.close();
work_progress = 92; work_progress = 90;
path2 = "/system/index.bin"; path2 = "/system/index.bin";
@ -855,35 +842,91 @@ void SensorIS11::send_chongcaiyang(HardwareSerial *wb485Serial,IS11_datastruct
void SensorIS11::get_fanshelv() void SensorIS11::get_fanshelv()
{ {
IS11_datastruct_fanshelv.type = 0x06; IS11_datastruct_fanshelv.type = 0x06;
IS11_datastruct_fanshelv.direction = IS11_datastruct_up.direction;
IS11_datastruct_fanshelv.tuigan_stat = IS11_datastruct_up.tuigan_stat;
IS11_datastruct_fanshelv.year = IS11_datastruct_up.year;
IS11_datastruct_fanshelv.month = IS11_datastruct_up.month;
IS11_datastruct_fanshelv.day = IS11_datastruct_up.day;
IS11_datastruct_fanshelv.minute = IS11_datastruct_up.minute;
IS11_datastruct_fanshelv.hour = IS11_datastruct_up.hour;
IS11_datastruct_fanshelv.second = IS11_datastruct_up.second;
IS11_datastruct_fanshelv.NCa = IS11_datastruct_up.NCa;
IS11_datastruct_fanshelv.NCb = IS11_datastruct_up.NCb;
IS11_datastruct_fanshelv.NCc = IS11_datastruct_up.NCc;
IS11_datastruct_fanshelv.NCc = 0;
IS11_datastruct_fanshelv.shutter_time = IS11_datastruct_up.shutter_time;
IS11_datastruct_fanshelv.index = IS11_datastruct_up.index;
for(int i = 0; i < 8;i++)
{
IS11_datastruct_fanshelv.temprature[i] = IS11_datastruct_up.temprature[i];
}
for (int i = 0; i < 2048;i++) for (int i = 0; i < 2048;i++)
{ {
IS11_datastruct_fanshelv.data[i] = IS11_datastruct_down.data[i] / IS11_datastruct_up.data[i]; IS11_datastruct_fanshelv.data[i] = (IS11_datastruct_down.data[i] - IS11_datastruct_dark_down.data[i]) / (IS11_datastruct_up.data[i] - IS11_datastruct_dark_up.data[i]);
if(fanshelv_struct.shutter == 1) if(fanshelv_struct.shutter == 1)
{ {
IS11_datastruct_fanshelv.data[i] =IS11_datastruct_fanshelv.data[i]*fanshelv_struct.gain[i]; IS11_datastruct_fanshelv.data[i] =IS11_datastruct_fanshelv.data[i]*fanshelv_struct.gain[i];
} }
} }
IS11_datastruct_fanshelv.NCa == 1; IS11_datastruct_fanshelv.NCa = 1;
} }
void SensorIS11::send_fanshelv(HardwareSerial *wb485Serial) // void SensorIS11::send_fanshelv(HardwareSerial *wb485Serial)
// {
// if(IS11_datastruct_fanshelv.NCa == 0)
// {
// get_fanshelv();
// }
// int32_t send_lenth;
// u_char *send_buff = new u_char[sizeof(IS11_datastruct) + 7];
// send_lenth = IRIS_Protocol_Pack(0x02,(uint16_t)sizeof(IS11_datastruct), (uint8_t *)(&IS11_datastruct_fanshelv),send_buff);
// wb485Serial->write(send_buff,send_lenth);
// delete send_buff;
// vTaskDelay(50);
// }
void SensorIS11::send_fanshelv(HardwareSerial * wb485Serial,uint32_t fengbao_num)
{ {
if(fengbao_num <= 1)
{
if(IS11_datastruct_fanshelv.NCa == 0) if(IS11_datastruct_fanshelv.NCa == 0)
{ {
get_fanshelv(); get_fanshelv();
} }
}
int32_t send_lenth; int32_t send_lenth;
u_char *send_buff = new u_char[sizeof(IS11_datastruct) + 7]; u_char *send_buff = new u_char[sizeof(IS11_datastruct) + 7];
if(fengbao_num >= 1)
{
u_char *data_buff = new u_char[960+1];
data_buff[0] = fengbao_num;
uint32_t x = sizeof(IS11_datastruct) / 960;
uint32_t n = 960;
if(fengbao_num == x+1)
{
data_buff[0] = fengbao_num | 0x80;
n = sizeof(IS11_datastruct) % 960;
}
memcpy(data_buff+1,(uint8_t *)(&IS11_datastruct_fanshelv)+960*(fengbao_num-1),n);
send_lenth = IRIS_Protocol_Pack(0x02,n+1,data_buff,send_buff);
wb485Serial->write(send_buff,send_lenth);
delete data_buff;
}
else
{
send_lenth = IRIS_Protocol_Pack(0x02,(uint16_t)sizeof(IS11_datastruct), (uint8_t *)(&IS11_datastruct_fanshelv),send_buff); send_lenth = IRIS_Protocol_Pack(0x02,(uint16_t)sizeof(IS11_datastruct), (uint8_t *)(&IS11_datastruct_fanshelv),send_buff);
wb485Serial->write(send_buff,send_lenth); wb485Serial->write(send_buff,send_lenth);
}
delete send_buff; delete send_buff;
vTaskDelay(50); vTaskDelay(50);
} }
void SensorIS11::calculation(float bochang1,float bochang2) void SensorIS11::calculation(float bochang1,float bochang2)
{ {
if(IS11_datastruct_fanshelv.NCa == 0) if(IS11_datastruct_fanshelv.NCa == 0)
@ -974,7 +1017,8 @@ void SensorIS11::senddata(HardwareSerial *wb485Serial,u_int32_t send_data_type,
send_radiance(wb485Serial,&IS11_datastruct_down, fengbao_num); send_radiance(wb485Serial,&IS11_datastruct_down, fengbao_num);
break; break;
case 0X14: case 0X14:
send_fanshelv(wb485Serial); send_fanshelv(wb485Serial,fengbao_num);
// send_fanshelv(wb485Serial);
break; break;
case 0X20: case 0X20:

View File

@ -50,7 +50,8 @@ public:
void get_fanshelv(); void get_fanshelv();
void send_fanshelv(HardwareSerial *wb485Serial); // void send_fanshelv(HardwareSerial *wb485Serial);
void send_fanshelv(HardwareSerial * wb485Serial,uint32_t fengbao_num);
void calculation(float bochang1,float bochang2); void calculation(float bochang1,float bochang2);
// Ds1302 ds1302; // Ds1302 ds1302;

View File

@ -30,8 +30,6 @@
#include "adc.h" #include "adc.h"
#define LOGGING #define LOGGING
#define IS1Serial_port 1 #define IS1Serial_port 1
#define IS1Serial_RX 18 #define IS1Serial_RX 18
#define IS1Serial_TX 17 #define IS1Serial_TX 17

2
src/version.txt Normal file
View File

@ -0,0 +1,2 @@
20251021
version 2.0.0