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.

429 lines
11 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. #include "ozone_work.h"
  2. #define TIMINT_TIME 1800000
  3. uint8_t timing_rank=0;//1��ʱ30min��2��ʱ60min,3��ʱ90min,4��ʱ120min
  4. extern uint32_t g_frequency;
  5. extern uint32_t g_sys_sick;
  6. extern uint32_t g_duty[4];
  7. extern adc_t adc;
  8. uint32_t g_ozone_work_time = 0;
  9. uint32_t g_ozone_interval_time = 0;
  10. uint32_t g_count_down_begin_sys_time = 0;
  11. uint32_t g_count_interval_down_begin_sys_time = 0;
  12. int ozone_work_state = 0; // 0û�й�����1һֱ������2��ʱ����
  13. bool g_ozone_interva_stat = false;
  14. int interval_key_press_frequency = 0; //ÿ����4�ν�����0
  15. int g_ozen_gears = 1; //�ϵ�Ĭ������100%���´�����50%��PWM
  16. static bool switch_key_state = false;
  17. int time_key_press_frequency = 0; //ÿ����4�ν�����0
  18. bool g_interva_flag = false;
  19. //###################### �ߵ͵�������ʼ ################//
  20. void ozone_work_mode(int mode) {
  21. if (ozone_work_state != 2) {
  22. ozone_work_state = 1;
  23. }
  24. port_fan_set(true);
  25. switch (mode) {
  26. case 0:
  27. gears_led_on(0);
  28. break;
  29. case 1:
  30. gears_led_on(1);
  31. break;
  32. case 2:
  33. gears_led_on(2);
  34. break;
  35. case 3:
  36. timing_ozone_work_over(); //��������
  37. break;
  38. default:
  39. break;
  40. }
  41. }
  42. void update_interval_down_begin_sys_time(void) {
  43. g_count_interval_down_begin_sys_time = get_sys_ticket();
  44. }
  45. void update_ozer_work_state(void) {
  46. // int gears_time_key_press_frequency = 0;
  47. if (g_ozone_interva_stat == true &&
  48. g_interva_flag == true) { //���������Ǽ�Ъ��Ϣʱ�䣬ֱ�ӿ�ʼ����
  49. update_interval_down_begin_sys_time();
  50. g_interva_flag = false;
  51. }
  52. // if (time_key_press_frequency == 0) {
  53. // gears_time_key_press_frequency = 4;
  54. // } else {
  55. // gears_time_key_press_frequency = time_key_press_frequency - 1;
  56. // }
  57. // if (ozone_work_state == 2) {
  58. // timing_led_on(gears_time_key_press_frequency); //����led��
  59. // }
  60. }
  61. void set_ozen_gears(int ozen_gears) {
  62. /**
  63. * @brief Construct a new switch object
  64. * pwm
  65. */
  66. update_ozer_work_state(); //�������ڶ�ʱʱ��δ�������Ҵ��ڼ�Ъ��Ϣʱ�䣬ֱ������Ϊ��Ъ����ʱ��
  67. switch (ozen_gears) {
  68. case 0:
  69. set_pwm_frequency_duty(g_frequency, g_duty[0]);
  70. g_ozen_gears = 1;
  71. printf("pwm g_duty:%d", g_duty[0]);
  72. ozone_work_mode(0);
  73. break;
  74. case 1:
  75. set_pwm_frequency_duty(g_frequency, g_duty[1]);
  76. g_ozen_gears = 2;
  77. printf("pwm g_duty:%d", g_duty[1]);
  78. ozone_work_mode(1);
  79. break;
  80. case 2:
  81. set_pwm_frequency_duty(g_frequency, g_duty[2]);
  82. // g_ozen_gears = 3;
  83. g_ozen_gears = 0;
  84. printf("pwm g_duty:%d", g_duty[2]);
  85. ozone_work_mode(2);
  86. break;
  87. // case 3:
  88. // set_pwm_frequency_duty(g_frequency, g_duty[3]);
  89. // g_ozen_gears = 0;
  90. // printf("pwm g_duty:%d", g_duty[3]);
  91. // ozone_work_mode(3);
  92. // break;
  93. }
  94. }
  95. /**
  96. * @brief
  97. *
  98. * @param led_number 0 1̵ 2 3ȫ
  99. */
  100. void gears_led_on(uint8_t led_number) {
  101. for (int i = 0; i < 3; i++) {
  102. if (i == led_number) {
  103. s_rgb[i].set_led_state = true;
  104. s_rgb[i].port_led_set(s_rgb[i].set_led_state);
  105. } else {
  106. s_rgb[i].set_led_state = false;
  107. s_rgb[i].port_led_set(s_rgb[i].set_led_state);
  108. }
  109. }
  110. }
  111. #if 0
  112. void gears_led_on(uint8_t led_number) {
  113. switch (led_number) {
  114. case 0:
  115. port_led_r_set(true);
  116. port_led_g_set(false);
  117. port_led_b_set(false);
  118. break;
  119. case 1:
  120. port_led_r_set(false);
  121. port_led_g_set(true);
  122. port_led_b_set(false);
  123. break;
  124. case 2:
  125. port_led_r_set(false);
  126. port_led_g_set(false);
  127. port_led_b_set(true);
  128. break;
  129. case 3:
  130. port_led_r_set(false);
  131. port_led_g_set(false);
  132. port_led_b_set(false);
  133. break;
  134. default:
  135. break;
  136. }
  137. }
  138. #endif
  139. //###################### �ߵ͵��������� ################//
  140. //###################### ��ʱ������ʼ ################//
  141. void set_ozone_work_time(void) {
  142. if (!ozone_work_state) { //�������ڲ��ǹ���״̬��ֱ�ӿ�ʼ����
  143. set_ozen_gears(0);
  144. }
  145. ozone_work_state = 2; //���ڶ�ʱ����״̬
  146. //��ȡ���ڵ�ʱ�䣬��Ϊ�жϵ���ʱʱ���Ļ�׼
  147. g_count_down_begin_sys_time = get_sys_ticket();
  148. port_fan_set(1); //���ȿ�ʼ����
  149. switch (time_key_press_frequency) {
  150. case 5:
  151. time_key_press_frequency = 0;
  152. case 0: // 30min
  153. // g_ozone_work_time = 7200000;
  154. g_ozone_work_time = 1800000;
  155. printf("g_ozone_work_time:%d", g_ozone_work_time);
  156. time_key_press_frequency = 1;
  157. timing_led_on(0);
  158. break;
  159. case 1: // 60min
  160. // g_ozone_work_time = 14400000;
  161. g_ozone_work_time = 3600000;
  162. printf("g_ozone_work_time:%d", g_ozone_work_time);
  163. time_key_press_frequency = 2;
  164. timing_led_on(1);
  165. break;
  166. case 2: // 90min
  167. // g_ozone_work_time = 21600000;
  168. g_ozone_work_time = 5400000;
  169. printf("g_ozone_work_time:%d", g_ozone_work_time);
  170. time_key_press_frequency = 3;
  171. timing_led_on(2);
  172. break;
  173. case 3: // 120min
  174. // g_ozone_work_time = 28800000;
  175. g_ozone_work_time = 7200000;
  176. printf("g_ozone_work_time:%d", g_ozone_work_time);
  177. time_key_press_frequency = 4;
  178. timing_led_on(3);
  179. break;
  180. case 4:
  181. ozone_work_state = 1; //һֱ����
  182. printf("close timing");
  183. timing_led_on(4); //�ر����ж�ʱ��
  184. time_key_press_frequency = 0;
  185. break;
  186. default:
  187. break;
  188. }
  189. }
  190. void timing_ozone_work_over(void) {
  191. /**
  192. * @brief ʱ
  193. *
  194. */
  195. close_ozone_work();
  196. ozone_work_state = 0;
  197. g_ozone_work_time = 0;
  198. switch_key_state = false;
  199. }
  200. /**
  201. * @brief ʱ
  202. *
  203. */
  204. void is_ozone_work_time_over(void) {
  205. if (port_haspassedms(g_count_down_begin_sys_time) >= g_ozone_work_time) {
  206. g_count_down_begin_sys_time = get_sys_ticket();
  207. timing_ozone_work_over();
  208. // interval_key_press_frequency = 0;
  209. g_ozone_interva_stat = false;
  210. interval_key_press_frequency = 0;
  211. printf("time over\r\n");
  212. }
  213. }
  214. /**
  215. * @brief ʱʱӦָʾ
  216. *
  217. * @param led_number 0led0 1led1 2led2 3led3 4ȫ𲢴
  218. */
  219. void timing_led_on(uint8_t led_number) {
  220. if (led_number == 4) {
  221. port_led0_set(false);
  222. port_led1_set(false);
  223. port_led2_set(false);
  224. port_led3_set(false);
  225. } else {
  226. for (int i = 0; i < 4; i++) {
  227. if (i <= led_number) {
  228. s_leds[i].set_led_state = true;
  229. s_leds[i].port_led_set(s_leds[i].set_led_state);
  230. } else {
  231. s_leds[i].set_led_state = false;
  232. s_leds[i].port_led_set(s_leds[i].set_led_state);
  233. }
  234. }
  235. }
  236. }
  237. #if 0
  238. void timing_led_on(uint8_t led_number) {
  239. switch (led_number) {
  240. case 0:
  241. port_led0_set(true);
  242. port_led1_set(false);
  243. port_led2_set(false);
  244. port_led3_set(false);
  245. break;
  246. case 1:
  247. port_led0_set(false);
  248. port_led1_set(true);
  249. port_led2_set(false);
  250. port_led3_set(false);
  251. break;
  252. case 2:
  253. port_led0_set(false);
  254. port_led1_set(false);
  255. port_led2_set(true);
  256. port_led3_set(false);
  257. break;
  258. case 3:
  259. port_led0_set(false);
  260. port_led1_set(false);
  261. port_led2_set(false);
  262. port_led3_set(true);
  263. break;
  264. case 4:
  265. port_led0_set(false);
  266. port_led1_set(false);
  267. port_led2_set(false);
  268. port_led3_set(false);
  269. break;
  270. default:
  271. break;
  272. }
  273. }
  274. #endif
  275. //###################### ��ʱ�������� ################//
  276. //###################### ���ذ�����ʼ ################//
  277. bool get_ozone_starting_up_state(void) { return switch_key_state; }
  278. /**
  279. * @brief ״̬
  280. *
  281. */
  282. void set_ozone_starting_up(void) {
  283. int starting_up_ozen_gears = 0;
  284. if (g_ozen_gears == 0) {
  285. starting_up_ozen_gears = 2;
  286. } else {
  287. starting_up_ozen_gears = g_ozen_gears - 1;
  288. }
  289. //����PWM����
  290. set_ozen_gears(starting_up_ozen_gears);
  291. }
  292. /**
  293. * @brief رչ״̬
  294. *
  295. */
  296. void set_ozone_shutdown(void) {
  297. interval_key_press_frequency = 0;
  298. g_ozone_interva_stat = false;
  299. memset(&adc, 0, sizeof(adc));
  300. close_ozone_work();
  301. }
  302. void process_switch_key(void) {
  303. //�����Ժ������ϴιػ�ǰ�����ý��й���
  304. switch_key_state = !switch_key_state;
  305. if (switch_key_state) { //����
  306. set_ozone_starting_up();
  307. } else { //�ػ�
  308. set_ozone_shutdown();
  309. }
  310. }
  311. //###################### ���ذ������� ################//
  312. //###################### ��Ъ������ʼ ################//
  313. void set_interval_time(void) {
  314. update_interval_down_begin_sys_time();
  315. bool led_state = false;
  316. switch (interval_key_press_frequency) {
  317. case 0:
  318. led_state = port_led0_get_state();
  319. // Delayms(300);
  320. port_led0_set(!led_state);
  321. Delayms(100);
  322. port_led0_set(led_state);
  323. printf("begin interval\n");
  324. g_ozone_interva_stat = true;
  325. // g_ozone_interval_time = 300000; // 5����
  326. g_ozone_interval_time = 60000; // 5����
  327. interval_key_press_frequency = 1;
  328. break;
  329. case 1:
  330. led_state = port_led1_get_state();
  331. // Delayms(300);
  332. port_led1_set(!led_state);
  333. Delayms(100);
  334. port_led1_set(led_state);
  335. printf("stop interval");
  336. g_ozone_interva_stat = false;
  337. interval_key_press_frequency = 0;
  338. break;
  339. }
  340. }
  341. static void ozone_interval_begin(void) {
  342. int interval_ozen_gears = 0;
  343. // int interval_time_key_press_frequency = 0;
  344. if (g_ozen_gears == 0) {
  345. interval_ozen_gears = 2;
  346. } else {
  347. interval_ozen_gears = g_ozen_gears - 1;
  348. }
  349. // if (time_key_press_frequency == 0) {
  350. // interval_time_key_press_frequency = 4;
  351. // } else {
  352. // interval_time_key_press_frequency = time_key_press_frequency - 1;
  353. // }
  354. //����PWM����
  355. set_ozen_gears(interval_ozen_gears);
  356. // if (ozone_work_state == 2) {
  357. // timing_led_on(interval_time_key_press_frequency); //����led��
  358. // }
  359. }
  360. void ozone_interval_over(void) {
  361. set_pwm_frequency_duty(g_frequency, g_duty[3]); //�ر�PWM����
  362. port_fan_set(false); //���Ƚ�������
  363. }
  364. void is_ozone_interva_time_over(void) {
  365. if (port_haspassedms(g_count_interval_down_begin_sys_time) >=
  366. g_ozone_interval_time) {
  367. update_interval_down_begin_sys_time();
  368. if (g_interva_flag == false) {
  369. g_interva_flag = true;
  370. printf("work over\r\n");
  371. ozone_interval_over();
  372. } else if (g_interva_flag == true) {
  373. g_interva_flag = false;
  374. printf("work begin\r\n");
  375. ozone_interval_begin();
  376. }
  377. }
  378. }
  379. //###################### ���������� ################//
  380. void power_on_ozone_work_state(void) {
  381. close_ozone_work();
  382. g_ozen_gears = 1; //Ϊ�˵������غ����ߵ�����
  383. time_key_press_frequency = 5; //Ϊ�˵������غ��޶�ʱʱ��
  384. }
  385. static void close_ozone_work(void) {
  386. set_pwm_frequency_duty(g_frequency, g_duty[3]); //�ر�PWM����
  387. gears_led_on(3); //�ر�RGB
  388. timing_led_on(4); //�ر�4��led��
  389. port_fan_set(false); //���Ƚ�������
  390. }
  391. /**
  392. * @brief ѹʱ
  393. * رճled0˸
  394. *
  395. */
  396. void process_voltage_abnormal(void) {
  397. static uint32_t lastprocess = 0;
  398. static uint8_t led_state = 1;
  399. if (!adc.first_detection_abnormal) {
  400. adc.first_detection_abnormal = true;
  401. close_ozone_work();
  402. }
  403. if (port_haspassedms(lastprocess) > 300) {
  404. lastprocess = get_sys_ticket();
  405. led_state = !led_state;
  406. port_led0_set(led_state);
  407. }
  408. }