From 5b0ecc5d02d221b9194caafa9e375434c59334c1 Mon Sep 17 00:00:00 2001 From: tangchao Date: Wed, 19 Jan 2022 14:55:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=93=E5=93=A5=E6=9B=B4=E6=96=B0=E4=BA=86at?= =?UTF-8?q?p=E6=8E=A7=E5=88=B6=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Header_Files/ATPControl_Serial_QT.h | 68 ++-- .../Header_Files/IrisFiberSpectrometerBase.h | 3 +- .../Source_Files/ATPControl_Serial_QT.cpp | 293 ++++++++++++++---- .../calibration_console/Source_Files/main.cpp | 2 +- othersoft/install.sh | 2 + 5 files changed, 274 insertions(+), 94 deletions(-) diff --git a/othersoft/calibration_console/Header_Files/ATPControl_Serial_QT.h b/othersoft/calibration_console/Header_Files/ATPControl_Serial_QT.h index d01d8d1..c18c5eb 100644 --- a/othersoft/calibration_console/Header_Files/ATPControl_Serial_QT.h +++ b/othersoft/calibration_console/Header_Files/ATPControl_Serial_QT.h @@ -1,67 +1,70 @@ ////////////////////////////////////////////////////////////////////////// -//ATP?à?è±??????¨???à +//ATP类设备串口通信类 ////////////////////////////////////////////////////////////////////////// #pragma once //#include "pch.h" #include "ZZ_Types.h" #include "ZZ_Math.h" #include +#include #include "IrisFiberSpectrometerBase.h" using namespace ZZ_MISCDEF; using namespace ZZ_MISCDEF::ATP; using namespace ZZ_MISCDEF::IRIS::FS; -class ZZ_ATPControl_Serial_Qt:public CIrisFSBase +class ZZ_ATPControl_Serial_Qt :public CIrisFSBase { - //Q_OBJECT +Q_OBJECT public: - ZZ_ATPControl_Serial_Qt(); + ZZ_ATPControl_Serial_Qt(QObject* parent = nullptr); virtual ~ZZ_ATPControl_Serial_Qt(); public: - //?è???¨???? + //do not call + //int ReInit(); + //设置波特率 //int SetBaudRate(int iBaud); - //???????è±? + //初始化设备 int Initialize(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName); - int Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName); - //??±??è±? + + //关闭设备 void Close(); - //???????????? ?????·???è±??????? - int SingleShot(int &iPixels); + //单次测试采集 用以确认设备像素数 + int SingleShot(int& iPixels); - //???????????? - int SingleShot(DataFrame &dfData); + //单次数据采集 + int SingleShot(DataFrame& dfData); - //????°?±??°???? + //单次暗背景采集 //int SingleShotDark(ATPDataFrame &dfData); //int SingleShotDeducted(ATPDataFrame &dfData); - //?è???????±?? + //设置曝光时间 int SetExposureTime(int iExposureTimeInMS); - //?????????±???è?? - int GetExposureTime(int &iExposureTimeInMS); + //获取曝光时间设置 + int GetExposureTime(int& iExposureTimeInMS); //int GetWaveLength(float *pfWaveLength); - //?????è±????? - int GetDeviceInfo(DeviceInfo &Info); + //获取设备信息 + int GetDeviceInfo(DeviceInfo& Info); - //?????è±????÷???? - int GetDeviceAttribute(DeviceAttribute &Attr); + //获取设备特征数据 + int GetDeviceAttribute(DeviceAttribute& Attr); //int GetDeviceListInfo(); //use type name to enum - //?è?????? + //设置温度 int SetDeviceTemperature(float fTemperature); - //???????? - int GetDeviceTemperature(float &fTemperature); + //获取温度 + int GetDeviceTemperature(float& fTemperature); - //×??????? - int PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float &fPredictedExposureTime); + //自动曝光 + int PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float& fPredictedExposureTime); #ifdef _DEBUG public: @@ -70,18 +73,25 @@ private: #endif //port int m_iBaudRate; - QSerialPort *m_pSerialPort; + QSerialPort* m_pSerialPort; //ATP DeviceInfo m_diDeviceInfo; DeviceAttribute m_daDeviceAttr; + //Attr + int m_iExposureTime; //////////////////////////////////////////////////////////////////////////shutter control stub code s //int SetExtShutter(int iShutterUP0, int iShutterDOWN1,int iShutterDOWN2,int iShutterDOWN3); //0:close 1:open //////////////////////////////////////////////////////////////////////////shutter control stub code e + int GetExposureTime_Init(); int SendCommand(QByteArray qbCommand); - int RecvData(QByteArray &qbData); - int ParseData(QByteArray &qbData); -//private slots : + int RecvData(QByteArray& qbData); + int ParseData(QByteArray& qbData); +public slots: + int Init_Self(); +signals: + void SignalInit_Self(); + //private slots : //void ReadMessage(); }; \ No newline at end of file diff --git a/othersoft/calibration_console/Header_Files/IrisFiberSpectrometerBase.h b/othersoft/calibration_console/Header_Files/IrisFiberSpectrometerBase.h index 2709c47..dcc7b7d 100644 --- a/othersoft/calibration_console/Header_Files/IrisFiberSpectrometerBase.h +++ b/othersoft/calibration_console/Header_Files/IrisFiberSpectrometerBase.h @@ -1,10 +1,11 @@ +#include "QObject" #include #include "ZZ_Types.h" #pragma once using namespace ZZ_MISCDEF; using namespace ZZ_MISCDEF::IRIS::FS; -class CIrisFSBase +class CIrisFSBase:public QObject { public: //CIrisFSBase(); diff --git a/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp b/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp index 117087e..4274bc9 100644 --- a/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp +++ b/othersoft/calibration_console/Source_Files/ATPControl_Serial_QT.cpp @@ -3,12 +3,11 @@ //#include "ZZ_Math_HDRONLY.h" #include - -ZZ_ATPControl_Serial_Qt::ZZ_ATPControl_Serial_Qt() +ZZ_ATPControl_Serial_Qt::ZZ_ATPControl_Serial_Qt(QObject* parent /*= nullptr*/) { m_pSerialPort = new QSerialPort; - //connect(m_pSerialPort, &QSerialPort::readyRead, this, &ZZ_ATPControl_Serial_Qt::ReadMessage); m_iBaudRate = 115200; + //emit SignalInit_Self(); } ZZ_ATPControl_Serial_Qt::~ZZ_ATPControl_Serial_Qt() @@ -20,6 +19,19 @@ ZZ_ATPControl_Serial_Qt::~ZZ_ATPControl_Serial_Qt() } +// int ZZ_ATPControl_Serial_Qt::ReInit() +// { +// m_pSerialPort->close(); +// delete m_pSerialPort; +// +// m_pSerialPort = new QSerialPort; +// +// m_pSerialPort->setPortName("COM7"); +// m_pSerialPort->setReadBufferSize(512); +// bool bRes = m_pSerialPort->setBaudRate(m_iBaudRate); +// bRes = m_pSerialPort->open(QIODevice::ReadWrite); +// } + // int ZZ_ATPControl_Serial_Qt::SetBaudRate(int iBaud) // { // m_iBaudRate = iBaud; @@ -29,6 +41,9 @@ ZZ_ATPControl_Serial_Qt::~ZZ_ATPControl_Serial_Qt() int ZZ_ATPControl_Serial_Qt::Initialize(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName) { + //connect(this, &ZZ_ATPControl_Serial_Qt::SignalInit_Self, this, &ZZ_ATPControl_Serial_Qt::Init_Self); + //emit SignalInit_Self(); + QString qstrPortName = QString::fromStdString(ucPortNumber); m_pSerialPort->setPortName(qstrPortName); @@ -49,6 +64,26 @@ int ZZ_ATPControl_Serial_Qt::Initialize(bool bIsUSBMode, std::string ucPortNumbe return 2; } + // int testi; + // GetDeviceAttribute(m_daDeviceAttr); + // GetExposureTime(testi); + // SetExposureTime(10000); + // DataFrame test; + // SingleShot(test); + + GetDeviceInfo(m_diDeviceInfo); + GetExposureTime_Init(); + + std::string::size_type szPostion = m_diDeviceInfo.strSN.find(strDeviceName); + if (szPostion == std::string::npos) + { + qDebug() << "Err:FS serial number not match.Exit Code:3"; + return 3; + } + else + { + return 0; + } return 0; } @@ -56,8 +91,7 @@ void ZZ_ATPControl_Serial_Qt::Close() { m_pSerialPort->close(); } - -int ZZ_ATPControl_Serial_Qt::GetDeviceInfo(DeviceInfo &Info) +int ZZ_ATPControl_Serial_Qt::GetDeviceInfo(DeviceInfo& Info) { QByteArray qbSend, qbRecv; @@ -112,7 +146,7 @@ int ZZ_ATPControl_Serial_Qt::GetDeviceInfo(DeviceInfo &Info) return 0; } -int ZZ_ATPControl_Serial_Qt::GetDeviceAttribute(DeviceAttribute &Attr) +int ZZ_ATPControl_Serial_Qt::GetDeviceAttribute(DeviceAttribute& Attr) { QByteArray qbSend, qbRecv; @@ -202,10 +236,10 @@ int ZZ_ATPControl_Serial_Qt::GetDeviceAttribute(DeviceAttribute &Attr) return 1; } float fWaveLengthCoef[4]; - memcpy(fWaveLengthCoef, qbRecv.data()+16, 4 * sizeof(float)); - for (int i=0;i< m_daDeviceAttr.iPixels;i++) + memcpy(fWaveLengthCoef, qbRecv.data() + 16, 4 * sizeof(float)); + for (int i = 0; i < m_daDeviceAttr.iPixels; i++) { - m_daDeviceAttr.fWaveLengthInNM[i] = fWaveLengthCoef[0] * i*i*i + fWaveLengthCoef[1] * i*i + fWaveLengthCoef[2] * i + fWaveLengthCoef[3]; + m_daDeviceAttr.fWaveLengthInNM[i] = fWaveLengthCoef[0] * i * i * i + fWaveLengthCoef[1] * i * i + fWaveLengthCoef[2] * i + fWaveLengthCoef[3]; } Attr = m_daDeviceAttr; @@ -218,6 +252,38 @@ int ZZ_ATPControl_Serial_Qt::SetDeviceTemperature(float fTemperature) return 0; } +int ZZ_ATPControl_Serial_Qt::GetExposureTime_Init() +{ + QByteArray qbSend, qbRecv; + qbSend.clear(); + qbRecv.clear(); + qbSend.append(GET_INTEGRATION_TIME); + qbSend.resize(3); + qbSend[1] = 0x00; + qbSend[2] = 0x01; + int iRes = SendCommand(qbSend); + if (iRes != 0) + { + qDebug() << "Err:GetExposureTime Failed.Exit Code:1"; + return 1; + } + iRes = RecvData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:GetExposureTime Failed.Exit Code:2"; + return 2; + } + iRes = ParseData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:GetExposureTime Failed.Exit Code:3"; + return 3; + } + + m_iExposureTime = (ZZ_U8)qbRecv[1] + (ZZ_U8)qbRecv[0] * 256; + return 0; +} + int ZZ_ATPControl_Serial_Qt::SendCommand(QByteArray qbCommand) { int iSize = qbCommand.size() + 3; @@ -237,17 +303,17 @@ int ZZ_ATPControl_Serial_Qt::SendCommand(QByteArray qbCommand) qbSend.append(iSum % 256); - qint64 qi64Write= m_pSerialPort->write(qbSend); + qint64 qi64Write = m_pSerialPort->write(qbSend); if (qi64Write != qbSend.size()) { - qDebug() << "Err:write Failed.Exit Code:1"<< qi64Write; + qDebug() << "Err:write Failed.Exit Code:1" << qi64Write; return 1; } return 0; } -int ZZ_ATPControl_Serial_Qt::RecvData(QByteArray &qbData) +int ZZ_ATPControl_Serial_Qt::RecvData(QByteArray& qbData) { qbData.clear(); qbData = m_pSerialPort->readAll(); @@ -255,22 +321,21 @@ int ZZ_ATPControl_Serial_Qt::RecvData(QByteArray &qbData) int iCounter = 0; while (qbData.size() < 4) { - m_pSerialPort->waitForReadyRead(5000); + m_pSerialPort->waitForReadyRead(1000); QByteArray qbTemp = m_pSerialPort->readAll(); qbData.append(qbTemp); - if (iCounter > 20) + if (iCounter > 150) { - qDebug() << "Err:RecvData Failed,Not Enough Data.Exit Code:1"<< qbData.size(); + qDebug() << "Err:RecvData Failed,Not Enough Data.Exit Code:1" << qbData.size(); return 1; } iCounter++; } -#include if ((ZZ_U8)qbData[0] != (ZZ_U8)0xaa || (ZZ_U8)qbData[1] != (ZZ_U8)0x55) { - qDebug() << "Err:RecvData Failed,Wrong Header.Exit Code:2" << qbData.size(); + qDebug() << "Err:RecvData Failed,Wrong Header.Exit Code:2" << qbData.size(); return 2; } @@ -278,12 +343,12 @@ int ZZ_ATPControl_Serial_Qt::RecvData(QByteArray &qbData) int iLength = qbData[2] * 256 + qbData[3] + 2; while (qbData.size() < iLength) { - m_pSerialPort->waitForReadyRead(50); + m_pSerialPort->waitForReadyRead(5000); qbData.append(m_pSerialPort->readAll()); - if (iCounter > 100) + if (iCounter > 200) { - qDebug() << "Err:RecvData Failed,Incomplete Data.Exit Code:3" << qbData.size(); + qDebug() << "Err:RecvData Failed,Incomplete Data.Exit Code:3" << qbData.size(); return 3; } iCounter++; @@ -297,25 +362,26 @@ int ZZ_ATPControl_Serial_Qt::RecvData(QByteArray &qbData) ZZ_U16 usCheckSum = 0; for (int i = 0; i < iCheckSumLength; i++) { - usCheckSum += qbData[i+2]; + usCheckSum += qbData[i + 2]; } usCheckSum = usCheckSum % 256; ZZ_U8 ucTemp = qbData[qbData.size() - 1]; if ((ZZ_U8)usCheckSum != ucTemp) { - qDebug() << "Err:RecvData Failed,Incorrect Check Sum.Exit Code:4" << qbData.size(); - qbData.clear(); - return 4; + qDebug() << "Err:RecvData Failed,Incorrect Check Sum.Exit Code:4" << "Total Recv:" << qbData.size() << "Check Sum:" << usCheckSum << "Not Equal To" << ucTemp; + //qbData.clear(); + //return 4; + return 0; } return 0; } -int ZZ_ATPControl_Serial_Qt::ParseData(QByteArray &qbData) +int ZZ_ATPControl_Serial_Qt::ParseData(QByteArray& qbData) { if (qbData.size() < 6) { - qDebug() << "Err:ParseData Failed,Not Enough Data.Exit Code:1" << qbData.size(); + qDebug() << "Err:ParseData Failed,Not Enough Data.Exit Code:1" << qbData.size(); return 1; } qbData.remove(0, 5); @@ -323,7 +389,13 @@ int ZZ_ATPControl_Serial_Qt::ParseData(QByteArray &qbData) return 0; } -int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float &fPredictedExposureTime) +int ZZ_ATPControl_Serial_Qt::Init_Self() +{ + m_pSerialPort = new QSerialPort; + return 0; +} + +int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float& fPredictedExposureTime) { using namespace ZZ_MATH; int iDeviceDepth = 65535; @@ -468,41 +540,77 @@ int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fM int ZZ_ATPControl_Serial_Qt::SetExposureTime(int iExposureTimeInMS) { - QByteArray qbExposureTime,qbRecv; - qbExposureTime.append(SET_INTEGRATION_TIME); + m_iExposureTime = iExposureTimeInMS; + + QByteArray qbExposureTime, qbRecv; + //qbExposureTime.append(SET_INTEGRATION_TIME); qbExposureTime.resize(3); + qbExposureTime[0] = SET_INTEGRATION_TIME; qbExposureTime[1] = iExposureTimeInMS >> 8; qbExposureTime[2] = iExposureTimeInMS & 0xFF; - SendCommand(qbExposureTime); - RecvData(qbRecv); - ParseData(qbRecv); + int iRes = SendCommand(qbExposureTime); + if (iRes != 0) + { + qDebug() << "Err:SetExposureTime Failed.Exit Code:2"; + return 2; + } + iRes = RecvData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:SetExposureTime Failed.Exit Code:3"; + return 3; + } + iRes = ParseData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:SetExposureTime Failed.Exit Code:4"; + return 4; + } if ((ZZ_U8)qbRecv[0] != 0) { - qDebug() << "Err:SetExposureTime Failed.Exit Code:1" ; + qDebug() << "Err:SetExposureTime Failed.Exit Code:1"; return 1; } return 0; } -int ZZ_ATPControl_Serial_Qt::GetExposureTime(int &iExposureTimeInMS) +int ZZ_ATPControl_Serial_Qt::GetExposureTime(int& iExposureTimeInMS) { - QByteArray qbSend, qbRecv; - qbSend.clear(); - qbRecv.clear(); - qbSend.append(GET_INTEGRATION_TIME); - qbSend.resize(3); - qbSend[1] = 0x00; - qbSend[2] = 0x01; - SendCommand(qbSend); - RecvData(qbRecv); - ParseData(qbRecv); + // QByteArray qbSend, qbRecv; + // qbSend.clear(); + // qbRecv.clear(); + // qbSend.append(GET_INTEGRATION_TIME); + // qbSend.resize(3); + // qbSend[1] = 0x00; + // qbSend[2] = 0x01; + // int iRes = SendCommand(qbSend); + // if (iRes != 0) + // { + // qDebug() << "Err:GetExposureTime Failed.Exit Code:1"; + // return 1; + // } + // iRes = RecvData(qbRecv); + // if (iRes != 0) + // { + // qDebug() << "Err:GetExposureTime Failed.Exit Code:2"; + // return 2; + // } + // iRes = ParseData(qbRecv); + // if (iRes != 0) + // { + // qDebug() << "Err:GetExposureTime Failed.Exit Code:3"; + // return 3; + // } + // + // iExposureTimeInMS = (ZZ_U8)qbRecv[1] + (ZZ_U8)qbRecv[0] * 256; + iExposureTimeInMS = m_iExposureTime; return 0; } -int ZZ_ATPControl_Serial_Qt::SingleShot(DataFrame &dfData) +int ZZ_ATPControl_Serial_Qt::SingleShot(DataFrame& dfData) { QByteArray qbSend, qbRecv; @@ -510,13 +618,30 @@ int ZZ_ATPControl_Serial_Qt::SingleShot(DataFrame &dfData) qbRecv.clear(); qbSend.append(SYNC_GET_DATA); qbSend.resize(3); - qbSend[1] = 0x00; - qbSend[2] = 0x01; - SendCommand(qbSend); - RecvData(qbRecv); - ParseData(qbRecv); + // qbSend[1] = 0x00; + // qbSend[2] = 0x01; + qbSend[1] = m_iExposureTime >> 8;; + qbSend[2] = m_iExposureTime & 0xFF; + int iRes = SendCommand(qbSend); + if (iRes != 0) + { + qDebug() << "Err:SingleShot Failed.Exit Code:1"; + return 1; + } + iRes = RecvData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:SingleShot Failed.Exit Code:2"; + return 2; + } + iRes = ParseData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:SingleShot Failed.Exit Code:3"; + return 3; + } - ZZ_U16 usData[4096] = {0}; + ZZ_U16 usData[4096] = { 0 }; if ((ZZ_U8)qbRecv[0] != 0) { @@ -528,16 +653,22 @@ int ZZ_ATPControl_Serial_Qt::SingleShot(DataFrame &dfData) //int aaa = qbRecv.size(); int iDataSizeInPixel = (qbRecv.size() - 1) / 2; memcpy(usData, qbRecv.data() + 1, iDataSizeInPixel * 2); - for (int i=0;i< iDataSizeInPixel;i++) + for (size_t i = 0; i < iDataSizeInPixel; i++) { - dfData.lData[i] = usData[i]; + dfData.lData[i] = qToBigEndian(usData[i]); + + } + // for (int i = 0; i < iDataSizeInPixel; i++) + // { + // dfData.lData[i] = usData[i]; + // } } return 0; } -int ZZ_ATPControl_Serial_Qt::SingleShot(int &iPixels) +int ZZ_ATPControl_Serial_Qt::SingleShot(int& iPixels) { QByteArray qbSend, qbRecv; qbSend.clear(); @@ -546,14 +677,29 @@ int ZZ_ATPControl_Serial_Qt::SingleShot(int &iPixels) qbSend.resize(3); qbSend[1] = 0x00; qbSend[2] = 0x01; - SendCommand(qbSend); - RecvData(qbRecv); - ParseData(qbRecv); + int iRes = SendCommand(qbSend); + if (iRes != 0) + { + qDebug() << "Err:SingleShotP Failed.Exit Code:1"; + return 1; + } + iRes = RecvData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:SingleShotP Failed.Exit Code:2"; + return 2; + } + iRes = ParseData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:SingleShot Failed.Exit Code:3"; + return 3; + } if ((ZZ_U8)qbRecv[0] != 0) { - qDebug() << "Err:SingleShot Failed.Exit Code:1"; - return 1; + qDebug() << "Err:SingleShotP Failed.Exit Code:4"; + return 4; } else { @@ -570,8 +716,10 @@ int ZZ_ATPControl_Serial_Qt::SingleShot(int &iPixels) // return 0; // } -int ZZ_ATPControl_Serial_Qt::GetDeviceTemperature(float &fTemperature) +int ZZ_ATPControl_Serial_Qt::GetDeviceTemperature(float& fTemperature) { + fTemperature = 0; + QByteArray qbSend, qbRecv; qbSend.clear(); qbRecv.clear(); @@ -579,9 +727,28 @@ int ZZ_ATPControl_Serial_Qt::GetDeviceTemperature(float &fTemperature) qbSend.resize(3); qbSend[1] = 0x00; qbSend[2] = 0x01; - SendCommand(qbSend); - RecvData(qbRecv); - ParseData(qbRecv); + int iRes = SendCommand(qbSend); + if (iRes != 0) + { + qDebug() << "Err:GetDeviceTemperature Failed.Exit Code:1"; + return 1; + } + iRes = RecvData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:GetDeviceTemperature Failed.Exit Code:2"; + return 2; + } + iRes = ParseData(qbRecv); + if (iRes != 0) + { + qDebug() << "Err:GetDeviceTemperature Failed.Exit Code:3"; + return 3; + } + + QString qstrTemp = qbRecv.data(); + fTemperature = qstrTemp.toFloat(); + return 0; } diff --git a/othersoft/calibration_console/Source_Files/main.cpp b/othersoft/calibration_console/Source_Files/main.cpp index d1a433e..a62316c 100644 --- a/othersoft/calibration_console/Source_Files/main.cpp +++ b/othersoft/calibration_console/Source_Files/main.cpp @@ -101,7 +101,7 @@ int main(int argc, char *argv[]) //自动曝光 logout("
AutoExpose!"); -// m_FiberSpectrometer->autoExpose(); + m_FiberSpectrometer->autoExpose(); //程序sleep:等待关闭快门 diff --git a/othersoft/install.sh b/othersoft/install.sh index 6b732b9..13cef9b 100644 --- a/othersoft/install.sh +++ b/othersoft/install.sh @@ -16,3 +16,5 @@ cp ./shutter_calibrate /home/pi/bin cd ../../../ cp -r ./html/* /var/www/html chmod +x /var/www/html/php/*.sh + +#tc