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.

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