#include #include "ADC_Temp.h" // Функция для сохранения таблицы в файл void save_table_to_file(const char* filename, const adc_temp_lookup* table, const char* table_name) { FILE* file = fopen(filename, "w"); if (file == NULL) { printf("Ошибка: не удалось создать файл %s\n", filename); return; } fprintf(file, "=== Таблица быстрого поиска: %s ===\n", table_name); fprintf(file, "Всего записей: %d\n", TABLE_SIZE_LOOKUP); fprintf(file, "%-8s %-12s %-15s\n", "ADC", "Temp (°C)", "Resistance (Ω)"); fprintf(file, "----------------------------------------\n"); for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) { fprintf(file, "%-8u %-12.1f %-15.2f\n", table[i].adc_value, table[i].temp_c / 10.0f, table[i].resistance_ohm); } fclose(file); printf("Таблица '%s' сохранена в файл: %s\n", table_name, filename); } // Функция для сохранения таблицы в CSV формате void save_table_to_csv(const char* filename, const adc_temp_lookup* table, const char* table_name) { FILE* file = fopen(filename, "w"); if (file == NULL) { printf("Ошибка: не удалось создать файл %s\n", filename); return; } fprintf(file, "# Таблица быстрого поиска: %s\n", table_name); fprintf(file, "ADC,Temperature_C,Resistance_Ohm\n"); for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) { fprintf(file, "%u,%.1f,%.2f\n", table[i].adc_value, table[i].temp_c / 10.0f, table[i].resistance_ohm); } fclose(file); printf("Таблица '%s' сохранена в CSV файл: %s\n", table_name, filename); } // Функция для сохранения обеих таблиц void save_both_tables(void) { const fast_lookup_tables_t* tables = get_fast_tables(); // Сохраняем в текстовом формате save_table_to_file("kst45_table.txt", tables->kst45, "KST45"); save_table_to_file("incar_table.txt", tables->incar, "INCAR"); // Сохраняем в CSV формате (удобно для Excel) save_table_to_csv("kst45_table.csv", tables->kst45, "KST45"); save_table_to_csv("incar_table.csv", tables->incar, "INCAR"); } // Функция для сохранения только рабочего диапазона (без зон насыщения) void save_working_range_to_file(const char* filename, const adc_temp_lookup* table, const char* table_name, uint16_t min_adc, uint16_t max_adc) { FILE* file = fopen(filename, "w"); if (file == NULL) { printf("Ошибка: не удалось создать файл %s\n", filename); return; } fprintf(file, "=== Рабочий диапазон таблицы: %s ===\n", table_name); fprintf(file, "Диапазон ADC: %u - %u\n", min_adc, max_adc); fprintf(file, "%-8s %-12s %-15s\n", "ADC", "Temp (°C)", "Resistance (Ω)"); fprintf(file, "----------------------------------------\n"); int count = 0; for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) { if (table[i].adc_value >= min_adc && table[i].adc_value <= max_adc) { fprintf(file, "%-8u %-12.1f %-15.2f\n", table[i].adc_value, table[i].temp_c / 10.0f, table[i].resistance_ohm); count++; } } fprintf(file, "\nВсего записей в рабочем диапазоне: %d\n", count); fclose(file); printf("Рабочий диапазон таблицы '%s' сохранен в файл: %s\n", table_name, filename); } int main() { // Инициализируем обе таблицы одновременно с разными значениями R1 init_both_tables(20000.0f, // R1 для KST45 3000.0f, // R1 для INCAR ALG_STEINHART); uint16_t adc_value = 3200;//1980; printf("\n=== Работа с обеими таблицами одновременно ===\n"); // Получаем температуру для KST45 int16_t temp_kst45 = get_temperature_log_fast_for_table(adc_value, TABLE_KST45); printf("KST45: ADC=%u, Temp=%.2f °C\n", adc_value, temp_kst45 / 10.0f); // Получаем температуру для INCAR int16_t temp_incar = get_temperature_log_fast_for_table(adc_value, TABLE_INCAR); printf("INCAR: ADC=%u, Temp=%.2f °C\n", adc_value, temp_incar / 10.0f); // Можно переключать активную конфигурацию printf("\n=== Переключение активной конфигурации ===\n"); set_active_config(TABLE_KST45, 3300.0f); int16_t temp_active1 = get_temperature_log_fast(adc_value); float temp_kst45_alg = get_temperature_from_adc(adc_value, ALG_STEINHART); printf("Активная (KST45): Temp=%.2f °C Temp (alg) = %.2f °C\n", temp_active1 / 10.0f, temp_kst45_alg); set_active_config(TABLE_INCAR, 3300.0f); int16_t temp_active2 = get_temperature_log_fast(adc_value); float temp_incar_alg = get_temperature_from_adc(adc_value, ALG_STEINHART); printf("Активная (INCAR): Temp=%.2f °C Temp (alg) = %.2f °C\n", temp_active2 / 10.0f, temp_incar_alg); // Получаем доступ к таблицам для отладки const fast_lookup_tables_t* tables = get_fast_tables(); /* printf("\n=== Пример данных из таблиц быстрого поиска ===\n"); printf("KST45 таблица (первые 15 записи):\n"); for(int i = 0; i < 15; i++) { printf(" ADC: %u, Temp: %.1f °C, R: %.2f Ω\n", tables->kst45[i].adc_value, tables->kst45[i].temp_c / 10.0f, tables->kst45[i].resistance_ohm); } printf("\nINCAR таблица (первые 15 записи):\n"); for(int i = 0; i < 15; i++) { printf(" ADC: %u, Temp: %.1f °C, R: %.2f Ω\n", tables->incar[i].adc_value, tables->incar[i].temp_c / 10.0f, tables->incar[i].resistance_ohm); } printf("\nKST45 таблица (последние 15 записи):\n"); for(int i = TABLE_SIZE_LOOKUP - 1; i > TABLE_SIZE_LOOKUP - 16; i--) { printf(" ADC: %u, Temp: %.1f °C, R: %.2f Ω\n", tables->kst45[i].adc_value, tables->kst45[i].temp_c / 10.0f, tables->kst45[i].resistance_ohm); } printf("\nINCAR таблица (последние 15 записи):\n"); for(int i = TABLE_SIZE_LOOKUP - 1; i > TABLE_SIZE_LOOKUP - 16; i--) { printf(" ADC: %u, Temp: %.1f °C, R: %.2f Ω\n", tables->incar[i].adc_value, tables->incar[i].temp_c / 10.0f, tables->incar[i].resistance_ohm); } */ // Сохраняем таблицы в файлы printf("\n=== Сохранение таблиц в файлы ===\n"); save_both_tables(); // Сохраняем только рабочие диапазоны (без зон насыщения) // Для KST45 рабочий диапазон примерно от 58 до 3418 save_working_range_to_file("kst45_working_range.txt", tables->kst45, "KST45", 58, 3418); save_working_range_to_file("incar_working_range.txt", tables->incar, "INCAR", 58, 3418); // Пример обратного преобразования (температура -> сопротивление) printf("\n=== Обратное преобразование ===\n"); int16_t temp_test = 250; // 25.0 °C float resistance_kst45 = get_resistance_log_fast_for_table(temp_test, TABLE_KST45); float resistance_incar = get_resistance_log_fast_for_table(temp_test, TABLE_INCAR); printf("При %.1f °C:\n", temp_test / 10.0f); printf(" KST45 сопротивление: %.2f Ω\n", resistance_kst45); printf(" INCAR сопротивление: %.2f Ω\n", resistance_incar); return 0; }