MODEL_ADC_EX/APP/main.c

120 lines
5.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#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_all_tables(void) {
const fast_lookup_tables_t* tables = get_fast_tables();
// Сохраняем в текстовом формате
save_table_to_file("duct_table.txt", tables->duct, "DUCT");
save_table_to_file("incar_table.txt", tables->incar, "INCAR");
save_table_to_file("ambient_table.txt", tables->ambient, "AMBIENT");
// Сохраняем в CSV формате (удобно для Excel)
save_table_to_csv("duct_table.csv", tables->duct, "DUCT");
save_table_to_csv("incar_table.csv", tables->incar, "INCAR");
save_table_to_csv("ambient_table.csv", tables->ambient, "AMBIENT");
}
int main() {
// Инициализируем все три таблицы с разными значениями R1
init_all_tables(20000.0f, // R1 для DUCT (KST45)
20000.0f, // R1 для INCAR
20000.0f, // R1 для AMBIENT (NTC 10k)
ALG_STEINHART);
uint16_t adc_value = 2000;
printf("\n=== Работа с тремя датчиками одновременно ===\n");
// Получаем температуру для DUCT (KST45)
int16_t temp_duct = get_temperature_log_fast_for_table(adc_value, TABLE_DUCT);
printf("DUCT (KST45): ADC=%u, Temp=%.2f °C\n", adc_value, temp_duct / 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);
// Получаем температуру для AMBIENT (NTC 10k)
int16_t temp_ambient = get_temperature_log_fast_for_table(adc_value, TABLE_AMBIENT);
printf("AMBIENT (NTC 10k): ADC=%u, Temp=%.2f °C\n", adc_value, temp_ambient / 10.0f);
// Переключение активной конфигурации
printf("\n=== Переключение активной конфигурации ===\n");
set_active_config(TABLE_DUCT, 3300.0f);
int16_t temp_active1 = get_temperature_log_fast(adc_value);
printf("Активная (DUCT): Temp=%.2f °C\n", temp_active1 / 10.0f);
set_active_config(TABLE_INCAR, 3300.0f);
int16_t temp_active2 = get_temperature_log_fast(adc_value);
printf("Активная (INCAR): Temp=%.2f °C\n", temp_active2 / 10.0f);
set_active_config(TABLE_AMBIENT, 10000.0f);
int16_t temp_active3 = get_temperature_log_fast(adc_value);
printf("Активная (AMBIENT): Temp=%.2f °C\n", temp_active3 / 10.0f);
// Сохраняем таблицы в файлы
printf("\n=== Сохранение таблиц в файлы ===\n");
save_all_tables();
// Пример обратного преобразования (температура -> сопротивление)
printf("\n=== Обратное преобразование ===\n");
int16_t temp_test = 250; // 25.0 °C
float resistance_duct = get_resistance_log_fast_for_table(temp_test, TABLE_DUCT);
float resistance_incar = get_resistance_log_fast_for_table(temp_test, TABLE_INCAR);
float resistance_ambient = get_resistance_log_fast_for_table(temp_test, TABLE_AMBIENT);
printf("При %.1f °C:\n", temp_test / 10.0f);
printf(" DUCT сопротивление: %.2f Ω\n", resistance_duct);
printf(" INCAR сопротивление: %.2f Ω\n", resistance_incar);
printf(" AMBIENT сопротивление: %.2f Ω\n", resistance_ambient);
return 0;
}