/* USER CODE BEGIN 4 */
// Fonction qui transmet un caractère via UART et le renvoie.Utilisé pour la sortie standard (printf).
int __io_putchar(int ch) {
    HAL_UART_Transmit(&huart2, (uint8_t*)&ch10xFFFF);  // Pour Envoyer le caractère via UART
    // ITM_SendChar(ch);                 // Option alternative pour envoyer le caractère via ITM
    return ch;
}
// Fonction pour lire l'ADC en mode polling
uint32_t Read_ADC_Polling(void) {                         // Fonction pour lire l'ADC en mode polling
  if (HAL_ADC_Start(&hadc) != HAL_OK) {                   // Démarre la conversion ADC, si cela échoue   
    Error_Handler();                                      // Gestion des erreurs           
  }  
  if (HAL_ADC_PollForConversion(&hadc10) == HAL_OK) {   // Attend la fin de la conversion ADC
    adc_value HAL_ADC_GetValue(&hadc);                  // Récupère la valeur lue par l'ADC dans la variable adc_value
  }
  HAL_ADC_Stop(&hadc);                                    // Arrête la conversion ADC
  return adc_value;                                       // Retourne la valeur lue par l'ADC
}
// Fonction pour interpréter la thermistance
float thermistance(uint32_t value) {    
    const float 0.001129148;                                                        // Coefficient A de Steinhart-Hart
    const float 0.000234125;                                                        // Coefficient B de Steinhart-Hart          
    const float 0.0000000876741;                                                    // Coefficient C de Steinhart-Hart  
    const float REFERENCE_RESISTANCE 10000.0;                                         // Résistance de référence de la thermistance
    const float ADC_VOLTAGE 3.3;                                                      // Tension d'alimentation de l'ADC
    const float ADC_RESOLUTION 4096.0;                                                // Résolution de l'ADC
    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 / (log_r log_r log_r log_r);       // Calcul de la température en Kelvin
    float temperature_celsius temperature_kelvin 273.15;                            // Conversion de la température en Celsius
    return temperature_celsius;                                                         // Retourne la température en Celsius
}
/* USER CODE END 4 */