Browse Source

fex: 亮度调节功能修改
change: 亮度调节配置

kindring 1 year ago
parent
commit
185ef8546e
5 changed files with 82 additions and 176 deletions
  1. 4 1
      src/app_wrist.c
  2. 2 163
      src/control/btn.c
  3. 0 4
      src/control/btn.h
  4. 56 6
      src/light.c
  5. 20 2
      src/light.h

+ 4 - 1
src/app_wrist.c

@@ -311,7 +311,10 @@ void appWristInit( uint8 task_id)
     LOG("appWristInit end\n");
     light_init();
     LOG("light_init end\n");
-    light_set(0, 100);
+    // 初始化按键
+    temp_set(5500);
+    LOG("temp_set end\n");
+    light_set(100);
 
     LOG("appWristInit end\n");
 

+ 2 - 163
src/control/btn.c

@@ -12,105 +12,13 @@ uint8 task_btn_id;
 #define KEY_DEMO_CYCLE_TIMER     0x0002
 
 
-// btn 0 add
-// btn 1 sub
-
-// 是否在调节亮度
-bool btn_mode = false;
-// 断案按钮抬起事件 btn
-int btn_ind = -1;
-int next_btn_ind ;
-
-int temp = 2300;
-// int temp_speed = 50;
-int light = 0;
-// int light_speed = 5;
-void temp_add(int temp_speed){
-	int next_temp = temp + temp_speed;
-	if(next_temp > 6500){
-		next_temp = 6500;
-	}
-	LOG("temp %d ===>> %d\n", temp, next_temp);
-	temp = next_temp;
-}
-void temp_sub(int temp_speed){
-	int next_temp = temp - temp_speed;
-	if(next_temp < 2300){
-		next_temp = 2300;
-	}
-	LOG("temp %d ===>> %d\n", temp, next_temp);
-	temp = next_temp;
-}
-
-void light_add(int light_speed){
-	int next_light = light + light_speed;
-	if(next_light > 100){
-		next_light = 100;
-	}
-	LOG("light %d ===>> %d\n", light, next_light);
-	light = next_light;
-	light_set(0, light);
-	light_set(1, light);
-}
-
-void light_sub(int light_speed){
-	int next_light = light - light_speed;
-	if(next_light < 0){
-		next_light = 0;
-	}
-	LOG("light %d ===>> %d\n", light, next_light);
-	light = next_light;
-	light_set(0, light);
-	light_set(1, light);
-}
-
-void btn_mode_switch(){
-	btn_mode = !btn_mode;
-	LOG("btn_mode change to: %s\n",btn_mode?"light":"temp");
-}
-
-btn_all_pressed_t btn_all_pressed[ALL_PRESSED_LEN] = {
-	{
-		.len = 2,
-		.btns = (uint8_t[]){0, 1},
-		.callback = btn_mode_switch,
-	}
-};
 
 void evt_press_release(int i){
-	btn_ind = i;
-	if(btn_mode)
-	{
-		btn_mode = false;
-		btn_ind = -1;
-	}
-
 	// 短按抬起 
 	osal_start_timerEx(task_btn_id, EVT_TIME_CHECK, TIME_CHECK_TEMP);
+	// 短按抬起后,1000ms 后检测该按键是否为长按,是则 调整色温
 }
 
