kindring 1 year ago
parent
commit
1072c66914
5 changed files with 78 additions and 18 deletions
  1. 69 9
      src/control/btn.c
  2. 5 5
      src/light.c
  3. 1 1
      src/light.h
  4. 2 2
      src/pwm_light/pwm_light.c
  5. 1 1
      src/pwm_light/pwm_light.h

+ 69 - 9
src/control/btn.c

@@ -12,14 +12,57 @@ uint8 task_btn_id;
 #define KEY_DEMO_CYCLE_TIMER     0x0002
 
 int last_release_btn_ind = -1;
+bool isLongCheck = false;
 
+int temp = 2500;
+int light = 100;
 void evt_press_release(int i){
-	// 短按抬起 
-	osal_start_timerEx(task_btn_id, BTN_EVT_TIME_CHECK, TIME_CHECK_TEMP * 3);
-	// 500ms 后检测是否
+	// 短按抬起  400ms 后检测是否还处于按下状态
+	if ( isLongCheck = true)
+	{
+		return;
+	}
+	osal_start_timerEx(task_btn_id, BTN_EVT_TIME_CHECK, TIME_CHECK_TEMP * 4);
 	last_release_btn_ind = i;
 }
 
+void changeTemp(int i)
+{
+	switch (i)
+	{
+	case 0:
+		temp = temp + 50;
+		if (temp > 6500){ temp = 6500;}
+		break;
+	case 1:
+		temp = temp - 50;
+		if (temp < 2500){ temp = 2500;}
+		break;
+	default:
+	
+		break;
+	}
+	temp_set(temp);
+}
+
+void changeLight(int i)
+{
+	switch (i)
+	{
+	case 0:
+		light = light + 5;
+		if (light > 100){ light = 100;}
+		break;
+	case 1:
+		light = light - 5;
+		if (light < 0){ light = 0;}
+		break;
+	default:
+	
+		break;
+	}
+	light_set(light);
+}
 
 static void key_press_evt(uint8_t i,key_evt_t key_evt)
 {
@@ -33,10 +76,14 @@ static void key_press_evt(uint8_t i,key_evt_t key_evt)
 				if (last_release_btn_ind == i)	
 				{
 					// 按下后再次按下
-					
+					isLongCheck = true;
 				}
-			}else {
-				osal_stop_timeEx(task_btn_id, BTN_EVT_TIME_CHECK)
+			}else
+			{
+				osal_stop_timerEx(task_btn_id, BTN_EVT_TIME_CHECK);
+				isLongCheck = false;
+				last_release_btn_ind = -1;
+				changeLight(i);
 			}
 			
 #ifdef HAL_KEY_SUPPORT_LONG_PRESS
@@ -52,6 +99,7 @@ static void key_press_evt(uint8_t i,key_evt_t key_evt)
 #ifdef HAL_KEY_SUPPORT_LONG_PRESS		
 		case HAL_KEY_EVT_LONG_RELEASE:
 			LOG("key(long press release)\n");
+			isLongCheck = false;
 			break;
 #endif
 		
@@ -125,9 +173,21 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events )
 	}
 #endif
 
-	if( events & EVT_TIME_CHECK){
-		LOG("EVT_TIME_CHECK\n");
-		return (events ^ EVT_TIME_CHECK);
+	if( events & BTN_EVT_TIME_CHECK){
+		
+		if(last_release_btn_ind != -1 && isLongCheck)
+		{
+			if (
+				key_state.key[last_release_btn_ind].state == HAL_KEY_EVT_PRESS ||
+				key_state.key[last_release_btn_ind].state == HAL_KEY_EVT_LONG_PRESS 
+				)
+			{
+				LOG("长按 \n");
+				changeTemp(last_release_btn_ind);
+			}
+		}
+		
+		return (events ^ BTN_EVT_TIME_CHECK);
 	}
 	
 	return 0;

+ 5 - 5
src/light.c

@@ -17,14 +17,14 @@ int light_init(){
     // 初始化pwm
     int ret = 0;
     // if()
-    ret = pwm_light_init(WARM_CH, GPIO_WARM, 10000, 10000, 5, PWM_CLK_DIV_16);
+    ret = pwm_light_init(WARM_CH, GPIO_WARM, 1000, 1000, 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(COLD_CH, GPIO_COLD, 10000, 10000, 5, PWM_CLK_DIV_16);
+    ret = pwm_light_init(COLD_CH, GPIO_COLD, 1000, 1000, 5, PWM_CLK_DIV_16);
 
     if(ret != 0){
         LOG("[light_init] pwm_light_init cold failed  %d \n", ret);
@@ -34,7 +34,7 @@ int light_init(){
     return ret;
 }
 
-int light_ch_set(uint8_t ch, uint8_t val){
+int light_ch_set(uint8_t ch, uint16_t val){
     LOG("[light_set] set ch%d val to %d \n", ch, val);
     int ret = pwm_light_set_val(ch, val);
     return ret;
@@ -51,8 +51,8 @@ int comLightVal(){
     // 色温范围 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 tmp_warm_val = 1000 * (temp_val - 2500) / (6500 - 2500);
+    int tmp_cold_val = 1000 - 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);

+ 1 - 1
src/light.h

@@ -21,7 +21,7 @@
 
 extern int light_init(void);
 
-extern int light_ch_set(uint8_t ch, uint8_t val);
+extern int light_ch_set(uint8_t ch, uint16_t val);
 
 // 计算冷暖光的亮度值,并且设置
 int comLightVal();

+ 2 - 2
src/pwm_light/pwm_light.c

@@ -144,7 +144,7 @@ int pwm_light_set_pin(uint8_t ch, GPIO_Pin_e pin)
     return 0;
 }
 
-int pwm_light_set_val(uint8_t ch , uint8_t val)
+int pwm_light_set_val(uint8_t ch , uint16_t val)
 {
     pwm_t *pwm;
     // 判断 ch 是否合法
@@ -163,7 +163,7 @@ int pwm_light_set_val(uint8_t ch , uint8_t val)
     
     // 设置 pwm 引脚值
     pwm_change_val(ch);
-
+    pwm_light_reflash(ch);
     return 0;
 }
 

+ 1 - 1
src/pwm_light/pwm_light.h

@@ -68,7 +68,7 @@ extern int pwm_light_set_pin(uint8_t ch, GPIO_Pin_e pin);
  * @param val 新值
  * @return 0 成功 -1 失败
 */
-extern int pwm_light_set_val(uint8_t ch , uint8_t val);
+extern int pwm_light_set_val(uint8_t ch , uint16_t val);
 
 /**
  * @brief 设置pwm频率