к1986ве92fi подключение датчика HDC1080_часть3
к1986ве92fi подключение датчика HDC1080_часть3
попросите нейросеть написать к етому си хэдэр и сдесь 2 датчика инициализируются имейте в виду #include "sensors.h" #include // ===== ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ===== struct hdc1080_t hdc1080; SensorData_t sensor_data; // ===== БУФЕРЫ ДЛЯ ФИЛЬТРАЦИИ ===== #define FILTER_SIZE 5 // Количество измерений для усреднения // Буферы для LPS25HB static float lps_temp_buf[FILTER_SIZE]; static float lps_press_buf[FILTER_SIZE]; static int lps_index = 0; // Буферы для HDC1080 static double hdc_temp_buf[FILTER_SIZE]; static double hdc_hum_buf[FILTER_SIZE]; static int hdc_index = 0; // ============================================================ // ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ДЛЯ УСРЕДНЕНИЯ // ============================================================ static float average_float(float *buf, int size) { float sum = 0; for (int i = 0; i ﹤ size; i++) { sum += buf[i]; } return sum / size; } static double average_double(double *buf, int size) { double sum = 0; for (int i = 0; i ﹤ size; i++) { sum += buf[i]; } return sum / size; } // ============================================================ // ИНИЦИАЛИЗАЦИЯ ДАТЧИКОВ // ============================================================ void Sensors_Init(void) { // ===== Очищаем буферы ===== for (int i = 0; i ﹤ FILTER_SIZE; i++) { lps_temp_buf[i] = 0; lps_press_buf[i] = 0; hdc_temp_buf[i] = 0; hdc_hum_buf[i] = 0; } lps_index = 0; hdc_index = 0; // ===== Инициализация LPS25HB ===== //PressInit(); // ===== Инициализация HDC1080 ===== hdc1080_init(&hdc1080;, NULL); hdc1080.configuration.fields.HRES = hdc1080_humidity_resolution_14_bits; hdc1080.configuration.fields.TRES = hdc1080_temperature_resolution_14_bits; hdc1080_set_configuration(&hdc1080;); } // ============================================================ // ОБНОВЛЕНИЕ ДАННЫХ (С ФИЛЬТРАЦИЕЙ) // ============================================================ void Sensors_Update(void) { // ===== 1. ЧИТАЕМ СЫРЫЕ ДАННЫЕ ===== // Press_Get_Temp(&sensor;_data.lps_temp); // Press_Get_Pressure(&sensor;_data.lps_pressure); hdc1080_get_reading(&hdc1080;, &sensor;_data.hdc_temp, &sensor;_data.hdc_humidity); // ===== 2. ДОБАВЛЯЕМ В БУФЕРЫ ===== // LPS25HB // lps_temp_buf[lps_index] = sensor_data.lps_temp; // lps_press_buf[lps_index] = sensor_data.lps_pressure; // lps_index = (lps_index + 1) % FILTER_SIZE; // HDC1080 hdc_temp_buf[hdc_index] = sensor_data.hdc_temp; hdc_hum_buf[hdc_index] = sensor_data.hdc_humidity; hdc_index = (hdc_index + 1) % FILTER_SIZE; // ===== 3. ВЫЧИСЛЯЕМ СРЕДНИЕ ЗНАЧЕНИЯ ===== // sensor_data.lps_temp_filtered = average_float(lps_temp_buf, FILTER_SIZE); // sensor_data.lps_pressure_filtered = average_float(lps_press_buf, FILTER_SIZE); sensor_data.hdc_temp_filtered = average_double(hdc_temp_buf, FILTER_SIZE); sensor_data.hdc_humidity_filtered = average_double(hdc_hum_buf, FILTER_SIZE); } // ============================================================ // ПОЛУЧЕНИЕ ОТФИЛЬТРОВАННЫХ ДАННЫХ // ============================================================ float Sensors_GetLpsTemp(void) { return sensor_data.lps_temp_filtered; } float Sensors_GetLpsPressure(void) { return sensor_data.lps_pressure_filtered; } double Sensors_GetHdcTemp(void) { return sensor_data.hdc_temp_filtered; } double Sensors_GetHdcHumidity(void) { return sensor_data.hdc_humidity_filtered; }