-// 判断按键是否同时按下
-bool btn_is_all_pressed(){
-	bool is_all_pressed = false;
-	// 遍历所有的同时按下的按键
-	for (int i = 0; i < ALL_PRESSED_LEN; i++)
-	{
-		// 遍历每个同时按下的按键的按键数组
-		for (int j = 0; j < btn_all_pressed[i].len; j++)
-		{
-			// 如果按键数组中有一个按键不是按下状态,则跳过
-			if(key_state.key[btn_all_pressed[i].btns[j]].state != HAL_KEY_EVT_PRESS){
-				break;
-			}
-			// 如果按键数组中的所有按键都是按下状态,则执行回调函数
-			if(j == btn_all_pressed[i].len - 1){
-				btn_all_pressed[i].callback();
-				return true;
-			}
-		}
-	}
-	return is_all_pressed;
-}
 
 static void key_press_evt(uint8_t i,key_evt_t key_evt)
 {
@@ -127,29 +35,12 @@ static void key_press_evt(uint8_t i,key_evt_t key_evt)
 		
 		case HAL_KEY_EVT_RELEASE:
 			LOG("key(press release)\n");
-			evt_press_release(i);
-			switch (i)
-			{
-			case 0:
-				light_add(10);
-				break;
-			case 1:
-				light_sub(10);
-				break;
-			default:
-				break;
-			}
+			// evt_press_release(i);
 			break;
 
 #ifdef HAL_KEY_SUPPORT_LONG_PRESS		
 		case HAL_KEY_EVT_LONG_RELEASE:
 			LOG("key(long press release)\n");
-			// 检测是否有同时按下的按键, 只需要在长按事件中检测即可
-			// btn_is_all_pressed();
-			if(btn_mode){
-				btn_mode = false;
-				btn_ind = -1;
-			}
 			break;
 #endif
 		
@@ -207,9 +98,6 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events )
 			(key_state.key[i].state == HAL_STATE_KEY_RELEASE_DEBOUNCE)){
 				gpio_key_timer_handler(i);
 			}
-
-			
-			
 		}
 		return (events ^ HAL_KEY_EVENT);
 	}
@@ -223,34 +111,6 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events )
 				LOG("key:%d gpio:%d	",i,key_state.key[i].pin);
 				LOG("key(long press down)\n");
 				osal_start_timerEx(task_btn_id, KEY_DEMO_LONG_PRESS_EVT, HAL_KEY_LONG_PRESS_TIME);
-				//user app code long press down process 
-				if (btn_mode && i != btn_ind && btn_ind != -1){
-					// 色温调节
-					switch (i)
-					{
-					case 0:
-						temp_add(50);
-						break;
-					case 1:
-						temp_sub(50);
-						break;
-					default:
-						break;
-					}
-				} else {
-				// 长按 但是没有在调节
-				switch (i)
-				{
-				case 0:
-					light_add(1);
-					break;
-				case 1:
-					light_sub(1);
-					break;
-				default:
-					break;
-				}
-			}
 		}
 		return (events ^ KEY_DEMO_LONG_PRESS_EVT);
 	}
@@ -258,27 +118,6 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events )
 
 	if( events & EVT_TIME_CHECK){
 		LOG("EVT_TIME_CHECK\n");
-		
-		switch (btn_ind)
-		{
-		case 0:
-			// 如果另一个按钮已经按下,则切换模式
-			next_btn_ind = 1;
-			break;
-		case 1:
-			// 如果另一个按钮已经按下,则切换模式
-			next_btn_ind = 0;
-			break;
-		default:
-			next_btn_ind = -1;
-			break;
-		}
-		// 如果另一个按钮已经按下,则切换模式
-		if(
-			next_btn_ind != -1 && (key_state.key[next_btn_ind].state == HAL_KEY_EVT_PRESS || key_state.key[next_btn_ind].state == HAL_KEY_EVT_LONG_PRESS)
-		){
-			btn_mode = true;
-		}
 		return (events ^ EVT_TIME_CHECK);
 	}
 	

+ 0 - 4
src/control/btn.h

@@ -37,9 +37,5 @@ extern int btn_init();
 
 uint16 Key_ProcessEvent( uint8 task_id, uint16 events );
 
-// 判断按键是否同时按下
-bool btn_is_all_pressed();
 
-// 模式切换
-void btn_mode_switch();
 #endif

+ 56 - 6
src/light.c

@@ -9,22 +9,22 @@
 
 #include "light.h"
 
