本文整理汇总了C++中Temperature::HasData方法的典型用法代码示例。如果您正苦于以下问题:C++ Temperature::HasData方法的具体用法?C++ Temperature::HasData怎么用?C++ Temperature::HasData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Temperature
的用法示例。
在下文中一共展示了Temperature::HasData方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ApplyCalculation
//-------------------------------------------------------------------------------------------------------------------------------------------------------
void PhModule::ApplyCalculation(Temperature* temp)
{
// Эта функция вызывается при любом обновлении значения с датчика pH, откуда бы это значение
// ни пришло. Здесь мы можем применить к значению поправочные факторы калибровки, в том числе
// по температуре, плюс применяем к показаниям поправочное число.
if(!temp)
return;
if(!temp->HasData())
return;
// теперь проверяем, можем ли мы применить калибровочные поправки?
// для этого все вольтажи, наличие показаний с датчика температуры
// и выставленная настройки температуры калибровочных растворов
// должны быть актуальными.
if(ph4Voltage < 1 || ph7Voltage < 1 || ph10Voltage < 1 || phTemperatureSensorIndex < 0
|| !phSamplesTemperature.HasData() || phSamplesTemperature.Value > 100 || phSamplesTemperature.Value < 0)
return;
AbstractModule* tempModule = MainController->GetModuleByID("STATE");
if(!tempModule)
return;
OneState* os = tempModule->State.GetState(StateTemperature,phTemperatureSensorIndex);
if(!os)
return;
TemperaturePair tempPair = *os;
Temperature tempPH = tempPair.Current;
if(!tempPH.HasData() || tempPH.Value > 100 || tempPH.Value < 0)
return;
Temperature tDiff = tempPH - phSamplesTemperature;
#ifdef PH_DEBUG
PH_DEBUG_OUT(F("T diff: "), tDiff);
#endif
long ulDiff = tDiff.Value;
ulDiff *= 100;
ulDiff += tDiff.Fract;
#ifdef PH_DEBUG
PH_DEBUG_OUT(F("ulDiff: "), ulDiff);
#endif
float fTempDiff = ulDiff/100.0;
#ifdef PH_DEBUG
PH_DEBUG_OUT(F("fTempDiff: "), fTempDiff);
PH_DEBUG_OUT(F("source PH: "), *temp);
#endif
// теперь можем применять факторы калибровки.
// сначала переводим текущие показания в вольтаж, приходится так делать, поскольку
// они приходят уже нормализованными.
long curPHVoltage = temp->Value;
curPHVoltage *= 100;
curPHVoltage += temp->Fract + calibration; // прибавляем сотые доли показаний, плюс сотые доли поправочного числа
curPHVoltage *= 100;
curPHVoltage /= 35; // например, 7,00 pH сконвертируется в 2000 милливольт
#ifdef PH_DEBUG
PH_DEBUG_OUT(F("curPHVoltage: "), curPHVoltage);
PH_DEBUG_OUT(F("ph4Voltage: "), ph4Voltage);
PH_DEBUG_OUT(F("ph7Voltage: "), ph7Voltage);
PH_DEBUG_OUT(F("ph10Voltage: "), ph10Voltage);
#endif
long phDiff = ph4Voltage;
phDiff -= ph10Voltage;
float sensitivity = phDiff/6.0;
sensitivity = sensitivity + fTempDiff*0.0001984;
#ifdef PH_DEBUG
PH_DEBUG_OUT(F("sensitivity: "), sensitivity);
#endif
phDiff = ph7Voltage;
phDiff -= curPHVoltage;
float calibratedPH = 7.0 + phDiff/sensitivity;
#ifdef PH_DEBUG
PH_DEBUG_OUT(F("calibratedPH: "), calibratedPH);
#endif
// теперь переводим всё это обратно в понятный всем вид
uint16_t phVal = calibratedPH*100;
// и сохраняем это дело в показания датчика
temp->Value = phVal/100;
temp->Fract = phVal%100;
//.........这里部分代码省略.........