Projet voilier 4IRA1 Arnaud Vergnet Marino Benassai Bastien Picco Yohan Simard
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Chrono.c 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // A COMPLETER
  2. /*
  3. Service permettant de chornométrer jusqu'à 59mn 59s 99 1/100
  4. Utilise un timer au choix (TIMER1 à TIMER4).
  5. Utilise la lib MyTimers.h /.c
  6. */
  7. #include "Chrono.h"
  8. #include "Timer.h"
  9. // variable privée de type Time qui mémorise la durée mesurée
  10. static Time Chrono_Time; // rem : static rend la visibilité de la variable Chrono_Time limitée à ce fichier
  11. // variable privée qui mémorise pour le module le timer utilisé par le module
  12. static TIM_TypeDef * Chrono_Timer=TIM1; // init par défaut au cas où l'utilisateur ne lance pas Chrono_Conf avant toute autre fct.
  13. // déclaration callback appelé toute les 10ms
  14. void Chrono_Task_10ms(void);
  15. /**
  16. * @brief Configure le chronomètre.
  17. * @note A lancer avant toute autre fonction.
  18. * @param Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
  19. * @retval None
  20. */
  21. void Chrono_Conf(TIM_TypeDef * Timer)
  22. {
  23. // Reset Time
  24. Chrono_Time.Hund = 0;
  25. Chrono_Time.Sec = 0;
  26. Chrono_Time.Min = 0;
  27. // Fixation du Timer
  28. Chrono_Timer = Timer;
  29. // Réglage Timer pour un débordement à 10ms
  30. Timer_conf(Chrono_Timer, 999, 719);
  31. // Réglage des interruptions
  32. Timer_IT_conf(Chrono_Timer, Chrono_Task_10ms, 3);
  33. Timer_IT_enable(Chrono_Timer);
  34. }
  35. /**
  36. * @brief Démarre le chronomètre.
  37. * @note si la durée dépasse 59mn 59sec 99 Hund, elle est remise à zéro et repart
  38. * @param Aucun
  39. * @retval Aucun
  40. */
  41. void Chrono_Start(void)
  42. {
  43. Timer_start(Chrono_Timer);
  44. }
  45. /**
  46. * @brief Arrête le chronomètre.
  47. * @note
  48. * @param Aucun
  49. * @retval Aucun
  50. */
  51. void Chrono_Stop(void)
  52. {
  53. Timer_stop(Chrono_Timer);
  54. }
  55. /**
  56. * @brief Remet le chronomètre à 0
  57. * @note
  58. * @param Aucun
  59. * @retval Aucun
  60. */
  61. void Chrono_Reset(void)
  62. {
  63. // Arrêt Chrono
  64. Timer_stop(Chrono_Timer);
  65. // Reset Time
  66. Chrono_Time.Hund=0;
  67. Chrono_Time.Sec=0;
  68. Chrono_Time.Min=0;
  69. }
  70. /**
  71. * @brief Renvoie l'adresse de la variable Time privée gérée dans le module Chrono.c
  72. * @note
  73. * @param Aucun
  74. * @retval adresse de la variable Time
  75. */
  76. Time * Chrono_Read(void)
  77. {
  78. return &Chrono_Time;
  79. }
  80. /**
  81. * @brief incrémente la variable privée Chron_Time modulo 60mn
  82. * @note
  83. * @param Aucun
  84. * @retval Aucun
  85. */
  86. void Chrono_Task_10ms(void)
  87. {
  88. Chrono_Time.Hund++;
  89. if (Chrono_Time.Hund==100)
  90. {
  91. Chrono_Time.Sec++;
  92. Chrono_Time.Hund=0;
  93. }
  94. if (Chrono_Time.Sec==60)
  95. {
  96. Chrono_Time.Min++;
  97. Chrono_Time.Sec=0;
  98. }
  99. if (Chrono_Time.Min==60)
  100. {
  101. Chrono_Time.Hund=0;
  102. }
  103. }