/* 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);   // Envoyer le caractère via UART
    // ITM_SendChar(ch);                                    // Option alternative pour envoyer le caractère via ITM (Instrument Trace Macrocell)
    return ch;                                              // Retourner le caractère envoyé
}
// Fonction pour lire l'ADC en mode DMA
uint32_t Read_ADC_DMA(void) {    
    if (HAL_ADC_Start_DMA(&hadc, (uint32_t*)&adc_value1) != HAL_OK) {             // Démarre la conversion ADC en utilisant DMA
        printf("Erreur: Problème lors du démarrage de la conversion ADC\r\n");
        return 0;                                                                   // Retourne 0 en cas d'erreur
    }
    HAL_Delay(1);                                                                   // Attendre un peu pour laisser le temps à la conversion de se terminer
    if (HAL_ADC_Stop_DMA(&hadc) != HAL_OK) {                                        // Arrêter la conversion ADC en utilisant DMA
        printf("Erreur: Problème lors de l'arrêt de la conversion ADC\r\n");
        return 0;                                                                   // Retourne 0 en cas d'erreur
    }
    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 */