process.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #include "process.h"
  2. #include "gpio.h"
  3. #include "cfg.h"
  4. #include "ac780x_gpio.h"
  5. #include "Radar.h"
  6. #include "Imu.h"
  7. #include "adc.h"
  8. uint16_t g_blinkLedTime; /*LED闪烁频率控制时间*/
  9. uint16_t g_blinkLedTgtTime; /*LED目标闪烁频率*/
  10. uint8_t g_mr_Interval = 0; /* 压力传感器更新周期 */
  11. uint8_t g_imumr_Interval = 0; /* imu 读取周期 */
  12. uint16_t g_print_interval = 0; /* 打印周期 */
  13. #define STATUS_DETECTINTERVAL (40) /*60ms * 8 == 320ms 去抖动 */
  14. uint8_t g_runstate; //状态
  15. uint8_t g_state; //状态
  16. uint8_t g_exception; //异常,主要指雷达
  17. static float radar_airheight = 0;
  18. static uint8_t radar_status = 0;
  19. static void update_state()
  20. {
  21. radar_status = Radar_GetHeight(&radar_airheight);
  22. if((STATUS_NoResponse == radar_status) || (STATUS_DataError == radar_status)){
  23. g_exception = 1;
  24. }else{
  25. g_exception = 0;
  26. }
  27. if(STATUS_OPEN == g_state){
  28. g_runstate = STATUS_OPEN;
  29. }else if(STATUS_CLOSE == g_state){
  30. g_runstate = STATUS_CLOSE;
  31. }
  32. if(1 == g_exception){
  33. g_runstate = STATUS_EXCEPTION;
  34. }
  35. }
  36. void Process_Timer1_Callback(void)
  37. {
  38. if(g_blinkLedTime < 0xFFFF)
  39. {
  40. g_blinkLedTime++;
  41. }
  42. if(g_mr_Interval < 0xFF){
  43. g_mr_Interval++;
  44. }
  45. if(g_imumr_Interval < 0xFF){
  46. g_imumr_Interval++;
  47. }
  48. if(g_print_interval < 0xFFFF){
  49. g_print_interval++;
  50. }
  51. }
  52. void Process_Init(void)
  53. {
  54. /*初始化控制变量.*/
  55. g_blinkLedTime = 0;
  56. g_blinkLedTgtTime = BLINK_LED_DFTT;
  57. g_mr_Interval = 0;
  58. g_exception = 0;
  59. g_state = STATUS_CLOSE;
  60. update_state();
  61. ADCSample_UpdateBias(config->temperature_bias, config->pressure_bias);
  62. //printf("process init \r\n");
  63. }
  64. void Process_RunPeriod(void)
  65. {
  66. /*周期性地检查LED闪烁,LED2和LED3同时闪烁.*/
  67. if (g_blinkLedTime >= g_blinkLedTgtTime)
  68. {
  69. g_blinkLedTime = 0;
  70. switch(g_runstate){
  71. case STATUS_CLOSE:
  72. REDLED_OFF;
  73. GREENLED_TOGGLE;
  74. break;
  75. case STATUS_OPEN:
  76. GREENLED_OFF;
  77. REDLED_TOGGLE;
  78. break;
  79. case STATUS_UNKNOW:
  80. REDLED_OFF;
  81. GREENLED_ON;
  82. break;
  83. default:
  84. GREENLED_OFF;
  85. REDLED_ON;
  86. break;
  87. };
  88. }
  89. //压力传感器测量请求
  90. if(g_mr_Interval >= 50){
  91. g_mr_Interval=0;
  92. Radar_CheckResponse();
  93. update_state();
  94. }
  95. if(g_imumr_Interval >= 100){
  96. g_imumr_Interval=0;
  97. //Imu_MR();
  98. }
  99. if(g_print_interval >= 500){
  100. g_print_interval=0;
  101. Radar_SendRequest();
  102. Imu_MR();
  103. //printTempPress();
  104. //PressureSensor_Print();
  105. //printf("the NTC temperature: %f \r\n",getTemperature());
  106. //printf("the DIFF ADC1-ADC2: %d \r\n", getHalldiff());
  107. }
  108. }
  109. uint8_t Process_GetValveStatus(void)
  110. {
  111. return g_state;
  112. }
  113. float Process_GetTemperature(void)
  114. {
  115. return getTemperature();
  116. }
  117. float Process_GetPressure(void)
  118. {
  119. return getPressure();
  120. }
  121. uint8_t Process_GetAirHeight(float* pHeight)
  122. {
  123. return Radar_GetHeight(pHeight);
  124. }
  125. uint8_t Process_GetAngle(float* pRoll, float* pPitch, float* pYaw)
  126. {
  127. return Imu_GetAngle(pRoll, pPitch, pYaw);
  128. }
  129. uint8_t Process_WRadarTransData(uint8_t *pdata, uint8_t len)
  130. {
  131. Radar_SendData(pdata, len);
  132. return 0;
  133. }
  134. uint8_t Process_RRadarTransData(uint8_t *pBuf, uint8_t read_len)
  135. {
  136. Radar_ReadData(pBuf, read_len);
  137. return 0;
  138. }
  139. uint8_t Process_SetBias(float temp_bias, float press_bias)
  140. {
  141. ADCSample_UpdateBias(temp_bias, press_bias);
  142. return 0;
  143. }