/**
* @file ALGO_Temperature_ATY.h
*
* @param Project ALGO_Algorithm_ATY_LIB
*
* @author ATY
*
* @copyright
* - Copyright 2017 - 2025 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
*
* https://mengze.top/MZ-ATY_VCJS
* - CC 4.0 BY-NC-SA -
*
* https://creativecommons.org/licenses/by-nc-sa/4.0/
* - Your use will be deemed to have accepted the terms of this statement.
*
* @brief Familiar functions of NTC or others temperature calc
*
* @version
* - 1_01_230107 > ATY
* -# Preliminary version, first Release
********************************************************************************
*/
#ifndef __ALGO_Temperature_ATY_H
#define __ALGO_Temperature_ATY_H
#include "INCLUDE_ATY.h"
#include "ALGO_AlgorithmBase_ATY.h"
/******************************* For user *************************************/
// #define __DEBUG_ALGO_Temperature_ATY
/******************************************************************************/
#define ALGO_TEMP_Kelvin_T0 0 // K
#define ALGO_TEMP_Celsius_C0 0 // C
#define ALGO_TEMP_Fahrenheit_F0 0 // F
#define ALGO_TEMP_TtoC(T) ((T) - 273.15)
#define ALGO_TEMP_CtoT(C) ((C) + 273.15)
#define ALGO_TEMP_CtoF(C) ((C) * 1.8 + 32)
#define ALGO_TEMP_FtoC(F) (((F) - 32 ) / 1.8)
#define ALGO_TEMP_FtoT(F) (ALGO_TEMP_CtoT(ALGO_TEMP_FtoC((F))))
#define ALGO_TEMP_TtoF(T) (ALGO_TEMP_CtoF(ALGO_TEMP_TtoC((T))))
/**
* @brief Calculate resistance from ADC voltage, NTC down(pull up)
* @param vADC ADC voltage in mV
* @param vRef NTC ref voltage in mV
* @param rRefK ref resistance in kOhm
*/
#define ALGO_VoltageToResDown(vADC, vRef, rRefK) \
(((double)rRefK * (double)vADC) / ((double)vRef - (double)vADC))
/**
* @brief Calculate resistance from ADC voltage, NTC up(pull down)
* @param vADC ADC voltage in mV
* @param vRef NTC ref voltage in mV
* @param rRefK ref resistance in kOhm
*/
#define ALGO_VoltageToResUp(vADC, vRef, rRefK) \
(((double)rRefK * ((double)vRef - (double)vADC)) / (double)vADC)
double ALGO_ResToKelvinTempABC(double Rntc, double A, double B, double C);
double ALGO_ResToKelvinTemp(double Rntc, double R25, double B);
double ALGO_VolToKelvinTemp(double vADC, double vRef, double rRefK, double R25, double B, uint8_t rRefPos);
double ALGO_Temp_RTD_Res_Fast(double rtdRes);
double ALGO_Temp_RTD_Res_Above(double rtdRes);
double ALGO_Temp_RTD_Res_Below(double rtdRes);
double ALGO_Temp_RTD_T_PT1000(double T);
double ALGO_Temp_RTD_Res_PT100(double resist);
double ALGO_Temp_RTD_Res_PT1000(double resist);
double ALGO_Temp_TC_TempToVol(uint8_t type, double Temp);
double ALGO_Temp_TC_VolToTemp(uint8_t type, double voltage);
double ALGO_RT_Table_R2T(double R, const double* tableT, const double* tableR, uint16_t tableSize);
double ALGO_RT_Table_T2R(double T, const double* tableT, const double* tableR, uint16_t tableSize);
#endif /* __ALGO_Temperature_ATY_H */
/******************************** End Of File *********************************/