soft_led.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. #include "soft_led.h"
  2. #include "stdio.h"
  3. #include "main.h"
  4. #include "usart_data_handle.h"
  5. #include "stm32f4xx_hal.h"
  6. uint32_t led_time_green = 0;
  7. uint32_t led_time_purple = 0;
  8. uint32_t led_time_blue = 0;
  9. uint32_t led_time_yellow = 0;
  10. bool led_green = false;
  11. bool led_purple = false;
  12. bool led_blue = false;
  13. bool led_yellow = false;
  14. bool only_star_one_green = false;
  15. bool only_star_one_purple = false;
  16. bool only_star_one_blue = false;
  17. bool only_star_one_yellow = false;
  18. bool no_led_star = false;
  19. /**
  20. * @file pmu_inside_led
  21. * @brief 板载LED灯
  22. * @param None
  23. * @details 绿:正常 --紫色:仿地 --蓝:前避 -- 黄:后避
  24. * @author Zhang Sir
  25. **/
  26. void pmu_inside_led(void)
  27. {
  28. if (led_green == false && led_purple == false && led_blue == false && led_green == false && led_yellow == false)
  29. {
  30. no_led_star = true;
  31. }
  32. else
  33. {
  34. no_led_star = false;
  35. }
  36. //正常闪绿灯 设备连接后依次闪其他颜色
  37. if ((HAL_GetTick() - led_time_green > 1000) && (no_led_star == true) &&
  38. (only_star_one_green == false))
  39. {
  40. HAL_GPIO_WritePin(GPIOC, C10_LED_G_Pin, GPIO_PIN_RESET);
  41. led_time_green = HAL_GetTick();
  42. led_green = true;
  43. only_star_one_green = true;
  44. only_star_one_purple = true;
  45. only_star_one_blue = true;
  46. only_star_one_yellow = true;
  47. }
  48. // else if (terrain_is_link == true && no_led_star == true && only_star_one_purple == true)
  49. // {
  50. // HAL_GPIO_WritePin(GPIOA, C11_LED_R_Pin, GPIO_PIN_RESET);
  51. // HAL_GPIO_WritePin(GPIOA, C10_LED_B_Pin, GPIO_PIN_RESET);
  52. // led_time_purple = HAL_GetTick();
  53. // led_purple = true;
  54. // }
  55. // else if (obs_f_is_link == true && no_led_star == true && only_star_one_blue == true)
  56. // {
  57. // HAL_GPIO_WritePin(GPIOA, C10_LED_B_Pin, GPIO_PIN_RESET);
  58. // led_time_blue = HAL_GetTick();
  59. // led_blue = true;
  60. // }
  61. // else if (obs_b_is_link == true && no_led_star == true && only_star_one_yellow == true)
  62. // {
  63. // HAL_GPIO_WritePin(GPIOA, C10_LED_G_Pin, GPIO_PIN_RESET);
  64. // HAL_GPIO_WritePin(GPIOA, C11_LED_R_Pin, GPIO_PIN_RESET);
  65. // led_time_yellow = HAL_GetTick();
  66. // led_yellow = true;
  67. // }
  68. //灭灯
  69. if ((HAL_GetTick() - led_time_green >= 500) && led_green == true)
  70. {
  71. HAL_GPIO_WritePin(GPIOC, C10_LED_G_Pin, GPIO_PIN_SET);
  72. led_green = false;
  73. only_star_one_green = false;
  74. }
  75. if ((HAL_GetTick() - led_time_purple >= 500) && led_purple == true)
  76. {
  77. HAL_GPIO_WritePin(GPIOC, C11_LED_R_Pin, GPIO_PIN_SET);
  78. HAL_GPIO_WritePin(GPIOC, C10_LED_B_Pin, GPIO_PIN_SET);
  79. led_purple = false;
  80. only_star_one_purple = false;
  81. }
  82. if ((HAL_GetTick() - led_time_blue >= 500) && led_blue == true)
  83. {
  84. HAL_GPIO_WritePin(GPIOC, C10_LED_B_Pin, GPIO_PIN_SET);
  85. led_blue = false;
  86. only_star_one_blue = false;
  87. }
  88. if ((HAL_GetTick() - led_time_yellow >= 500) && led_yellow == true)
  89. {
  90. HAL_GPIO_WritePin(GPIOC, C11_LED_R_Pin, GPIO_PIN_SET);
  91. HAL_GPIO_WritePin(GPIOC, C10_LED_G_Pin, GPIO_PIN_SET);
  92. led_yellow = false;
  93. only_star_one_yellow = false;
  94. }
  95. }
  96. LED_Red L_red;
  97. LED_Blue L_blue;
  98. LED_Green L_green;
  99. LED_Purple L_purple;
  100. LED_Cyan L_cyan;
  101. LED_Yellow L_yellow;
  102. LED_White L_white;
  103. bool led_is_ok = false;
  104. void Update_LED_Time(){
  105. L_red.time = HAL_GetTick();
  106. L_blue.time = HAL_GetTick();
  107. L_green.time = HAL_GetTick();
  108. L_purple.time = HAL_GetTick();
  109. L_cyan.time = HAL_GetTick();
  110. L_yellow.time = HAL_GetTick();
  111. L_white.time = HAL_GetTick();
  112. }
  113. /**
  114. * @file led_set_blink
  115. * @brief LED闪烁
  116. * @param none
  117. * @details
  118. * @author Zhang Sir
  119. **/
  120. void led_set_blink(uint8_t LED, uint8_t on_time, uint8_t off_time, uint8_t repeat)
  121. {
  122. if (LED == Red)
  123. {
  124. L_red.on_time_ms = on_time * 100;
  125. L_red.off_time_ms = off_time * 100;
  126. LEDRed_OFF();
  127. L_red.repeat = repeat;
  128. L_red.time = HAL_GetTick();
  129. L_red.status = OFF;
  130. }
  131. else if (LED == Green)
  132. {
  133. L_green.on_time_ms = on_time * 100;
  134. L_green.off_time_ms = off_time * 100;
  135. LEDGreen_OFF();
  136. L_green.repeat = repeat;
  137. L_green.time = HAL_GetTick();
  138. L_green.status = OFF;
  139. }
  140. else if (LED == Blue)
  141. {
  142. L_blue.on_time_ms = on_time * 100;
  143. L_blue.off_time_ms = off_time * 100;
  144. LEDBlue_OFF();
  145. L_blue.repeat = repeat;
  146. L_blue.time = HAL_GetTick();
  147. L_blue.status = OFF;
  148. }
  149. else if (LED == Purple)
  150. {
  151. L_purple.on_time_ms = on_time * 100;
  152. L_purple.off_time_ms = off_time * 100;
  153. LEDPurple_OFF();
  154. L_purple.repeat = repeat;
  155. L_purple.time = HAL_GetTick();
  156. L_purple.status = OFF;
  157. }
  158. else if (LED == Yellow)
  159. {
  160. L_yellow.on_time_ms = on_time * 100;
  161. L_yellow.off_time_ms = off_time * 100;
  162. LEDYellow_OFF();
  163. L_yellow.repeat = repeat;
  164. L_yellow.time = HAL_GetTick();
  165. L_yellow.status = OFF;
  166. }
  167. else if (LED == Cyan)
  168. {
  169. L_cyan.on_time_ms = on_time * 100;
  170. L_cyan.off_time_ms = off_time * 100;
  171. LEDCyan_OFF();
  172. L_cyan.repeat = repeat;
  173. L_cyan.time = HAL_GetTick();
  174. L_cyan.status = OFF;
  175. }
  176. else if (LED == White)
  177. {
  178. L_white.on_time_ms = on_time * 100;
  179. L_white.off_time_ms = off_time * 100;
  180. LEDWhite_OFF();
  181. L_white.repeat = repeat;
  182. L_white.time = HAL_GetTick();
  183. L_white.status = OFF;
  184. }
  185. }
  186. /**
  187. * @file led_blink_repeat
  188. * @brief LED循环
  189. * @param none
  190. * @details
  191. * @author Zhang Sir
  192. **/
  193. uint32_t L_red_time = 0;
  194. void led_blink_repeat()
  195. {
  196. //青岛中飞机型不需要LED
  197. // if(uavinf.uavtype == VK_ALL_IN_ONE)
  198. // return;
  199. //没收到fmu数据 15秒内常亮红灯
  200. if(fcu.connect_status == COMP_NORMAL)
  201. {
  202. if (HAL_GetTick() < 15000)
  203. {
  204. LEDRed_ON();
  205. }
  206. else
  207. {
  208. if(HAL_GetTick() - L_red_time > 2000)
  209. {
  210. //HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
  211. L_red_time = HAL_GetTick();
  212. }
  213. }
  214. }
  215. if ((L_red.repeat == 0) && (L_blue.repeat == 0) && (L_green.repeat == 0) && (L_cyan.repeat == 0) &&
  216. (L_purple.repeat == 0) && (L_yellow.repeat == 0) && (L_white.repeat == 0))
  217. {
  218. return;
  219. }
  220. if(fcu.connect_status == COMP_NORMAL)
  221. {
  222. if (L_red.repeat != 0)
  223. {
  224. if ((L_red.off_time_ms == 25500) || (L_red.on_time_ms == 25500))
  225. {
  226. L_red.repeat = 0;
  227. if (L_red.off_time_ms == 25500)
  228. {
  229. LEDRed_OFF();
  230. }
  231. else if (L_red.on_time_ms == 25500)
  232. {
  233. LEDRed_ON();
  234. }
  235. return;
  236. }
  237. if (L_red.status == ON)
  238. {
  239. if (HAL_GetTick() - L_red.time > L_red.on_time_ms)
  240. {
  241. L_red.repeat--;
  242. LEDRed_OFF();
  243. Update_LED_Time();
  244. L_red.status =OFF;
  245. }
  246. }
  247. else
  248. {
  249. if (HAL_GetTick() - L_red.time > L_red.off_time_ms)
  250. {
  251. if (L_red.repeat != 0)
  252. {
  253. LEDRed_ON();
  254. L_red.time = HAL_GetTick();
  255. L_red.status = ON;
  256. }
  257. }
  258. }
  259. }
  260. else if (L_green.repeat != 0)
  261. {
  262. if ((L_green.off_time_ms == 25500) || (L_green.on_time_ms == 25500))
  263. {
  264. L_green.repeat = 0;
  265. if (L_green.off_time_ms == 25500)
  266. {
  267. LEDGreen_OFF();
  268. }
  269. else if (L_green.on_time_ms == 25500)
  270. {
  271. LEDGreen_ON();
  272. }
  273. return;
  274. }
  275. if (L_green.status == ON)
  276. {
  277. if (HAL_GetTick() - L_green.time > L_green.on_time_ms)
  278. {
  279. L_green.repeat--;
  280. LEDGreen_OFF();
  281. Update_LED_Time();
  282. L_green.status = OFF;
  283. }
  284. }
  285. else
  286. {
  287. if (HAL_GetTick() - L_green.time > L_green.off_time_ms)
  288. {
  289. if (L_green.repeat != 0)
  290. {
  291. LEDGreen_ON();
  292. L_green.time = HAL_GetTick();
  293. L_green.status = ON;
  294. }
  295. }
  296. }
  297. }
  298. else if (L_blue.repeat != 0)
  299. {
  300. if ((L_blue.off_time_ms == 25500) || (L_blue.on_time_ms == 25500))
  301. {
  302. L_blue.repeat = 0;
  303. if (L_blue.off_time_ms == 25500)
  304. {
  305. LEDBlue_OFF();
  306. }
  307. else if (L_blue.on_time_ms == 25500)
  308. {
  309. LEDBlue_ON();
  310. }
  311. return;
  312. }
  313. if (L_blue.status == ON)
  314. {
  315. if (HAL_GetTick() - L_blue.time > L_blue.on_time_ms)
  316. {
  317. L_blue.repeat--;
  318. LEDBlue_OFF();
  319. Update_LED_Time();
  320. L_blue.status = OFF;
  321. }
  322. }
  323. else
  324. {
  325. if (HAL_GetTick() - L_blue.time > L_blue.off_time_ms)
  326. {
  327. if (L_blue.repeat != 0)
  328. {
  329. LEDBlue_ON();
  330. L_blue.time = HAL_GetTick();
  331. L_blue.status = ON;
  332. }
  333. }
  334. }
  335. }
  336. else if (L_purple.repeat != 0)
  337. {
  338. if ((L_purple.off_time_ms != 25500) || (L_purple.on_time_ms != 25500))
  339. {
  340. L_purple.repeat = 0;
  341. if (L_purple.off_time_ms == 25500)
  342. {
  343. LEDPurple_OFF();
  344. }
  345. else if (L_purple.on_time_ms == 25500)
  346. {
  347. LEDPurple_ON();
  348. }
  349. return;
  350. }
  351. if (L_purple.status == ON)
  352. {
  353. if (HAL_GetTick() - L_purple.time > L_purple.on_time_ms)
  354. {
  355. L_purple.repeat--;
  356. LEDPurple_OFF();
  357. Update_LED_Time();
  358. L_purple.status = OFF;
  359. }
  360. }
  361. else
  362. {
  363. if (HAL_GetTick() - L_purple.time > L_purple.off_time_ms)
  364. {
  365. if (L_purple.repeat != 0)
  366. {
  367. LEDPurple_ON();
  368. L_purple.time = HAL_GetTick();
  369. L_purple.status = ON;
  370. }
  371. }
  372. }
  373. }
  374. else if (L_yellow.repeat != 0)
  375. {
  376. if ((L_yellow.off_time_ms == 25500) || (L_yellow.on_time_ms == 25500))
  377. {
  378. L_yellow.repeat = 0;
  379. if (L_yellow.off_time_ms == 25500)
  380. {
  381. LEDYellow_OFF();
  382. }
  383. else if (L_yellow.on_time_ms == 25500)
  384. {
  385. LEDYellow_ON();
  386. }
  387. return;
  388. }
  389. if (L_yellow.status == ON)
  390. {
  391. if (HAL_GetTick() - L_yellow.time > L_yellow.on_time_ms)
  392. {
  393. L_yellow.repeat--;
  394. LEDYellow_OFF();
  395. Update_LED_Time();
  396. L_yellow.status = OFF;
  397. }
  398. }
  399. else
  400. {
  401. if (HAL_GetTick() - L_yellow.time > L_yellow.off_time_ms)
  402. {
  403. if (L_yellow.repeat != 0)
  404. {
  405. LEDYellow_ON();
  406. L_yellow.time = HAL_GetTick();
  407. L_yellow.status = ON;
  408. }
  409. }
  410. }
  411. }
  412. else if (L_cyan.repeat != 0)
  413. {
  414. if ((L_cyan.off_time_ms == 25500) || (L_cyan.on_time_ms == 25500))
  415. {
  416. L_cyan.repeat = 0;
  417. if (L_cyan.off_time_ms == 25500)
  418. {
  419. LEDCyan_OFF();
  420. }
  421. else if (L_cyan.on_time_ms == 25500)
  422. {
  423. LEDCyan_ON();
  424. }
  425. return;
  426. }
  427. if (L_cyan.status == ON)
  428. {
  429. if (HAL_GetTick() - L_cyan.time > L_cyan.on_time_ms)
  430. {
  431. L_cyan.repeat--;
  432. LEDCyan_OFF();
  433. Update_LED_Time();
  434. L_cyan.status = OFF;
  435. }
  436. }
  437. else
  438. {
  439. if (HAL_GetTick() - L_cyan.time > L_cyan.off_time_ms)
  440. {
  441. if (L_cyan.repeat != 0)
  442. {
  443. LEDCyan_ON();
  444. L_cyan.time = HAL_GetTick();
  445. L_cyan.status = ON;
  446. }
  447. }
  448. }
  449. }
  450. else if (L_white.repeat != 0)
  451. {
  452. if ((L_white.off_time_ms == 25500) || (L_white.on_time_ms == 25500))
  453. {
  454. L_white.repeat = 0;
  455. if (L_white.off_time_ms == 25500)
  456. {
  457. LEDWhite_OFF();
  458. }
  459. else if (L_white.on_time_ms == 25500)
  460. {
  461. LEDWhite_ON();
  462. }
  463. return;
  464. }
  465. if (L_white.status == ON)
  466. {
  467. if (HAL_GetTick() - L_white.time > L_white.on_time_ms)
  468. {
  469. L_white.repeat--;
  470. LEDWhite_OFF();
  471. Update_LED_Time();
  472. L_white.status = OFF;
  473. }
  474. }
  475. else
  476. {
  477. if (HAL_GetTick() - L_white.time > L_white.off_time_ms)
  478. {
  479. if (L_white.repeat != 0)
  480. {
  481. LEDWhite_ON();
  482. L_white.time = HAL_GetTick();
  483. L_white.status = ON;
  484. }
  485. }
  486. }
  487. }
  488. }
  489. }