/* USER CODE BEGIN 0 */
void microDelay (uint16_t delay)  // Fonction pour créer un délai en microsecondes
{
  __HAL_TIM_SET_COUNTER(&htim10);  // Réinitialise le compteur du timer
  while (__HAL_TIM_GET_COUNTER(&htim1) < delay);  // Attend que le compteur atteigne la valeur de délai
}

uint8_t DHT21_Start (void)  // Fonction pour démarrer la communication avec le DHT21
{
  uint8_t Response 0;  // Variable pour stocker la réponse du capteur
  GPIO_InitTypeDef GPIO_InitStructPrivate = {0};  // Structure pour configurer le GPIO
  GPIO_InitStructPrivate.Pin DHT21_PIN;  // Définit la broche du DHT21
  GPIO_InitStructPrivate.Mode GPIO_MODE_OUTPUT_PP;  // Configure la broche en sortie
  GPIO_InitStructPrivate.Speed GPIO_SPEED_FREQ_LOW;  // Vitesse de la broche
  GPIO_InitStructPrivate.Pull GPIO_NOPULL;  // Pas de résistance de pull-up/down
  HAL_GPIO_Init(DHT21_PORT, &GPIO_InitStructPrivate);  // Initialise le GPIO
  HAL_GPIO_WritePin (DHT21_PORTDHT21_PIN0);  // Met la broche à l'état bas
  microDelay (1000);  // Attend 1 ms
  HAL_GPIO_WritePin (DHT21_PORTDHT21_PIN1);  // Met la broche à l'état haut
  microDelay (30);  // Attend 30 µs
  GPIO_InitStructPrivate.Mode GPIO_MODE_INPUT;  // Configure la broche en entrée
  GPIO_InitStructPrivate.Pull GPIO_PULLUP;  // Active la résistance de pull-up
  HAL_GPIO_Init(DHT21_PORT, &GPIO_InitStructPrivate);  // Réinitialise le GPIO
  microDelay (40);  // Attend 40 µs
  if (!(HAL_GPIO_ReadPin (DHT21_PORTDHT21_PIN)))  // Vérifie si la broche est basse
  {
    microDelay (80);  // Attend 80 µs
    if ((HAL_GPIO_ReadPin (DHT21_PORTDHT21_PIN))) Response 1;  // Si la broche est haute, réponse = 1
  }
  pMillis HAL_GetTick();  // Stocke le temps actuel
  cMillis HAL_GetTick();  // Stocke le temps actuel
  while ((HAL_GPIO_ReadPin (DHT21_PORTDHT21_PIN)) && pMillis cMillis)  // Attend que la broche soit basse
  {
    cMillis HAL_GetTick();  // Met à jour le temps actuel
  }
  return Response;  // Retourne la réponse du capteur
}

uint8_t DHT21_Read (void)  // Fonction pour lire un octet de données du DHT21
{
  uint8_t x0;  // Variables pour stocker les bits et l'octet lu
  for (08x++)  // Boucle pour lire 8 bits
  {
    pMillis HAL_GetTick();  // Stocke le temps actuel
    cMillis HAL_GetTick();  // Stocke le temps actuel
    while (!(HAL_GPIO_ReadPin (DHT21_PORTDHT21_PIN)) && pMillis cMillis)  // Attend que la broche soit haute
    {
      cMillis HAL_GetTick();  // Met à jour le temps actuel
    }
    microDelay (40);  // Attend 40 µs
    if (!(HAL_GPIO_ReadPin (DHT21_PORTDHT21_PIN)))  // Si la broche est basse
      &= ~(<< (x));  // Met le bit correspondant à 0
    else
      |= (<< (x));  // Met le bit correspondant à 1
    pMillis HAL_GetTick();  // Stocke le temps actuel
    cMillis HAL_GetTick();  // Stocke le temps actuel
    while ((HAL_GPIO_ReadPin (DHT21_PORTDHT21_PIN)) && pMillis cMillis)  // Attend que la broche soit basse
    {
      cMillis HAL_GetTick();  // Met à jour le temps actuel
    }
  }
  return y;  // Retourne l'octet lu
}
/* USER CODE END 0 */