117 lines
5.4 KiB
C
117 lines
5.4 KiB
C
#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 %-10s\n", "ADC", "Temp (°C)", "Resistance (Ω)", "Voltage (mV)");
|
||
fprintf(file, "--------------------------------------------------------\n");
|
||
|
||
for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) {
|
||
fprintf(file, "%-8u %-12.1f %-15.2f %-10u\n",
|
||
table[i].adc_value,
|
||
table[i].temp_c / 10.0f,
|
||
table[i].resistance_ohm,
|
||
table[i].voltage_mv);
|
||
}
|
||
|
||
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,Voltage_mV\n");
|
||
|
||
for (int i = 0; i < TABLE_SIZE_LOOKUP; i++) {
|
||
fprintf(file, "%u,%.1f,%.2f,%u\n",
|
||
table[i].adc_value,
|
||
table[i].temp_c / 10.0f,
|
||
table[i].resistance_ohm,
|
||
table[i].voltage_mv);
|
||
}
|
||
|
||
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(3000.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);
|
||
uint16_t volt_duct = get_voltage_fast_for_table(adc_value, TABLE_DUCT);
|
||
printf("DUCT (KST45): ADC=%u, Temp=%.2f °C, Voltage=%u mV\n",
|
||
adc_value, temp_duct / 10.0f, volt_duct);
|
||
|
||
// Получаем температуру и напряжение для INCAR
|
||
int16_t temp_incar = get_temperature_log_fast_for_table(adc_value, TABLE_INCAR);
|
||
uint16_t volt_incar = get_voltage_fast_for_table(adc_value, TABLE_INCAR);
|
||
printf("INCAR: ADC=%u, Temp=%.2f °C, Voltage=%u mV\n",
|
||
adc_value, temp_incar / 10.0f, volt_incar);
|
||
|
||
// Получаем температуру и напряжение для AMBIENT (NTC 10k)
|
||
int16_t temp_ambient = get_temperature_log_fast_for_table(adc_value, TABLE_AMBIENT);
|
||
uint16_t volt_ambient = get_voltage_fast_for_table(adc_value, TABLE_AMBIENT);
|
||
printf("AMBIENT (NTC 10k): ADC=%u, Temp=%.2f °C, Voltage=%u mV\n",
|
||
adc_value, temp_ambient / 10.0f, volt_ambient);
|
||
|
||
// Пример прямого вычисления напряжения
|
||
uint16_t direct_voltage = get_voltage_from_adc(adc_value);
|
||
printf("\nПрямое вычисление напряжения: ADC=%u -> %u mV\n", adc_value, direct_voltage);
|
||
|
||
// Сохраняем таблицы в файлы
|
||
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;
|
||
} |