반응형
// 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 |
// 차감계수
#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); // 컬러체인지 (혼합디밍)
// 컬러디밍
| cs |
반응형
'개발모듈 > 펌웨어 모듈' 카테고리의 다른 글
- [AVR Studio 4] ATmega128 - 시리얼통신 설정 (0) | 2018.12.18 |
---|---|
- [AVR Studio 4] ATmega128 - 타이머카운터 (CTC모드) (0) | 2018.12.18 |
- AVR Studio 4.19에서 소수점처리 (0) | 2018.05.15 |
- [IAR] ATmega8 I2C (GPIO) (0) | 2017.11.20 |
- #define 여러명령 사용하기 (0) | 2017.06.08 |