Browse Source

按钮调光与调色温功能测试完成

kindring 1 year ago
parent
commit
3aa49e8d93
3 changed files with 29 additions and 42 deletions
  1. 13 27
      src/control/btn.c
  2. 12 11
      src/light.c
  3. 4 4
      src/pwm_light/pwm_light.c

+ 13 - 27
src/control/btn.c

@@ -12,22 +12,19 @@ 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){
 	// 短按抬起  400ms 后检测是否还处于按下状态
-	if ( isLongCheck = true)
-	{
-		return;
-	}
-	osal_start_timerEx(task_btn_id, BTN_EVT_TIME_CHECK, TIME_CHECK_TEMP * 4);
+	LOG("evt_press_release %d\n", i);
 	last_release_btn_ind = i;
+	osal_stop_timerEx(task_btn_id, BTN_EVT_TIME_CHECK);
 }
 
 void changeTemp(int i)
 {
+	LOG("changeTemp \n");
 	switch (i)
 	{
 	case 0:
@@ -42,6 +39,7 @@ void changeTemp(int i)
 	
 		break;
 	}
+	LOG("changeTemp temp=>>> %d\n", temp);
 	temp_set(temp);
 }
 
@@ -66,25 +64,13 @@ void changeLight(int i)
 
 static void key_press_evt(uint8_t i,key_evt_t key_evt)
 {
-	LOG("\nkey index:%d gpio:%d ",i,key_state.key[i].pin);
+	LOG("\nkey index:%d gpio:%d \n",i,key_state.key[i].pin);
 	switch(key_evt)
 	{
 		case HAL_KEY_EVT_PRESS:
 			LOG("key(press down)\n");	
-			if (last_release_btn_ind != -1)
-			{
-				if (last_release_btn_ind == i)	
-				{
-					// 按下后再次按下
-					isLongCheck = true;
-				}
-			}else
-			{
-				osal_stop_timerEx(task_btn_id, BTN_EVT_TIME_CHECK);
-				isLongCheck = false;
-				last_release_btn_ind = -1;
-				changeLight(i);
-			}
+			osal_start_timerEx(task_btn_id, BTN_EVT_TIME_CHECK, HAL_KEY_LONG_PRESS_TIME + TIME_CHECK_TEMP);
+			changeLight(i);
 			
 #ifdef HAL_KEY_SUPPORT_LONG_PRESS
 			osal_start_timerEx(task_btn_id, KEY_DEMO_LONG_PRESS_EVT, HAL_KEY_LONG_PRESS_TIME);
@@ -99,7 +85,6 @@ 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
 		
@@ -174,15 +159,16 @@ uint16 Key_ProcessEvent( uint8 task_id, uint16 events )
 #endif
 
 	if( events & BTN_EVT_TIME_CHECK){
-		
-		if(last_release_btn_ind != -1 && isLongCheck)
+		LOG("BTN_EVT_TIME_CHECK i: %d \n", last_release_btn_ind);
+		if(last_release_btn_ind != -1)
 		{
+			LOG(" io state %d", key_state.key[last_release_btn_ind].state );
 			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 
+				key_state.key[last_release_btn_ind].state == HAL_STATE_KEY_PRESS 
 				)
 			{
-				LOG("长按 \n");
+				LOG("long press --- \n");
+				osal_start_timerEx(task_btn_id, BTN_EVT_TIME_CHECK, TIME_CHECK_TEMP);
 				changeTemp(last_release_btn_ind);
 			}
 		}

+ 12 - 11
src/light.c

@@ -9,22 +9,23 @@
 
 #include "light.h"
 
+uint32_t _light_total = 10000;
 // 配置 
-light_data_t light_data = {5500, 0};
+light_data_t light_data = {6500, 0};
 
 int light_init(){
     LOG("[light_init]\n");
     // 初始化pwm
     int ret = 0;
     // if()
-    ret = pwm_light_init(WARM_CH, GPIO_WARM, 1000, 1000, 5, PWM_CLK_DIV_16);
+    ret = pwm_light_init(WARM_CH, GPIO_WARM, _light_total, _light_total, 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, 1000, 1000, 5, PWM_CLK_DIV_16);
+    ret = pwm_light_init(COLD_CH, GPIO_COLD, _light_total, _light_total, 5, PWM_CLK_DIV_16);
 
     if(ret != 0){
         LOG("[light_init] pwm_light_init cold failed  %d \n", ret);
@@ -35,7 +36,7 @@ int light_init(){
 }
 
 int light_ch_set(uint8_t ch, uint16_t val){
-    LOG("[light_set] set ch%d val to %d \n", ch, val);
+    // LOG("[light_set] set ch%d val to %d \n", ch, val);
     int ret = pwm_light_set_val(ch, val);
     return ret;
 }
@@ -51,11 +52,11 @@ int comLightVal(){
     // 色温范围 2500~6500
     // 暖色温最大亮度值 = 亮度值 * (色温 - 2500) / (6500 - 2500)
     // 亮度调整偏移后的暖色温亮度值 = 暖色温最大亮度值 + 亮度值 * 2500 / (6500 - 2500)
-    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);
+    int tmp_warm_val = _light_total * (temp_val - 2500) / (6500 - 2500);
+    int tmp_cold_val = _light_total - tmp_warm_val;
+    int warm_val = light_val * tmp_warm_val / 100;
+    int cold_val = light_val * tmp_cold_val / 100;
+    LOG("[comLightVal] light: %d temp: %d warm_val %d, cold_val %d \n", light_val, temp_val, warm_val, cold_val);
     light_ch_set(WARM_CH, warm_val);
     light_ch_set(COLD_CH, cold_val);
     return 0;
@@ -63,7 +64,7 @@ int comLightVal(){
 
 // 亮度调节
 int light_set(uint8_t val){
-    LOG("[light_set] set light val to %d \n", val);
+    // LOG("[light_set] set light val to %d \n", val);
     // 亮度值为 0~100
     light_data.light = val;
     comLightVal();
@@ -72,7 +73,7 @@ int light_set(uint8_t val){
 
 // 色温调节
 int temp_set(int temp){
-    LOG("[temp_set] set temp val to %d \n", temp);
+    // LOG("[temp_set] set temp val to %d \n", temp);
     light_data.temp = temp;
     comLightVal();
     return 0;

+ 4 - 4
src/pwm_light/pwm_light.c

@@ -25,7 +25,7 @@ int pwm_light_reflash(int i)
     if(pwm->pin == GPIO_DUMMY){
         return -1;
     }
-    LOG("pwm ch%d is reflash \n", i);
+    // LOG("pwm ch%d is reflash \n", i);
     
     hal_pwm_close_channel(pwm->pwm_ch);
     hal_pwm_destroy(pwm->pwm_ch);
@@ -66,7 +66,7 @@ int pwm_change_val(int i){
     if(pwm->val < 0){
         pwm->val = 0;
     }
-    LOG("pwm ch%d is change val \n", i);
+    // LOG("pwm ch%d is change val \n", i);
     hal_pwm_set_count_val(pwm->pwm_ch, pwm->val, pwm->total);
     return 0;
 }
@@ -113,7 +113,7 @@ int pwm_light_init(uint8_t ch, GPIO_Pin_e pin, uint32_t val, uint32_t total, uin
     return 0;
 }
 
-int pwm_light_set_total(uint8_t ch, int total )
+int pwm_light_set_total(uint8_t ch, uint32_t total)
 {
     pwm_t *pwm;
     // 判断 ch 是否合法
@@ -157,7 +157,7 @@ int pwm_light_set_val(uint8_t ch , uint32_t val)
         val = pwm->total;
     }
 
-    LOG("light val %d --->> %d \n", pwm->val, val);
+    // LOG("light val %d --->> %d \n", pwm->val, val);
     // 设置 pwm
     pwm->val = val;