diff --git a/platformio.ini b/platformio.ini index d719497..0dbc226 100644 --- a/platformio.ini +++ b/platformio.ini @@ -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 diff --git a/src/SensorIS11.cpp b/src/SensorIS11.cpp index 22136a6..20cfe30 100644 --- a/src/SensorIS11.cpp +++ b/src/SensorIS11.cpp @@ -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 (maxvaluenowmaxvalue) { +// 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 (maxvaluenowmaxvalue) { - if(numberoftry == 0) shutternow = 100; + int numberoftry = 0; + while (maxvaluenowmaxvalue) + { 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: diff --git a/src/SensorIS11.h b/src/SensorIS11.h index 7a1be5f..76df6ba 100644 --- a/src/SensorIS11.h +++ b/src/SensorIS11.h @@ -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; diff --git a/src/main.cpp b/src/main.cpp index 62167e9..55a630b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,8 +30,6 @@ #include "adc.h" #define LOGGING - - #define IS1Serial_port 1 #define IS1Serial_RX 18 #define IS1Serial_TX 17 diff --git a/src/version.txt b/src/version.txt new file mode 100644 index 0000000..03d496e --- /dev/null +++ b/src/version.txt @@ -0,0 +1,2 @@ +20251021 +version 2.0.0