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,7 +21,7 @@
; knolleary/PubSubClient@^2.8
; plerup/EspSoftwareSerial@^6.15.2
; arduino-libraries/ArduinoHttpClient@^0.4.0
; janelia-arduino/Vector@^1.2.2
; janelia-arduino/Vector@^1.2.2
; build_flags:
; -DVERSION=${this.custom_prog_version}
; extra_scripts = pre:extra_script.py

View File

@ -21,6 +21,7 @@ STRSensorInfo SensorIS11::initSensor()
radiance_struct_down.offset[i] = 0;
}
SensorInfo.BandNum = 2048;
SensorInfo.maxValue = 65535;
uint8_t buff[4];
String path2 = "/system/index.bin";
File file;
@ -192,45 +193,106 @@ void SensorIS11::GetOneDate(int msc)
//获取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)
{
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;
static float shutternow = 100;
GetOneDate(100);
int shutternow = 100;
GetOneDate(shutternow);
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;
int numberoftry = 0;
while (maxvaluenow<minvalue || maxvaluenow>maxvalue)
{
if (maxvaluenow > maxvalue)
{
shutternow = shutternow *0.7;
}
else
{
shutternow = maxvalue * 0.98 / (maxvaluenow * 1.0)*shutternow + 1;
shutternow = ((float)maxvalue / (float)(maxvaluenow)) *shutternow + 1;
}
if (shutternow > maxtime)
{
shutternow = maxtime;
break;
}
GetOneDate(shutternow);
maxvaluenow= Getmaxvalue(DATABUFF, SensorInfo.BandNum);
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)
@ -238,16 +300,14 @@ int SensorIS11::OptSnenser(int persent)
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)
@ -260,6 +320,10 @@ int SensorIS11::OptSnenser(int persent)
return shutternow;
}
void SensorIS11::shortLittletoBiG(unsigned short *data,int lenth)
{
CoverLittleAndBig((char *)data,lenth);
@ -457,23 +521,64 @@ void SensorIS11::TakeOneJob()
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);
write_log(log_path,time + " start take one job",10);
SensorInfo.BandNum = 2048;
work_progress = 0 ;
float temp[8];
getall_temp(temp);
//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",10);
//1 opt_up
servo_direction(1);
SetShutter(2);
shutterup=OptSnenser(70);
shutterdown = shutterup;
SetShutter(1);
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
SensorInfo.BandNum = 2048;
SetShutter(2);
GetOneDate(shutterup);
SetShutter(1);
for (int i = 0; i < SensorInfo.BandNum;i++)
{
IS11_datastruct_up.data[i] = DATABUFF[i];
@ -490,73 +595,7 @@ void SensorIS11::TakeOneJob()
IS11_datastruct_up.shutter_time = shutterup;
IS11_datastruct_up.index = index;
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;
// //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
servo_direction(0);
@ -582,58 +621,6 @@ void SensorIS11::TakeOneJob()
servo_off();
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);
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.flush();
file.close();
work_progress = 92;
work_progress = 90;
path2 = "/system/index.bin";
@ -855,35 +842,91 @@ void SensorIS11::send_chongcaiyang(HardwareSerial *wb485Serial,IS11_datastruct
void SensorIS11::get_fanshelv()
{
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++)
{
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)
{
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)
{
if(IS11_datastruct_fanshelv.NCa == 0)
{
get_fanshelv();
// 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)
{
get_fanshelv();
}
}
int32_t send_lenth;
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);
wb485Serial->write(send_buff,send_lenth);
}
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::calculation(float bochang1,float bochang2)
{
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);
break;
case 0X14:
send_fanshelv(wb485Serial);
send_fanshelv(wb485Serial,fengbao_num);
// send_fanshelv(wb485Serial);
break;
case 0X20:

View File

@ -50,7 +50,8 @@ public:
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);
// Ds1302 ds1302;

View File

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

2
src/version.txt Normal file
View File

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