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.

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