반응형

// C_Table_Set함수 (균등하게차감)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 컬러테이블 변수 
unsigned char C_Table[30][3];
 
// 컬러테이블 세팅
void C_Table_Set(unsigned char Col)
{
    float R_Float, G_Float, B_Float;
    unsigned char Max_Val[3];
 
    for(n = 0; n < 3; n++) C_Table[0][n] = Max_Val[n] = C_MAX[Col][n];     
    
    if(Disp_Mode > 5// 20단계            
    {
        R_Float = C_MAX[Col][0/ 28;
        G_Float = C_MAX[Col][1/ 28;
        B_Float = C_MAX[Col][2/ 28;
        
        for(n = 0; n < 28; n++)
        {
            C_Table[n][0= Max_Val[0- (R_Float * n);
            C_Table[n][1= Max_Val[1- (G_Float * n);
            C_Table[n][2= Max_Val[2- (B_Float * n);
        }
        
        #if 0
            // 레드 테스트
            C_Table[0][0= 50;
            C_Table[0][1= 0;
            C_Table[0][2= 0;
            
            // 그린 테스트
            C_Table[19][0= 0;
            C_Table[19][1= 50;
            C_Table[19][2= 0;
        #endif
    }
    else // 10단계    
    {
        R_Float = C_MAX[Col][0/ 10;
        G_Float = C_MAX[Col][1/ 10;        
        B_Float = C_MAX[Col][2/ 10;
        
        for(n = 0; n < 10; n++)
        {    
            C_Table[n][0= Max_Val[0- (R_Float * n);
            C_Table[n][1= Max_Val[1- (G_Float * n);
            C_Table[n][2= Max_Val[2- (B_Float * n);    
        }    
        
        #if 0
            // 레드 테스트
            C_Table[0][0= 50;
            C_Table[0][1= 0;
            C_Table[0][2= 0;
            
            // 그린 테스트
            C_Table[9][0= 0;
            C_Table[9][1= 50;
            C_Table[9][2= 0;
        #endif
    }
}
cs


// C_Table_Set함수 (퍼센트로 차감)
// 차감계수    
#define PER_1 0.13
#define PER_2 0.37
 
// input your code here// 컬러테이블 변수 
unsigned char C_Table[20][3];
 
// 컬러테이블 세팅
void C_Table_Set(unsigned char Col)
{
    float R_Float, G_Float, B_Float;
 
    for(n = 0; n < 3; n++) C_Table[0][n] = C_MAX[Col][n];     
    
    if(Disp_Mode > 5// 20단계            
    {
        for(n = 1; n < 20; n++// 첫번째 배열은 최상위값을 넣어줬으므로 뺀다.
        {
            R_Float = C_Table[n - 1][0* PER_1;
            G_Float = C_Table[n - 1][1* PER_1;    
            B_Float = C_Table[n - 1][2* PER_1;
            
            C_Table[n][0= C_Table[n - 1][0- (unsigned char)R_Float;
            C_Table[n][1= C_Table[n - 1][1- (unsigned char)G_Float;        
            C_Table[n][2= C_Table[n - 1][2- (unsigned char)B_Float;        
        }
        
        #if 0
            // 레드 테스트
            C_Table[0][0= 50;
            C_Table[0][1= 0;
            C_Table[0][2= 0;
            
            // 그린 테스트
            C_Table[19][0= 0;
            C_Table[19][1= 50;
            C_Table[19][2= 0;
        #endif
    }
    else // 10단계    
    {
        for(n = 1; n < 10; n++)    // 첫번째 배열은 최상위값을 넣어줬으므로 뺀다.
        {    
            R_Float = C_Table[n - 1][0* PER_2;
            G_Float = C_Table[n - 1][1* PER_2;
            B_Float = C_Table[n - 1][2* PER_2;
            
            C_Table[n][0= C_Table[n - 1][0- (unsigned char)R_Float;
            C_Table[n][1= C_Table[n - 1][1- (unsigned char)G_Float;        
            C_Table[n][2= C_Table[n - 1][2- (unsigned char)B_Float;            
        }    
        
        #if 0
            // 레드 테스트
            C_Table[0][0= 50;
            C_Table[0][1= 0;
            C_Table[0][2= 0;
            
            // 그린 테스트
            C_Table[9][0= 0;
            C_Table[9][1= 50;
            C_Table[9][2= 0;
        #endif
    }
}
 

// Pattern_Set함수 (풀발광과 꼬리를 미리계산해서 뿌린다.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#define PATTERN_TIME_1    55    
#define PATTERN_TIME_2    55
#define PATTERN_TIME_3    55
#define PATTERN_TIME_4    40
#define PATTERN_TIME_5    50
#define PATTERN_TIME_6    4
#define PATTERN_TIME_7    36
#define PATTERN_TIME_8    36
#define PATTERN_TIME_9    39
 
void Pattern_Set(unsigned char Pattern_Time, 
                unsigned char Dir, 
                unsigned char Full, 
                unsigned char Tail, 
                unsigned char Max, 
                unsigned char Pos_Max, 
                unsigned char Pos_Set)
{
    unsigned char Value;
    
    if(++Time >= Pattern_Time) Time = 0
    else return;
        
    Led_Clear(Max);
    
    if(Pos_Set == 0) Value = Max;
    else              Value = Pos_Set;
        
    if(Max > Pos_Max) Pos_Max = Max;
    
    // LED ON    
    for(i = 0; i < Full + Tail; i++)    
    {
        if(i > Tail)    k = 0;        // 머리
        else            k = Tail - i;    // 꼬리                
 
        // 계산
        if(Pos + i > Max - 1)    i2 = (Pos + i) - Value; // LED_MAX;    
        else                    i2 = Pos + i;
            
        if(Dir == LEFT)
        {    
            Col_Set(i2, C_Table[k][0], C_Table[k][1], C_Table[k][2]);                                                
        }
        else if(Dir == RIGHT)
        {
            Col_Set((Max - 1- i2, C_Table[k][0], C_Table[k][1], C_Table[k][2]);                                                
        }
        else if(Dir == BOTH)
        {
            Col_Set(i2, C_Table[k][0], C_Table[k][1], C_Table[k][2]);
            Col_Set((Max - 1- i2, C_Table[k][0], C_Table[k][1], C_Table[k][2]);    
        }
    }            
    
    if(++Pos >= Pos_Max) Pos = Pos_Set;        
}
 
// Pattern_Set(PATTERN_TIME_1, BOTH, 5, 9, LED_MAX, LED_MAX, 17);

// 컬러체인지 (혼합디밍)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// 패턴 4,6번 공용 
unsigned char C_Byte[3];
float Color[3];
 
// 패턴 4
void Pattern_4(void)
{    
    unsigned char Col_Func;
    
    if(++Time >= PATTERN_TIME_4) Time = 0
    else return;    
 
    if(Col == COLOR_MAX - 1)     Col_Func = 0;
    else                         Col_Func = Col + 1;
 
    if(Flag == 0)
    {
        for(n = 0; n < 3; n++)     
        {
            if(C_MAX[Col][n] > C_MAX[Col_Func][n])
            {
                Color[n] = ((C_MAX[Col][n]) - C_MAX[Col_Func][n]) / 100.0
            }
            else if(C_MAX[Col][n] < C_MAX[Col_Func][n])
            {
                Color[n] = ((C_MAX[Col_Func][n]) - C_MAX[Col][n]) / 100.0
            }    
            else     
            {
                Color[n] = 0;        
            }
        }
            
        Flag = 1;        
    }
 
    for(n = 0; n < 3; n++
    {
        if(C_MAX[Col][n] > C_MAX[Col_Func][n])
        {
            C_Byte[n] = C_MAX[Col][n] - (unsigned char)(Color[n] * G_Count);
        }
        else
        {
            C_Byte[n] = C_MAX[Col][n] + (unsigned char)(Color[n] * G_Count);
        }
    }    
    
    if(++G_Count > 100)        
    {
        G_Count = 0// i = 0;        
        Flag = 0;    
        
        if(++Col >= COLOR_MAX) Col = 0;    // COLOR_MAX
    }    
    
    for(n = 0; n < LED_MAX; n++) Col_Set(n, C_Byte[0], C_Byte[1], C_Byte[2]);    
}
 
cs
// 컬러디밍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 패턴 6
void Pattern_6(void)
{
    if(++Time >= PATTERN_TIME_6) Time = 0
    else return;
        
    static unsigned char Dark_Time;
    
    if(Dark_Time) 
    {
        Dark_Time--;
        return;
    }
    
    if(C_Byte[0== && C_Byte[1== && C_Byte[2== 0for(n = 0; n < 3; n++) Color[n] = C_MAX[Col][n] / 100.0;        
 
    if(Step == 0// UP    
    {
        for(n = 0; n < 3; n++) C_Byte[n] = (unsigned char)(Color[n] * i);        
    }
    else           // DOWN
    {
        for(n = 0; n < 3; n++) C_Byte[n] = (unsigned char)C_MAX[Col][n] - (unsigned char)(Color[n] * i);
    }                
    
    if(++> 100)                
    {
        i = 0;
        
        // 어두운부분 시간늘리기
        if(Step) Dark_Time = 30;
        
        Step ^= 1;    
    }
 
    for(n = 0; n < LED_MAX; n++) Col_Set(n, C_Byte[0], C_Byte[1], C_Byte[2]);    
}
s


cs


반응형
Posted by 메가아재
,