process.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include "process.h"
  2. #include "gpio.h"
  3. #include "cfg.h"
  4. #include "ac780x_gpio.h"
  5. #include "PressureSensor.h"
  6. #include "adc.h"
  7. uint16_t g_blinkLedTime; /*LED闪烁频率控制时间*/
  8. uint16_t g_blinkLedTgtTime; /*LED目标闪烁频率*/
  9. uint8_t g_mr_Interval = 0; /* 压力传感器更新周期 */
  10. uint16_t g_print_interval = 0; /* 打印周期 */
  11. #define STATUS_DETECTINTERVAL (40) /*60ms * 8 == 320ms 去抖动 */
  12. uint8_t g_runstate; //状态
  13. uint8_t g_state; //状态
  14. uint8_t g_exception; //异常,主要指IIC 通信
  15. uint8_t close_count =0;
  16. uint8_t open_count=0;
  17. static void update_state()
  18. {
  19. // //判定阀开状态
  20. // if(config->valvecolse_base <= 0){
  21. //
  22. // if(getHalldiff() > (config->valvecolse_base + config->threshold)){
  23. // //g_state = STATUS_OPEN;
  24. // if(open_count < 0xFF) open_count++;
  25. // close_count=0;
  26. // }else{
  27. // //g_state = STATUS_CLOSE;
  28. // open_count=0;
  29. // if(close_count < 0xFF) close_count++;
  30. // }
  31. //
  32. // }else{
  33. if(getHalldiff() >= (config->valvecolse_base + config->threshold)){
  34. //g_state = STATUS_CLOSE;
  35. open_count=0;
  36. if(close_count < 0xFF) close_count++;
  37. }else{
  38. //g_state = STATUS_OPEN;
  39. if(open_count < 0xFF) open_count++;
  40. close_count=0;
  41. }
  42. // }
  43. if(close_count >= 10){
  44. g_state = STATUS_CLOSE;
  45. }else if(open_count >= 10){
  46. g_state = STATUS_OPEN;
  47. }
  48. if(STATUS_OPEN == g_state){
  49. g_runstate = STATUS_OPEN;
  50. }else if(STATUS_CLOSE == g_state){
  51. g_runstate = STATUS_CLOSE;
  52. }
  53. if(1 == g_exception){
  54. g_runstate = STATUS_EXCEPTION;
  55. }
  56. }
  57. void Process_Init(void)
  58. {
  59. /*初始化控制变量.*/
  60. g_blinkLedTime = 0;
  61. g_blinkLedTgtTime = BLINK_LED_DFTT;
  62. g_mr_Interval = 0;
  63. g_exception = 0;
  64. g_state = STATUS_CLOSE;
  65. update_state();
  66. printf("process init \r\n");
  67. }
  68. void Process_RunPeriod(void)
  69. {
  70. /*周期性地检查LED闪烁,LED2和LED3同时闪烁.*/
  71. if (g_blinkLedTime >= g_blinkLedTgtTime)
  72. {
  73. g_blinkLedTime = 0;
  74. switch(g_runstate){
  75. case STATUS_CLOSE:
  76. REDLED_OFF;
  77. GREENLED_TOGGLE;
  78. break;
  79. case STATUS_OPEN:
  80. GREENLED_OFF;
  81. REDLED_TOGGLE;
  82. break;
  83. case STATUS_UNKNOW:
  84. REDLED_OFF;
  85. GREENLED_ON;
  86. break;
  87. default:
  88. GREENLED_OFF;
  89. REDLED_ON;
  90. break;
  91. };
  92. }
  93. //压力传感器测量请求
  94. if(g_mr_Interval >= 50){
  95. g_mr_Interval=0;
  96. g_exception = PressureSensor_MR();
  97. update_state();
  98. }
  99. // if(g_print_interval >= 1000){
  100. // g_print_interval=0;
  101. // PressureSensor_Print();
  102. //
  103. // printf("the NTC temperature: %f \r\n",getTemperature());
  104. // printf("the DIFF ADC1-ADC2: %d \r\n", getHalldiff());
  105. // }
  106. }
  107. uint8_t Process_GetValveStatus(void)
  108. {
  109. return g_state;
  110. }
  111. float Process_GetTemperature(void)
  112. {
  113. return getTemperature();
  114. }
  115. float Process_GetPressure(void)
  116. {
  117. float pressure = 0.0;
  118. float temperature = 0.0;
  119. //PressureSensor_Getvalue(&pressure);
  120. PressureSensor_Getvalue2(&pressure, &temperature);
  121. return pressure;
  122. }