|
|
@ -1,16 +1,24 @@ |
|
|
|
#include "device_io_control_service.hpp"
|
|
|
|
|
|
|
|
#include <iconv.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "chinese_gb2312.hpp"
|
|
|
|
#include "iflytop/components/uart_printer/uart_printer.hpp"
|
|
|
|
|
|
|
|
using namespace iflytop; |
|
|
|
using namespace std; |
|
|
|
|
|
|
|
#if 0
|
|
|
|
妯″潡 鏉垮瓙 纭�欢ID ID |
|
|
|
绌哄帇鏈�-瀹夊叏鐢电�闃€ 3 PC2 0 |
|
|
|
绌哄帇鏈�-閫氭柇鐢电�闃€ 3 PC3 1 |
|
|
|
榧撻�鏈�-瀹夊叏鐢电�闃€ 3 PC4 2 |
|
|
|
-閫氭柇鐢电�闃€ 3 PC5 3 |
|
|
|
鍔犵儹鐗�-瀹夊叏鐢电�闃€ 3 PC6 4 |
|
|
|
-閫氭柇鐢电�闃€ 3 PC7 5 |
|
|
|
模块 板子 硬件ID ID |
|
|
|
空压机-安全电磁阀 3 PC2 0 |
|
|
|
空压机-通断电磁阀 3 PC3 1 |
|
|
|
鼓风机-安全电磁阀 3 PC4 2 |
|
|
|
-通断电磁阀 3 PC5 3 |
|
|
|
加热片-安全电磁阀 3 PC6 4 |
|
|
|
-通断电磁阀 3 PC7 5 |
|
|
|
#endif
|
|
|
|
|
|
|
|
#define GPM_TO_SPEED(gpm) (gpm * 10)
|
|
|
@ -105,11 +113,11 @@ void DeviceIoControlService::airCompressor_setState(bool val) { |
|
|
|
logger->info("airCompressor_setState:{}", val); |
|
|
|
if (val) { |
|
|
|
m_zcanHost->writeio(0, 1); |
|
|
|
usleep(500 * 100); |
|
|
|
usleep(500 * 1000); |
|
|
|
m_zcanHost->writeio(1, 1); |
|
|
|
} else { |
|
|
|
m_zcanHost->writeio(1, 0); |
|
|
|
usleep(500 * 100); |
|
|
|
usleep(500 * 1000); |
|
|
|
m_zcanHost->writeio(0, 0); |
|
|
|
} |
|
|
|
} |
|
|
@ -122,11 +130,11 @@ int DeviceIoControlService::airBlower_setState(bool val) { |
|
|
|
logger->info("airBlower_setState:{}", val); |
|
|
|
if (val) { |
|
|
|
m_zcanHost->writeio(2, 1); |
|
|
|
usleep(500 * 100); |
|
|
|
usleep(500 * 1000); |
|
|
|
m_zcanHost->writeio(3, 1); |
|
|
|
} else { |
|
|
|
m_zcanHost->writeio(3, 0); |
|
|
|
usleep(500 * 100); |
|
|
|
usleep(500 * 1000); |
|
|
|
m_zcanHost->writeio(2, 0); |
|
|
|
} |
|
|
|
return 0; |
|
|
@ -141,11 +149,11 @@ void DeviceIoControlService::heartingPlate_setPower(bool val) { |
|
|
|
logger->info("heartingPlate_setPower:{}", val); |
|
|
|
if (val) { |
|
|
|
m_zcanHost->writeio(4, 1); |
|
|
|
usleep(500 * 100); |
|
|
|
usleep(500 * 1000); |
|
|
|
m_zcanHost->writeio(5, 1); |
|
|
|
} else { |
|
|
|
m_zcanHost->writeio(5, 0); |
|
|
|
usleep(500 * 100); |
|
|
|
usleep(500 * 1000); |
|
|
|
m_zcanHost->writeio(4, 0); |
|
|
|
} |
|
|
|
} |
|
|
@ -241,7 +249,7 @@ static int filter(int data) { |
|
|
|
if (q.size() > 50) { |
|
|
|
q.pop_front(); |
|
|
|
} |
|
|
|
// 涓�€兼护娉�
|
|
|
|
// 中值滤波
|
|
|
|
int datacache[51]; |
|
|
|
int ndata = 0; |
|
|
|
for (auto& var : q) { |
|
|
@ -267,7 +275,7 @@ int DeviceIoControlService::getDisinfectantVolume_g() { |
|
|
|
|
|
|
|
float kpa = m_pressure_sensor_data[1].value / 1000.0; |
|
|
|
int g = 2.11 * kpa * 1000 * 1.3; |
|
|
|
if (g < 450) { /*闆剁偣*/ |
|
|
|
if (g < 450) { /*零点*/ |
|
|
|
return 0; |
|
|
|
} else { |
|
|
|
g -= 450; |
|
|
@ -296,10 +304,10 @@ int DeviceIoControlService::getWaterImmersionSensor2() { |
|
|
|
DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorData1() { |
|
|
|
lock_guard<recursive_mutex> lock(lock_); |
|
|
|
DeviceIoControlService::h2o2sensor_data_t data; |
|
|
|
// int16_t hydrogen_peroxide_volume; // ppm 0x0100 杩囨哀鍖栨阿娴撳害
|
|
|
|
// int16_t h2o_h2o2_rs; // %RS * 100 0x0101 杩囨哀鍖栨阿鐩稿�楗卞拰搴�
|
|
|
|
// int16_t temperature1; // 掳C * 100 0x0102 娓╁害
|
|
|
|
// int16_t relative_humidity; // %RH * 100 0x0103 鐩稿�婀垮害
|
|
|
|
// int16_t hydrogen_peroxide_volume; // ppm 0x0100 过氧化氢浓度
|
|
|
|
// int16_t h2o_h2o2_rs; // %RS * 100 0x0101 过氧化氢相对饱和度
|
|
|
|
// int16_t temperature1; // °C * 100 0x0102 温度
|
|
|
|
// int16_t relative_humidity; // %RH * 100 0x0103 相对湿度
|
|
|
|
data.h2o2 = m_hpp272_data_1.hydrogen_peroxide_volume; |
|
|
|
data.humid = m_hpp272_data_1.relative_humidity / 100; |
|
|
|
data.temp = m_hpp272_data_1.temperature1 / 100; |
|
|
@ -307,7 +315,7 @@ DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorD |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
* TODO:浼犳劅鍣ㄦ湭鍒濆�鍖栧畬鎴愭椂锛岄櫎浜嗘俯搴﹀�锛岃�鍙栧埌鐨勬暟鎹�兘鏄�皬浜庨浂锛岃繖閲屽仛浜嗕竴涓�畝鍗曠殑澶勭悊锛屽悗缁�渶瑕佷慨鏀� |
|
|
|
* TODO:传感器未初始化完成时,除了温度外,读取到的数据都是小于零,这里做了一个简单的处理,后续需要修改 |
|
|
|
* |
|
|
|
*/ |
|
|
|
if (data.h2o2 < 0) { |
|
|
@ -334,7 +342,7 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se |
|
|
|
data.h2o2sensor_status[2] = false; |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 鎵惧埌鏈€灏忕殑杩囨哀鍖栨阿娴撳害 |
|
|
|
* @brief 找到最小的过氧化氢浓度 |
|
|
|
*/ |
|
|
|
data.min_h2o2 = -1; |
|
|
|
for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) { |
|
|
@ -359,7 +367,7 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 鎵惧埌鏈€澶х殑杩囨哀鍖栨阿鐩稿�楗卞拰搴� |
|
|
|
* @brief 找到最大的过氧化氢相对饱和度 |
|
|
|
*/ |
|
|
|
data.max_saturation = -1; |
|
|
|
for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) { |
|
|
@ -373,7 +381,7 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief 鎵惧埌鏈€澶х殑鐩稿�婀垮害 |
|
|
|
* @brief 找到最大的相对湿度 |
|
|
|
*/ |
|
|
|
|
|
|
|
data.max_humid = -1; |
|
|
@ -388,3 +396,16 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
void DeviceIoControlService::printerTest() { |
|
|
|
printerPrintf("* * * * * * * * * * * * * * * \n"); |
|
|
|
printerPrintf("123456789123456789\n"); |
|
|
|
printerPrintf("abcdefghijk lmnopqr\n"); |
|
|
|
printerPrintf("ABCDEF GHIJ KLMN OPQR\n"); |
|
|
|
printerPrintf(fmt::format("{}\n", ChineseGb2312().nihaozhongguo())); |
|
|
|
printerPrintf(fmt::format("{}\n", ChineseGb2312().nihaozhongguo())); |
|
|
|
printerPrintf(fmt::format("{}\n", ChineseGb2312().nihaozhongguo())); |
|
|
|
printerPrintf("\n"); |
|
|
|
printerPrintf("\n"); |
|
|
|
} |
|
|
|
void DeviceIoControlService::printerPrintf(string str) { GET_SERVICE(UartPrinter)->print(str); } |