增加双色交叠渐变模式

This commit is contained in:
2026-07-28 14:03:33 +08:00
parent 60ec4838f2
commit 71e4bb628a
5 changed files with 90 additions and 25 deletions
@@ -84,26 +84,29 @@ void set_mode(){
W_PWM=1U; C_PWM=1U; driveMode=0U; direction=0U; Mode=mode1;
break;
case 6:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=1U; Mode=mode1;
W_PWM=1U; C_PWM=0U; driveMode=1U; direction=0U; Mode=mode1;
break;
case 7:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=1U; Mode=mode3;
break;
case 8:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=1U; Mode=mode2;
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=0U; Mode=mode3;
break;
case 9:
W_PWM=0U; C_PWM=100U; driveMode=2U; direction=1U; Mode=mode2;
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=1U; Mode=mode2;
break;
case 10:
W_PWM=50U; C_PWM=50U; driveMode=0U; direction=1U; Mode=mode2;
W_PWM=0U; C_PWM=100U; driveMode=2U; direction=1U; Mode=mode2;
break;
case 11:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=2U; Mode=mode2;
W_PWM=50U; C_PWM=50U; driveMode=0U; direction=1U; Mode=mode2;
break;
case 12:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=2U; Mode=mode2;
break;
case 13:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=2U; Mode=mode2;
break;
case CUSTOM_TEMPERATURE_MODE:
Mode=mode0;
break;
@@ -151,6 +154,7 @@ void Mode0(){ //
#define THREE_COLOR_WAIT_NEUTRAL 6U
#define THREE_COLOR_WAIT_COLD 7U
#define THREE_COLOR_WAIT_WARM 8U
#define OVERLAP_GRADIENT_LEVEL 40U
static uint8_t breathespeed_flag=0; //该变量只是用来处理三种颜色呼吸时候,对中性光的速度变大
static void breathe_fun(uint16_t *PWM_1, uint16_t *PWM_2, uint8_t flag) {
@@ -294,13 +298,13 @@ void jump_fun(uint16_t *PWM_1, uint16_t *PWM_2, uint8_t flag){
void Mode2(void)
{
if(choose_mode_falsg==8U){
if(choose_mode_falsg==9U){
jump_fun(&C_PWM,&W_PWM,0U);
}else if(choose_mode_falsg==9U){
jump_fun(&W_PWM,&C_PWM,0U);
}else if(choose_mode_falsg==10U){
jump_fun(&W_PWM,&C_PWM,1U);
jump_fun(&W_PWM,&C_PWM,0U);
}else if(choose_mode_falsg==11U){
jump_fun(&W_PWM,&C_PWM,1U);
}else if(choose_mode_falsg==12U){
switch(direction){
case 1U:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=2U;
@@ -312,7 +316,7 @@ void Mode2(void)
W_PWM=50U; C_PWM=50U; driveMode=0U; direction=1U;
break;
}
}else if(choose_mode_falsg==12U){
}else if(choose_mode_falsg==13U){
switch(direction){
case 1U:
W_PWM=100U; C_PWM=0U; driveMode=1U; direction=2U;
@@ -338,15 +342,52 @@ void Mode2(void)
void Mode3(void)
{
if(choose_mode_falsg!=7U) return;
if(direction==1U){
if(C_PWM<100U) C_PWM++;
W_PWM=100U-C_PWM;
if(C_PWM>=100U){ C_PWM=100U; W_PWM=0U; direction=0U; }
if(choose_mode_falsg==7U){
if(direction==1U){
if(C_PWM<100U) C_PWM++;
W_PWM=100U-C_PWM;
if(C_PWM>=100U){ C_PWM=100U; W_PWM=0U; direction=0U; }
}else{
if(C_PWM>0U) C_PWM--;
W_PWM=100U-C_PWM;
if(C_PWM==0U){ W_PWM=100U; direction=1U; }
}
}else if(choose_mode_falsg==8U){
switch(direction){
case 0U:
C_PWM=0U; driveMode=1U;
if(W_PWM>OVERLAP_GRADIENT_LEVEL) W_PWM--;
if(W_PWM<=OVERLAP_GRADIENT_LEVEL){ W_PWM=OVERLAP_GRADIENT_LEVEL; direction=1U; }
break;
case 1U:
if(W_PWM>0U){ W_PWM--; C_PWM++; }
driveMode=0U;
if(W_PWM==0U){ C_PWM=OVERLAP_GRADIENT_LEVEL; driveMode=2U; direction=2U; }
break;
case 2U:
W_PWM=0U; driveMode=2U;
if(C_PWM<100U) C_PWM++;
if(C_PWM>=100U){ C_PWM=100U; direction=3U; }
break;
case 3U:
W_PWM=0U; driveMode=2U;
if(C_PWM>OVERLAP_GRADIENT_LEVEL) C_PWM--;
if(C_PWM<=OVERLAP_GRADIENT_LEVEL){ C_PWM=OVERLAP_GRADIENT_LEVEL; direction=4U; }
break;
case 4U:
if(C_PWM>0U){ C_PWM--; W_PWM++; }
driveMode=0U;
if(C_PWM==0U){ W_PWM=OVERLAP_GRADIENT_LEVEL; driveMode=1U; direction=5U; }
break;
case 5U:
default:
C_PWM=0U; driveMode=1U;
if(W_PWM<100U) W_PWM++;
if(W_PWM>=100U){ W_PWM=100U; direction=0U; }
break;
}
}else{
if(C_PWM>0U) C_PWM--;
W_PWM=100U-C_PWM;
if(C_PWM==0U){ W_PWM=100U; direction=1U; }
return;
}
if(C_PWM==0U) driveMode=1U;
else if(W_PWM==0U) driveMode=2U;