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.

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