#include #include "ADC_Temp.h" void print_table_comparison(void) { printf("\n=== Сравнение таблиц термисторов ===\n\n"); printf("Тестирование %s:\n", get_ntc_name()); printf("Сопротивление делителя R1: %.1f Ом\n", get_r1_value()); printf("Размер таблицы: %d точек\n\n", get_table_size()); printf("ADC\tСопротивление(Ом)\tLinear\tSteinhart\tFull\tFast\n"); printf("---------------------------------------------------------------\n"); // Тестируем разные значения АЦП uint16_t test_adc[] = {500, 1000, 1500, 2000, 2500, 3000, 3500, 4000}; for (int i = 0; i < 8; i++) { uint16_t adc = test_adc[i]; float resistance = get_r1_value() * adc / (4095.0f - adc); float linear = get_temperature_from_adc(adc, ALG_LINEAR); float steinhart = get_temperature_from_adc(adc, ALG_STEINHART); float full = get_temperature_from_adc(adc, ALG_STEINHART_FULL); float fast = get_temperature_fast(adc) / 10.0f; printf("%d\t%.1f\t\t%.2f\t%.2f\t%.2f\t%.2f\n", adc, resistance, linear, steinhart, full, fast); } } void test_temperature_range(void) { printf("\n=== Тестирование температурного диапазона ===\n\n"); printf("Примечание: Для точного тестирования необходимы\n"); printf("функции доступа к таблице термистора\n\n"); // Просто показываем несколько значений uint16_t test_adc[] = {500, 1000, 1500, 2000, 2500, 3000, 3500, 4000}; printf("ADC\tРасчетная температура\n"); printf("------------------------\n"); for (int i = 0; i < 8; i++) { uint16_t adc = test_adc[i]; float temp = get_temperature_from_adc(adc, ALG_STEINHART); printf("%d\t%.2f°C\n", adc, temp); } } void compare_both_ntc_types(void) { printf("\n=== Сравнение двух типов термисторов ===\n\n"); printf("ADC\tNTC Type 1\tNTC Type 2\tРазница\n"); printf("----------------------------------------\n"); uint16_t test_adc[] = {500, 1000, 1500, 2000, 2500, 3000, 3500, 4000}; for (int i = 0; i < 8; i++) { uint16_t adc = test_adc[i]; // Тестируем первый тип init_ntc(NTC_TYPE_1); init_fast_lookup_table(ALG_STEINHART); float temp1 = get_temperature_from_adc(adc, ALG_STEINHART); // Тестируем второй тип init_ntc(NTC_TYPE_2); init_fast_lookup_table(ALG_STEINHART); float temp2 = get_temperature_from_adc(adc, ALG_STEINHART); printf("%d\t%.2f°C\t\t%.2f°C\t\t%.2f°C\n", adc, temp1, temp2, (temp2 - temp1)); } } int main() { printf("=== Программа для работы с NTC термисторами ===\n"); printf("Автор: cfif\n"); printf("Дата: 04.12.2025\n\n"); // Выбираем первый тип термистора для тестирования printf("Инициализация термистора Type 1...\n"); init_ntc(NTC_TYPE_1); init_fast_lookup_table(ALG_STEINHART); // Выводим информацию printf("Текущий термистор: %s\n", get_ntc_name()); printf("Сопротивление делителя R1: %.1f Ом\n", get_r1_value()); printf("Количество точек в таблице: %d\n\n", get_table_size()); // Тестируем различные значения АЦП print_table_comparison(); // Тестируем температурный диапазон test_temperature_range(); // Сравниваем оба типа термисторов compare_both_ntc_types(); // Пример работы с конкретным значением АЦП printf("\n=== Пример работы с конкретным значением АЦП ===\n"); uint16_t test_value = 1980; init_ntc(NTC_TYPE_2); init_fast_lookup_table(ALG_STEINHART); float T_ALG_LINEAR = get_temperature_from_adc(test_value, ALG_LINEAR); float T_ALG_STEINHART = get_temperature_from_adc(test_value, ALG_STEINHART); float T_ALG_STEINHART_FULL = get_temperature_from_adc(test_value, ALG_STEINHART_FULL); float T_FAST = get_temperature_fast(test_value) / 10.0f; printf("Для ADC = %d:\n", test_value); printf(" Линейная интерполяция: %.2f°C\n", T_ALG_LINEAR); printf(" Steinhart-Hart: %.2f°C\n", T_ALG_STEINHART); printf(" Steinhart-Hart полная: %.2f°C\n", T_ALG_STEINHART_FULL); printf(" Быстрый метод: %.2f°C\n", T_FAST); // Пример изменения сопротивления делителя printf("\n=== Пример изменения сопротивления делителя ===\n"); printf("Текущий R1: %.1f Ом\n", get_r1_value()); set_r1(4700.0f); // Изменяем на 4.7 кОм init_fast_lookup_table(ALG_STEINHART); float new_temp = get_temperature_from_adc(test_value, ALG_STEINHART); printf("После изменения R1 на %.1f Ом, температура: %.2f°C\n", get_r1_value(), new_temp); set_r1(3300.0f); // Возвращаем обратно init_fast_lookup_table(ALG_STEINHART); float original_temp = get_temperature_from_adc(test_value, ALG_STEINHART); printf("После возврата R1 на %.1f Ом, температура: %.2f°C\n", get_r1_value(), original_temp); printf("\n=== Программа завершена ===\n"); return 0; }