캐릭보드 - 조명등 색을 변경해보자

by 심형주 | 2017-07-14 16:29

재료

  • 캐릭보드 싱글박스 1개

오늘은 조명등의 색을 좀 더 다채롭게 바꿔보도록 하겠습니다!


빛이 밝아졌다가 어두워지기도 하면서 무지개빛으로 바뀌는 조명을 만들어보려 합니다.

무지개 빛을 적용하기 이전에, 하얀빛으로만 조명이 밝아졌다가 어두워지는 것을 반복하도록 해보았습니다!

이것에 대한 코드는 다음과 같습니다.


① 빛의 세기 변경 코드 

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
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#define lightSensorPin A0
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int red = 0;
int green = 0;
int blue = 0;
int cnt = 0;
int lightVal = 0;
int flag = 0;
 
tmElements_t tm;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (5);
  red = 255;
  green = 255;
  blue = 255;
  cnt = 0;
}
 
void loop() {
 
  int i;
 
  if(flag == 0){ //빛의 세기 증가
    cnt+=10;
    Serial.println(cnt);
    red = cnt;
    green = cnt;
    blue = cnt;
    for (i = 0; i < 5; i++) {
      strip.setPixelColor(i, strip.Color(red, green, blue));
      strip.show();
    }
    if(cnt == 250){
      flag = 1
    }
  }
  
  else//빛의 세기 감소
    cnt-=10;
    Serial.println(cnt);
    red = cnt;
    green = cnt;
    blue = cnt;
    for (i = 0; i < 5; i++) {
     strip.setPixelColor(i, strip.Color(red, green, blue));
     strip.show();
    }
    if(cnt == 0){
      flag = 0;
    }
  }
    
  delay(50);
}
 
cs




이제 이곳에 무지개 빛을 입혀보겠습니다!

무지개 빛의 rgb값은 다음 표를 참고하시면 됩니다~


- RGB 색상표


코드는 다음과 같습니다.

② 빛의 세기 + 무지개빛 변경 코드

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#define lightSensorPin A0
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int flag = 0;
int rgb[7][3];
int c_num = 0;
int tp = 0;
 
tmElements_t tm;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (5);
 
  //Violet
  rgb[0][0= 148;
  rgb[0][1= 0;
  rgb[0][2= 211;
 
  //Indigo
  rgb[1][0= 75;
  rgb[1][1= 0;
  rgb[1][2= 130;
 
  //Blue
  rgb[2][0= 0;
  rgb[2][1= 0;
  rgb[2][2= 255;
 
  //Green
  rgb[3][0= 0;
  rgb[3][1= 255;
  rgb[3][2= 0;
 
  //Yellow
  rgb[4][0= 255;
  rgb[4][1= 255;
  rgb[4][2= 0;
 
  //Orange
  rgb[5][0= 255;
  rgb[5][1= 127;
  rgb[5][2= 0;
 
  //Red
  rgb[6][0= 255;
  rgb[6][1= 0;
  rgb[6][2= 0;
 
}
 
void loop() {
 
  int i;
 
  if(flag == 0){ //빛의 세기 증가
    tp++;
    for (i = 0; i < 5; i++) {
      strip.setPixelColor(i, strip.Color(rgb[c_num][0]*tp*0.1,rgb[c_num][1]*tp*0.1,rgb[c_num][2]*tp*0.1));
      strip.show();
    }
    if(tp >= 10){
      flag = 1
    }
  }
  
  else if(flag == 1){ //빛의 세기 감소
    tp--;
    for (i = 0; i < 5; i++) {
     strip.setPixelColor(i, strip.Color(rgb[c_num][0]*tp*0.1,rgb[c_num][1]*tp*0.1,rgb[c_num][2]*tp*0.1));
     strip.show();
    }
    
    if(tp <= 0){
      flag = 2;
    }
  }
 
  else if(flag == 2){ //빛의 색깔 변경
    if(c_num == 6){
      c_num = 0;
    }
    else{
     c_num++;
    }
    
    flag = 0;
  }
 delay(100);
}
 
cs


위의 표에서 볼 수 있었던 색들의 rgb값들을 먼저 rgb[7][3]배열에 저장을 해둡니다.

그리고 flag를 사용하여 상황에 따라 분류를 하였습니다.

flag가  0일때는 빛의 세기를 증가시키고,

flag가 1일때는 빛의 세기가 감소시키고,

flag가 2일때는 색을 바꿔줍니다.


빛의 세기는 tp값을 변경시키면서 미리 설정해둔 rgb배열값에 그 값을 곱하여 조절하였습니다.


무지개 색으로 차례대로 빛이 변하는걸 보실 수 있습니다..!


이 조명을 캐릭터에 적용해보면,


이제야 제대로 된 조명등 느낌이 납니다 ^^;



원하는 색상의 빛을 설정하여 나만의 조명등을 만들어보세요.

댓글 0

MADE BY