#include #define NTC_A1 0.003354016f // see NTC RT csv from Vishay #define NTC_B1 0.000300131f #define NTC_C1 5.08516E-06f #define NTC_D1 2.18765E-07f #define NTC_R25 10000.0f // 10k ohm at 25C #define NTC_R_DIVIDER 10000.0f #define NTC_V_DIVIDER 3.000f // 3V [[gnu::always_inline]] static inline float ntc_ohms_to_celsius(float ohms) { float log_ohms = logf(ohms / NTC_R25); return 1.0f / (NTC_A1 + NTC_B1 * log_ohms + NTC_C1 * log_ohms * log_ohms + NTC_D1 * log_ohms * log_ohms * log_ohms) - 273.15f; } [[gnu::always_inline]] static inline float ohms_from_ntc_v(float v) { return (NTC_R_DIVIDER * v) / (NTC_V_DIVIDER - v); } [[maybe_unused]] static int ntc_mv_to_celsius(int mv) { float v = (float)mv * 0.001f; return (int)ntc_ohms_to_celsius(ohms_from_ntc_v(v)); }