From 6334ea9e41eb510e31325b9557ac823ca26aa574 Mon Sep 17 00:00:00 2001 From: tangchao Date: Mon, 6 Dec 2021 09:26:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=87=BD=E6=95=B0=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ocean_lib/library.cpp | 180 ++++++++++++++++++++++++++++------- ocean_lib/library.h | 7 +- ocean_lib/main.cpp | 214 ++++++++++++++++++++++++++++++------------ 3 files changed, 303 insertions(+), 98 deletions(-) diff --git a/ocean_lib/library.cpp b/ocean_lib/library.cpp index ef4e369..bc88ec8 100644 --- a/ocean_lib/library.cpp +++ b/ocean_lib/library.cpp @@ -7,6 +7,7 @@ OceanOptics_lib::OceanOptics_lib() { m_iSpectralmeterHandle=-100; } + OceanOptics_lib::~OceanOptics_lib() { @@ -23,42 +24,57 @@ int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string s for(i = 0; i < SEABREEZE_MAX_DEVICES; i++) { - printf("\nOpening spectrometer %d.\n", i); +// printf("\nOpening spectrometer %d.\n", i); flag = seabreeze_open_spectrometer(i, &error); - printf("Open spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); +// printf("Open spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); if(0 == flag) { device_count++; } + else + { + continue; + } string sn = GetSerialNumber(i); if(strcmp(sn.c_str(),strDeviceName.c_str())==0) { m_iSpectralmeterHandle = i; - printf("\nfind!!!!!!!!!!!!\n"); +// printf("\nfind!!!!!!!!!!!!\n"); break; } else { - printf("\nClosing spectrometer %d.\n", i); +// printf("\nClosing spectrometer %d.\n", i); flag = seabreeze_close_spectrometer(i, &error); - printf("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); +// printf("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); } } if(m_iSpectralmeterHandle==-100) { - printf("\nNo!!!!!!!!!!!!\n"); +// printf("\nNo!!!!!!!!!!!!\n"); return 1; } + seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); + seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); + seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); + printf("seabreeze_set_trigger_mode: Result is [%s]\n", get_error_string(error)); + //设置初始积分时间 long minimum_time; - minimum_time = seabreeze_get_min_integration_time_microsec(m_iSpectralmeterHandle, &error); - printf("...Minimum is %ld microseconds, result is [%s]\n", minimum_time, get_error_string(error)); + //printf("...Minimum is %ld microseconds, result is [%s]\n", minimum_time, get_error_string(error)); + bool ret = isSuccess((char*)get_error_string(error)); + if (!ret) + { +// printf("\n-------------------没成功!!!!!!!!!!!!!!!!!!\n"); + return 1; + } + if(minimum_time < 0) { /* If there was an error, reset to a time that is supported widely. */ minimum_time = 15000; @@ -83,12 +99,16 @@ int OceanOptics_lib::Initialize() { printf("\nOpening spectrometer %d.\n", i); flag = seabreeze_open_spectrometer(i, &error); - printf("Open spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); + //printf("Open spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); if(0 == flag) { m_iSpectralmeterHandle = i; break; } + else + { + continue; + } } if(m_iSpectralmeterHandle==-100) @@ -97,14 +117,27 @@ int OceanOptics_lib::Initialize() return 1; } + seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); + seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); + seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); + printf("seabreeze_set_trigger_mode: Result is [%s]\n", get_error_string(error)); + //设置初始积分时间 long minimum_time; minimum_time = seabreeze_get_min_integration_time_microsec(m_iSpectralmeterHandle, &error); - printf("...Minimum is %ld microseconds, result is [%s]\n", minimum_time, get_error_string(error)); + //printf("...Minimum is %ld microseconds, result is [%s]\n", minimum_time, get_error_string(error)); + bool ret = isSuccess((char*)get_error_string(error)); + if (!ret) + { +// printf("\n-------------------没成功!!!!!!!!!!!!!!!!!!\n"); + return 1; + } + if(minimum_time < 0) { /* If there was an error, reset to a time that is supported widely. */ minimum_time = 15000; + return 1; } SetExposureTime(minimum_time/1000); @@ -198,7 +231,7 @@ void OceanOptics_lib::Close() int error; flag = seabreeze_close_spectrometer(m_iSpectralmeterHandle, &error); - printf("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); +// printf("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); } //单次数据采集 @@ -214,10 +247,16 @@ int OceanOptics_lib::SingleShot(DataFrame &dfData) int flag; int spec_length; double *spectrum = 0; + bool ret; - printf("\n\nGetting formatted spectrum length.\n"); +// printf("\n\nGetting formatted spectrum length.\n"); spec_length = seabreeze_get_formatted_spectrum_length(m_iSpectralmeterHandle, &error); - printf("Get formatted spectrum_length result is (%d) [%s]\n", spec_length, get_error_string(error)); + //printf("Get formatted spectrum_length result is (%d) [%s]\n", spec_length, get_error_string(error)); + ret = isSuccess((char*)get_error_string(error)); + if (!ret) + { + return 1; + } if(spec_length > 0) { @@ -225,8 +264,14 @@ int OceanOptics_lib::SingleShot(DataFrame &dfData) printf("\nGetting a formatted spectrum.\n"); flag = seabreeze_get_formatted_spectrum(m_iSpectralmeterHandle, &error, spectrum, spec_length); - printf("Get formatted spectrum result is (%d) [%s]\n", flag, get_error_string(error)); - printf("\tPixel value 20 is %1.2f\n", spectrum[20]); + printf("\nGetting a formatted spectrum------------------------------.\n"); +// printf("Get formatted spectrum result is (%d) [%s]\n", flag, get_error_string(error)); +// printf("\tPixel value 20 is %1.2f\n", spectrum[20]); + ret = isSuccess((char*)get_error_string(error)); + if (!ret) + { + return 1; + } for(int tmp = 0; tmp 0) { wls = (double *)calloc((size_t)spec_length, sizeof(double)); - printf("\nGetting wavelengths.\n"); +// printf("\nGetting wavelengths.\n"); flag = seabreeze_get_wavelengths(m_iSpectralmeterHandle, &error, wls, spec_length); - printf("Get wavelengths result is (%d) [%s]\n", flag, get_error_string(error)); - printf("\tPixel 20 is wavelength %1.2f nm\n", wls[20]); +// printf("Get wavelengths result is (%d) [%s]\n", flag, get_error_string(error)); +// printf("\tPixel 20 is wavelength %1.2f nm\n", wls[20]); + bool ret = isSuccess((char*)get_error_string(error)); + if (!ret) + { + return 1; + } for(int tmp = 0; tmp 0) { printf("\tSerial number: [%s]\n", serial_number); diff --git a/ocean_lib/library.h b/ocean_lib/library.h index 49522e5..5f09b0c 100644 --- a/ocean_lib/library.h +++ b/ocean_lib/library.h @@ -8,7 +8,7 @@ #include "api/SeaBreezeWrapper.h" #include "IrisFiberSpectrometerBase.h" -//#include "api/seabreezeapi/SeaBreezeAPI.h" +#include "api/seabreezeapi/SeaBreezeAPI.h" using namespace std; @@ -21,7 +21,7 @@ public: public: //鍒濆鍖栬澶 //姝ゅstring涓烘寚鏄庤繛鎺ュ摢涓猳cean鍏夎氨浠殑鍙傛暟锛屽彲鑷鏇存崲涓哄叾浠朿/c++鏍囧噯绫诲瀷 - //0涓烘棤閿欒锛屼笉鍚岄敊璇杩斿洖涓嶅悓鍊 + //0涓烘棤閿欒锛屼笉鍚岄敊璇杩斿洖涓嶅悓鍊(涓嶈兘纭畾锛氬綋涓嶆垚鍔熸椂SeaBreeze杩斿洖鐨勯敊璇唬鐮乪rror涓嶄负0 鈫 涓嶆暍灏唀rror鐩存帴杩斿洖) int Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName);//ok int Initialize();//ok @@ -50,6 +50,7 @@ public: int GetDeviceAttribute(DeviceAttribute &Attr);//ok //tc + static const char* get_error_string(int error); private: int m_iSpectralmeterHandle; DeviceInfo m_deviceInfo; @@ -57,10 +58,8 @@ private: bool isSuccess(char* resultStr); - static const char* get_error_string(int error); string GetDeviceType(int index); string GetSerialNumber(int index); - }; #endif //OCEAN_LIB_LIBRARY_H diff --git a/ocean_lib/main.cpp b/ocean_lib/main.cpp index eb19e97..e74a1ce 100644 --- a/ocean_lib/main.cpp +++ b/ocean_lib/main.cpp @@ -4,61 +4,146 @@ #include "api/seabreezeapi/SeaBreezeAPI.h" - #include +#include #include "library.h" + int main() { std::cout << "Hello, World!" << std::endl; +// +// int ret; +// OceanOptics_lib fiberImager; +//// fiberImager.Initialize(true,10,"FLMS15814");//QEP02975 FLMS15814 +// fiberImager.Initialize(); +// ret = fiberImager.SetDeviceTemperature(-1); +// if (ret) +// { +// std::cout << "设置温度失败!" << std::endl; +// } +// else +// { +// std::cout << "设置温度成功!" << std::endl; +// } +// +// +// ret = fiberImager.SetExposureTime(10000); +// if (ret) +// { +// std::cout << "设置曝光时间失败!" << std::endl; +// } +// +// int exposureTime; +// ret = fiberImager.GetExposureTime(exposureTime); +// if (ret) +// { +// std::cout << "获取曝光时间失败!" << std::endl; +// } +// else +// { +// std::cout << "获取的曝光时间为:" << exposureTime << std::endl; +// } +// +// +// +// ret = fiberImager.SetDeviceTemperature(-8); +// +// float fTemperature; +// ret = fiberImager.GetDeviceTemperature(fTemperature); +// if (ret) +// { +// std::cout << "获取仪器温度失败!" << std::endl; +// } +// else +// { +// std::cout << "获取的仪器温度为:" << fTemperature << std::endl; +// } +// +// +// DeviceInfo Info; +// ret = fiberImager.GetDeviceInfo(Info); +// if (ret) +// { +// std::cout << "获取DeviceInfo失败!" << std::endl; +// } +// else +// { +// std::cout << "获取的仪器类型为:" << Info.strPN << std::endl; +// std::cout << "获取的仪器SN为:" << Info.strSN << std::endl; +// } +// +// +// +// DeviceAttribute Attr; +// ret = fiberImager.GetDeviceAttribute(Attr); +// if (ret) +// { +// std::cout << "获取DeviceAttribute失败!" << std::endl; +// } +// else +// { +// std::cout << "获取的波长个数为:" << Attr.iPixels << std::endl; +// std::cout << "获取的波长为:" << std::endl; +// for(int i=0;i