From fae1a5e462325907278f53b8dfe31f13efe8447b Mon Sep 17 00:00:00 2001 From: tangchao Date: Fri, 3 Dec 2021 17:33:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=A4=B1=E8=B4=A5=E5=90=8E=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ocean_lib/CMakeLists.txt | 20 +++- ocean_lib/ZZ_Types.h | 4 +- ocean_lib/library.cpp | 217 +++++++++++++++++++++++++++++++-------- ocean_lib/library.h | 35 ++++--- ocean_lib/main.cpp | 123 ++++++++++++++++++++++ 5 files changed, 335 insertions(+), 64 deletions(-) create mode 100644 ocean_lib/main.cpp diff --git a/ocean_lib/CMakeLists.txt b/ocean_lib/CMakeLists.txt index d09b110..7ce07e8 100644 --- a/ocean_lib/CMakeLists.txt +++ b/ocean_lib/CMakeLists.txt @@ -11,9 +11,25 @@ include_directories(.)#包含头文件 file(GLOB_RECURSE SRC_CPP ./*.cpp) -add_library(oceanlib SHARED ${SRC_CPP}) +#add_library(${CMAKE_PROJECT_NAME} SHARED ${SRC_CPP}) +# +#TARGET_LINK_LIBRARIES(oceanlib +# seabreeze +# usb +# ) -TARGET_LINK_LIBRARIES(oceanlib + +### Outputs:提示 +#add_executable(${CMAKE_PROJECT_NAME} +# ${SRC_CPP} +# ) + +add_executable(${CMAKE_PROJECT_NAME} + library.cpp + main.cpp + ) + +target_link_libraries(${CMAKE_PROJECT_NAME} seabreeze usb ) diff --git a/ocean_lib/ZZ_Types.h b/ocean_lib/ZZ_Types.h index d7eeb99..365d7d7 100644 --- a/ocean_lib/ZZ_Types.h +++ b/ocean_lib/ZZ_Types.h @@ -22,12 +22,12 @@ namespace ZZ_MISCDEF ZZ_U16 usExposureTimeInMS; ZZ_U16 usData[4096]; float fTemperature; - double dTimes = 0;// + double dTimes = 0;// }DataFrame; typedef struct tagDeviceInfo { - std::string strPN;// + std::string strPN;// std::string strSN; }DeviceInfo; diff --git a/ocean_lib/library.cpp b/ocean_lib/library.cpp index c6b412b..ef4e369 100644 --- a/ocean_lib/library.cpp +++ b/ocean_lib/library.cpp @@ -3,10 +3,14 @@ #include #include -//void hello() { -// std::cout << "Hello, World!" << std::endl; -//} +OceanOptics_lib::OceanOptics_lib() +{ + m_iSpectralmeterHandle=-100; +} +OceanOptics_lib::~OceanOptics_lib() +{ +} //ʹͷļ#include "api/SeaBreezeWrapper.h" int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName) @@ -21,7 +25,7 @@ int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string s { printf("\nOpening spectrometer %d.\n", i); flag = seabreeze_open_spectrometer(i, &error); - printf("...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++; @@ -34,18 +38,78 @@ int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string s printf("\nfind!!!!!!!!!!!!\n"); break; } + else + { + 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)); + } } -// for(i = 0; i < device_count; i++) -// { -// printf("\nGetting device %d name.\n", i); -// seabreeze_get_model(i, &error, type, sizeof(type)); -// printf("...Result is (%s) [%s]\n", type, get_error_string(error)); -// -// GetSerialNumber(i); -// } + if(m_iSpectralmeterHandle==-100) + { + printf("\nNo!!!!!!!!!!!!\n"); + return 1; + } - return 1; + + + //óʼʱ + 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)); + 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); + + return 0; +} + +//ʹͷļ#include "api/SeaBreezeWrapper.h" +int OceanOptics_lib::Initialize() +{ + int flag; + int error; + char type[16]; + int device_count = 0; + int i; + + for(i = 0; i < SEABREEZE_MAX_DEVICES; 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)); + if(0 == flag) + { + m_iSpectralmeterHandle = i; + break; + } + } + + if(m_iSpectralmeterHandle==-100) + { + printf("\nNo!!!!!!!!!!!!\n"); + return 1; + } + + //óʼʱ + 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)); + if(minimum_time < 0) { + /* If there was an error, reset to a time that is supported widely. */ + minimum_time = 15000; + } + + SetExposureTime(minimum_time/1000); + + return 0; } @@ -134,12 +198,18 @@ void OceanOptics_lib::Close() int error; flag = seabreeze_close_spectrometer(m_iSpectralmeterHandle, &error); - printf("...Result is (%d) [%s]\n", flag, get_error_string(error)); + printf("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); } //ݲɼ int OceanOptics_lib::SingleShot(DataFrame &dfData) { + if(m_iSpectralmeterHandle==-100) + { + printf("\nNo!!!!!!!!!!!!\n"); + return 1; + } + int error; int flag; int spec_length; @@ -147,14 +217,15 @@ int OceanOptics_lib::SingleShot(DataFrame &dfData) printf("\n\nGetting formatted spectrum length.\n"); spec_length = seabreeze_get_formatted_spectrum_length(m_iSpectralmeterHandle, &error); - printf("...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)); - if(spec_length > 0) { + if(spec_length > 0) + { spectrum = (double *)calloc((size_t)spec_length, sizeof(double)); printf("\nGetting a formatted spectrum.\n"); flag = seabreeze_get_formatted_spectrum(m_iSpectralmeterHandle, &error, spectrum, spec_length); - printf("...Result is (%d) [%s]\n", flag, get_error_string(error)); + printf("Get formatted spectrum result is (%d) [%s]\n", flag, get_error_string(error)); printf("\tPixel value 20 is %1.2f\n", spectrum[20]); 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 6e4cbc1..49522e5 100644 --- a/ocean_lib/library.h +++ b/ocean_lib/library.h @@ -11,53 +11,56 @@ //#include "api/seabreezeapi/SeaBreezeAPI.h" -//void hello(); using namespace std; class OceanOptics_lib:public CIrisFSBase { -private: - int m_iSpectralmeterHandle; - DeviceInfo m_deviceInfo; +public: + OceanOptics_lib(); + virtual ~OceanOptics_lib(); public: //初始化设备 //此处string为指明连接哪个ocean光谱仪的参数,可自行更换为其他c/c++标准类型 //0为无错误,不同错误请返回不同值 - int Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName); + int Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName);//ok + int Initialize();//ok //关闭设备 - void Close(); + void Close();//ok //单次数据采集 int SingleShot(DataFrame &dfData); //设置曝光时间 - int SetExposureTime(int iExposureTimeInMS); + int SetExposureTime(int iExposureTimeInMS);//ok //获取曝光时间设置 - int GetExposureTime(int &iExposureTimeInMS); + int GetExposureTime(int &iExposureTimeInMS);//ok //设置目标温度 - int SetDeviceTemperature(float fTemperature); + int SetDeviceTemperature(float fTemperature);//ok //获取温度设置 - int GetDeviceTemperature(float &fTemperature); + int GetDeviceTemperature(float &fTemperature);//ok //获取设备信息 int GetDeviceInfo(DeviceInfo &Info);//ok //获取设备特征数据 - int GetDeviceAttribute(DeviceAttribute &Attr); + int GetDeviceAttribute(DeviceAttribute &Attr);//ok //tc +private: + int m_iSpectralmeterHandle; + DeviceInfo m_deviceInfo; + int m_iExposureTime; + + 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 new file mode 100644 index 0000000..eb19e97 --- /dev/null +++ b/ocean_lib/main.cpp @@ -0,0 +1,123 @@ +// +// Created by tangchao on 2021/11/29. +// + +#include "api/seabreezeapi/SeaBreezeAPI.h" + + +#include +#include "library.h" + +int main() +{ + std::cout << "Hello, World!" << std::endl; + OceanOptics_lib fiberImager; + fiberImager.Initialize(true,10,"FLMS15814");//QEP02975 FLMS15814 + + fiberImager.SetExposureTime(5000); + + int exposureTime; + fiberImager.GetExposureTime(exposureTime); + std::cout << "ȡعʱΪ" << exposureTime << std::endl; + + + fiberImager.SetDeviceTemperature(-8); + + float fTemperature; + fiberImager.GetDeviceTemperature(fTemperature); + std::cout << "ȡ¶Ϊ" << fTemperature << std::endl; + + DeviceInfo Info; + fiberImager.GetDeviceInfo(Info); + std::cout << "ȡΪ" << Info.strPN << std::endl; + std::cout << "ȡSNΪ" << Info.strSN << std::endl; + + + DeviceAttribute Attr; + fiberImager.GetDeviceAttribute(Attr); + std::cout << "ȡIJΪ" << Attr.iPixels << std::endl; + std::cout << "ȡIJΪ" << std::endl; + for(int i=0;i