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.

455 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
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. time_key_press_frequency=0;
  294. interval_key_press_frequency = 0;
  295. ozone_message.ozone_interva_state = false;
  296. memset(&adc, 0, sizeof(adc));
  297. close_ozone_work();
  298. }
  299. void process_switch_key(void) {
  300. //�����Ժ������ϴιػ�ǰ�����ý��й���
  301. ozone_message.switch_key_state = !ozone_message.switch_key_state;
  302. if (ozone_message.switch_key_state) { //����
  303. set_ozone_starting_up();
  304. } else { //�ػ�
  305. set_ozone_shutdown();
  306. }
  307. }
  308. //###################### ���ذ������� ################//
  309. //###################### ��Ъ������ʼ ################//
  310. void set_rgb_on(void) {
  311. int rgbx_flicker = 0;
  312. if (g_ozen_gears == 0) {
  313. rgbx_flicker = 2;
  314. } else {
  315. rgbx_flicker = g_ozen_gears - 1;
  316. }
  317. gears_led_on(rgbx_flicker);
  318. }
  319. void set_rgb_off(void) {
  320. gears_led_on(3); //�ر�RGB
  321. }
  322. void set_rgb_flicker(void) {
  323. static uint32_t rgb_ticket = 0;
  324. static uint8_t rgb_ticket_count = 0;
  325. if (port_haspassedms(rgb_ticket) > 1000) {
  326. rgb_ticket = get_sys_ticket();
  327. if (rgb_ticket_count < 3) {
  328. set_rgb_on();
  329. } else {
  330. set_rgb_off();
  331. rgb_ticket_count = 0;
  332. }
  333. rgb_ticket_count++;
  334. }
  335. }
  336. /**
  337. * @brief ƣ޼Ъʱʱ򣬳Ĺ״̬
  338. *
  339. */
  340. void set_stop_interval_ozone_work(void) {
  341. set_rgb_on();
  342. port_fan_set(true);
  343. ozone_interval_begin();
  344. }
  345. void set_interval_time(void) {
  346. update_interval_down_begin_sys_time();
  347. switch (interval_key_press_frequency) {
  348. case 0:
  349. // printf("begin interval\n");
  350. ozone_message.ozone_interva_state = true;
  351. ozone_message.ozone_interval_time = INTERVAL_TIME; // 5����
  352. // g_ozone_interval_time = 60000; // 5����
  353. interval_key_press_frequency = 1;
  354. break;
  355. case 1:
  356. // printf("stop interval");
  357. ozone_message.ozone_interva_state = false;
  358. interval_key_press_frequency = 0;
  359. set_stop_interval_ozone_work();
  360. break;
  361. }
  362. }
  363. static void ozone_interval_begin(void) {
  364. int interval_ozen_gears = 0;
  365. // int interval_time_key_press_frequency = 0;
  366. if (g_ozen_gears == 0) {
  367. interval_ozen_gears = 2;
  368. } else {
  369. interval_ozen_gears = g_ozen_gears - 1;
  370. }
  371. // if (time_key_press_frequency == 0) {
  372. // interval_time_key_press_frequency = 4;
  373. // } else {
  374. // interval_time_key_press_frequency = time_key_press_frequency - 1;
  375. // }
  376. //����PWM����
  377. set_ozen_gears(interval_ozen_gears);
  378. // if (ozone_work_state == 2) {
  379. // timing_led_on(interval_time_key_press_frequency); //����led��
  380. // }
  381. }
  382. void ozone_interval_over(void) {
  383. set_pwm_frequency_duty(g_frequency, g_duty[3]); //�ر�PWM����
  384. port_fan_set(false); //���Ƚ�������
  385. }
  386. void is_ozone_interva_time_over(void) {
  387. if (port_haspassedms(ozone_message.count_interval_down_begin_sys_time) >=
  388. ozone_message.ozone_interval_time) {
  389. update_interval_down_begin_sys_time();
  390. if (ozone_message.interva_flag == false) {
  391. ozone_message.interva_flag = true;
  392. printf("work over\r\n");
  393. ozone_interval_over();
  394. } else if (ozone_message.interva_flag == true) {
  395. ozone_message.interva_flag = false;
  396. printf("work begin\r\n");
  397. ozone_interval_begin();
  398. }
  399. }
  400. }
  401. //###################### ���������� ################//
  402. void power_on_ozone_work_state(void) {
  403. close_ozone_work();
  404. g_ozen_gears = 1; //Ϊ�˵������غ����ߵ�����
  405. time_key_press_frequency = 5; //Ϊ�˵������غ��޶�ʱʱ��
  406. }
  407. static void close_ozone_work(void) {
  408. set_pwm_frequency_duty(g_frequency, g_duty[3]); //�ر�PWM����
  409. gears_led_on(3); //�ر�RGB
  410. timing_led_on(4); //�ر�4��led��
  411. port_fan_set(false); //���Ƚ�������
  412. }
  413. /**
  414. * @brief ѹʱ
  415. * رճled0˸
  416. *
  417. */
  418. void process_voltage_abnormal(void) {
  419. static uint32_t lastprocess = 0;
  420. static uint8_t led_state = 1;
  421. if (!adc.first_detection_abnormal) {
  422. adc.first_detection_abnormal = true;
  423. close_ozone_work();
  424. }
  425. if (port_haspassedms(lastprocess) > 300) {
  426. lastprocess = get_sys_ticket();
  427. led_state = !led_state;
  428. port_led0_set(led_state);
  429. }
  430. }