-
-// 配置
+// 配置 
+light_data_t light_data = {5500, 0};
 
 int light_init(){
     LOG("[light_init]\n");
     // 初始化pwm
     int ret = 0;
     // if()
-    ret = pwm_light_init(0, GPIO_WARM, 100, 100, 5, PWM_CLK_DIV_16);
+    ret = pwm_light_init(WARM_CH, GPIO_WARM, 10000, 10000, 5, PWM_CLK_DIV_16);
 
     if(ret != 0){
         LOG("[light_init] pwm_light_init warm failed %d \n", ret);
         return ret;
     }
 
-    ret = pwm_light_init(1, GPIO_COLD, 100, 100, 5, PWM_CLK_DIV_16);
+    ret = pwm_light_init(COLD_CH, GPIO_COLD, 10000, 10000, 5, PWM_CLK_DIV_16);
 
     if(ret != 0){
         LOG("[light_init] pwm_light_init cold failed  %d \n", ret);
@@ -34,10 +34,60 @@ int light_init(){
     return ret;
 }
 
-int light_set(uint8_t ch, uint8_t val){
+int light_ch_set(uint8_t ch, uint8_t val){
     LOG("[light_set] set ch%d val to %d \n", ch, val);
     int ret = pwm_light_set_val(ch, val);
     return ret;
 }
 
-// 按钮控制
+
+
+
+// 计算 冷暖光的亮度值
+int comLightVal(){
+    int light_val = light_data.light, temp_val = light_data.temp;
+    // 根据色温与亮度来计算冷暖灯光对应的亮度值
+    // 亮度值范围 0~100 翻 100倍
+    // 色温范围 2500~6500
+    // 暖色温最大亮度值 = 亮度值 * (色温 - 2500) / (6500 - 2500)
+    // 亮度调整偏移后的暖色温亮度值 = 暖色温最大亮度值 + 亮度值 * 2500 / (6500 - 2500)
+    int tmp_warm_val = 10000 * (temp_val - 2500) / (6500 - 2500);
+    int tmp_cold_val = 10000 - tmp_warm_val;
+    int warm_val = light_val * tmp_warm_val / 50;
+    int cold_val = light_val * tmp_cold_val / 50;
+    LOG("[comLightVal] warm_val %d, cold_val %d \n", warm_val, cold_val);
+    light_ch_set(WARM_CH, warm_val);
+    light_ch_set(COLD_CH, cold_val);
+    return 0;
+}
+
+// 亮度调节
+int light_set(uint8_t val){
+    LOG("[light_set] set light val to %d \n", val);
+    // 亮度值为 0~100
+    light_data.light = val;
+    comLightVal();
+    return 0;
+}
+
+// 色温调节
+int temp_set(int temp){
+    LOG("[temp_set] set temp val to %d \n", temp);
+    light_data.temp = temp;
+    comLightVal();
+    return 0;
+}
+
+// js code
+// function comLightVal(light_val, temp_val){
+//     // 根据色温与亮度来计算冷暖灯光对应的亮度值
+//     // 亮度值范围 0~100
+//     // 色温范围 2500~6500
+//     // 暖色温最大亮度值 = 亮度值 * (色温 - 2500) / (6500 - 2500)
+//     // 亮度调整偏移后的暖色温亮度值 = 暖色温最大亮度值 + 亮度值 * 2500 / (6500 - 2500)
+//     let tmp_warm_val = 100 * (temp_val - 2500) / (6500 - 2500);
+//     let tmp_cold_val = 100 - tmp_warm_val;
+//     let warm_val = light_val * tmp_warm_val / 100;
+//     let cold_val = light_val * tmp_cold_val / 100;
+//     console.log(`[comLightVal] warm_val: ${warm_val} , cold_val: ${cold_val}\n`);
+// }

+ 20 - 2
src/light.h

@@ -3,20 +3,38 @@
 
 // 暖光 pwm脚
 #define GPIO_WARM P18
+#define WARM_CH 0
 // 冷光 pwm脚
 #define GPIO_COLD P20
+#define COLD_CH 1
 
 // 风扇 pwm
 #define GPIO_FAN P23
 
+// 亮度分级 0~100 翻 100倍
 
-
+#define TEMP_MIN 2500
+#define TEMP_MAX 6500
 
 // adc 电源监测脚
 #define GPIO_POWER P28
 
 extern int light_init(void);
 
-extern int light_set(uint8_t ch, uint8_t val);
+extern int light_ch_set(uint8_t ch, uint8_t val);
+
+// 计算冷暖光的亮度值,并且设置
+int comLightVal();
+
+extern int light_set(uint8_t val);
+extern int temp_set(int temp);
+
+
+
+// 灯光数据 色温, 亮度
+typedef struct {
+    int temp;
+    int light;
+} light_data_t;
 
 #endif