/* 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*) &ch, 1, 0xFFFF); // 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 *data, uint8_t start_index, uint8_t end_index) {
float sum = 0; // Variable pour stocker la somme des valeurs
for (int i = start_index; i < end_index; i++) { // Parcourir les données
printf("Data[%d]: %u\n", i, data[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 */