/* USER CODE BEGIN 4 */
/**
 @brief Fonction qui transmet un caractère via UART et le renvoie.
 @param ch Caractère à transmettre.
 @retval int Caractère transmis.
 */
int __io_putchar(int ch) {
  HAL_UART_Transmit(&huart2, (uint8_t*) &ch10xFFFF);  // Envoyer le caractère via UART
  ITM_SendChar(ch);                                       // Option pour envoyer le caractère via ITM
  return ch;                                              // Retourner le caractère envoyé
}
/**
 @brief Convertit la valeur ADC en température en utilisant l'équation de Steinhart-Hart.
 @param value Valeur ADC lue à partir de la thermistance.
 @return Température calculée en Celsius.
 */
float thermistance(uint16_t value) {
  float voltage = (value ADC_RESOLUTION) * ADC_VOLTAGE;                                         // Calcul de la tension
  float resistance REFERENCE_RESISTANCE * ((ADC_VOLTAGE voltage) - 1);                        // Calcul de la résistance
  float log_r log(resistance);                                                                  // Calcul du logarithme de la résistance
  float temperature_kelvin 1.0 / (A_COEFF B_COEFF log_r C_COEFF log_r log_r log_r); // Calcul de la température en Kelvin
  return temperature_kelvin 273.15;                                                             // Conversion en Celsius
}
/**
 @brief Fonction d'interruption pour le demi-buffer de l'ADC.
 @param hadc Pointeur vers la structure de l'ADC.
 @retval None
 */
 void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc) {
  flag_half_buffer 1;                                               // On indique que le demi-buffer est prêt
}
/**
 @brief Fonction d'interruption pour le buffer complet de l'ADC.
 @param hadc Pointeur vers la structure de l'ADC.
 @retval None
 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
  flag_Cplt_buffer 1;                                               // On indique que le buffer complet est prêt
}
/**
 @brief Fonction pour traiter les données.
 @param data Pointeur vers le tableau de données.
 @param start_index Index de début.
 @param end_index Index de fin.
 @retval None
 */
void process_data(volatile uint16_t *datauint8_t start_indexuint8_t end_index) {
    float sum 0;                                                                  // Variable pour stocker la somme des valeurs
    for (int start_indexend_indexi++) {                                 // Parcourir les données             
        printf("Data[%d]: %u\n"idata[i]);                                         // Afficher les valeurs lues par l'ADC             
        temp_value[i] = thermistance(data[i]);                                      // Convertir la valeur ADC en température          
        sum += temp_value[i];                                                       // Ajouter la valeur à la somme                
    }
    float temperature_average sum / (TEMP_BUFFER_SIZE 2);                       // Calculer la moyenne de la température         
    printf("Moyenne température sur 10 secondes : %.1f\r\n"temperature_average);  // Afficher la moyenne de la température
}
/* USER CODE END 4 */