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.

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