@ -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 max value = SensorInfo . maxValue * 1.0 * persent / 100;
int min value = ( float ) SensorInfo . maxValue * ( ( float ) persent / 100.f ) ;
int maxvalue = ( float ) SensorInfo . maxValue * 0.95 ;
int maxvaluenow = 0 ;
static floa t shutternow = 100 ;
GetOneDate ( 100 ) ;
in t 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 :