light.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "pwm.h"
  2. #include "gpio.h"
  3. #include "OSAL.h"
  4. #include "log.h"
  5. #include "pwm_light.h"
  6. #include "light.h"
  7. uint32_t _light_total = 10000;
  8. // 配置
  9. light_data_t light_data = {6500, 0};
  10. int light_init(){
  11. LOG("[light_init]\n");
  12. // 初始化pwm
  13. int ret = 0;
  14. // if()
  15. ret = pwm_light_init(WARM_CH, GPIO_WARM, _light_total, _light_total, 5, PWM_CLK_DIV_16);
  16. if(ret != 0){
  17. LOG("[light_init] pwm_light_init warm failed %d \n", ret);
  18. return ret;
  19. }
  20. ret = pwm_light_init(COLD_CH, GPIO_COLD, _light_total, _light_total, 5, PWM_CLK_DIV_16);
  21. if(ret != 0){
  22. LOG("[light_init] pwm_light_init cold failed %d \n", ret);
  23. return ret;
  24. }
  25. return ret;
  26. }
  27. int light_ch_set(uint8_t ch, uint16_t val){
  28. // LOG("[light_set] set ch%d val to %d \n", ch, val);
  29. int ret = pwm_light_set_val(ch, val);
  30. return ret;
  31. }
  32. // 计算 冷暖光的亮度值
  33. int comLightVal(){
  34. int light_val = light_data.light, temp_val = light_data.temp;
  35. // 根据色温与亮度来计算冷暖灯光对应的亮度值
  36. // 亮度值范围 0~100 翻 100倍
  37. // 色温范围 2500~6500
  38. // 暖色温最大亮度值 = 亮度值 * (色温 - 2500) / (6500 - 2500)
  39. // 亮度调整偏移后的暖色温亮度值 = 暖色温最大亮度值 + 亮度值 * 2500 / (6500 - 2500)
  40. int tmp_warm_val = _light_total * (temp_val - 2500) / (6500 - 2500);
  41. int tmp_cold_val = _light_total - tmp_warm_val;
  42. int warm_val = light_val * tmp_warm_val / 100;
  43. int cold_val = light_val * tmp_cold_val / 100;
  44. LOG("[comLightVal] light: %d temp: %d warm_val %d, cold_val %d \n", light_val, temp_val, warm_val, cold_val);
  45. light_ch_set(WARM_CH, warm_val);
  46. light_ch_set(COLD_CH, cold_val);
  47. return 0;
  48. }
  49. // 亮度调节
  50. int light_set(uint8_t val){
  51. // LOG("[light_set] set light val to %d \n", val);
  52. // 亮度值为 0~100
  53. light_data.light = val;
  54. comLightVal();
  55. return 0;
  56. }
  57. // 色温调节
  58. int temp_set(int temp){
  59. // LOG("[temp_set] set temp val to %d \n", temp);
  60. light_data.temp = temp;
  61. comLightVal();
  62. return 0;
  63. }
  64. // js code
  65. // function comLightVal(light_val, temp_val){
  66. // // 根据色温与亮度来计算冷暖灯光对应的亮度值
  67. // // 亮度值范围 0~100
  68. // // 色温范围 2500~6500
  69. // // 暖色温最大亮度值 = 亮度值 * (色温 - 2500) / (6500 - 2500)
  70. // // 亮度调整偏移后的暖色温亮度值 = 暖色温最大亮度值 + 亮度值 * 2500 / (6500 - 2500)
  71. // let tmp_warm_val = 100 * (temp_val - 2500) / (6500 - 2500);
  72. // let tmp_cold_val = 100 - tmp_warm_val;
  73. // let warm_val = light_val * tmp_warm_val / 100;
  74. // let cold_val = light_val * tmp_cold_val / 100;
  75. // console.log(`[comLightVal] warm_val: ${warm_val} , cold_val: ${cold_val}\n`);
  76. // }