본문 바로가기
공부하는/GPT, 코딩

3색 LED를 켜보자(3) - random 명령어, switch

by 공부하는이땡땡 2020. 3. 29.
반응형

색상표를 이용하여

색을 잘 결정하면 상관이 없겠지만..

 

필자같이

예술감각 똥에 미적감각 꽝이라면

차라리 컴퓨터의 랜덤 조합이 

더 예쁜 색을 표현할 수 있을 것이다. 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

그래서 오늘은 3색 LED의 색을 랜덤하게 켜보는 명령을 해보고자 한다. 

 

1. 색상을 랜덤으로 켜보자 - random 명령어

2. 패턴을 랜덤하게 켜보자 - switch 명령어

 

 

[오늘의 회로]

 

오늘의 회로 역시 3색 LED만 아두이노에 연결

 

시뮬레이터의 3색 LED는 R(-)BG 순이다. 

 

[1. 색상을 무작위로 켜보자]

random 함수

random(3, 10) - 최솟값과 최댓값을 설정해줄 수 있다. 

  이 경우 3에서부터 10까지 랜덤한 값을 출력해준다.

random(10) - 최댓값만 설정할 수 있다. 

  이 경우 0에서부터 10까지 랜덤한 값을 출력해준다.

 

 

따라서 간단하게 코드를 작성해보면

 

int T = 1000; // LED가 켜지는 시간
int R = 11; // 빨강 핀 번호
int G = 9;  // 초록 핀 번호
int B = 10; // 파랑 핀 번호

void setup() {
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}

void loop() {
  analogWrite(R, random(255));
  analogWrite(G, random(255));
  analogWrite(B, random(255));
  delay(T);
}

 

이러면 1초에 한 번씩 랜덤하게 색이 바뀐다. 


지난 시간에 배운 함수 선언을 통해

이번엔 RandomLight 함수를 만들어볼꺼다

2020/03/21 - [공부하는 이땡땡/아두이노를 작동해보자] - 3색 LED를 켜보자(2) - 무지개 색상, void 함수 선언

3색 LED를 켜보자(2) - 무지개 색상, void 함수 선언

3색 LED를 연결을 해보았으니 이제 3색 LED로 다양한 색 연출을 시도해보고자 한다. RGB는 빛의 3원색이기 때문에 이들의 조합으로 다양한 색상 구현이 가능하다. 미적 감각이 제로(?)이기 때문에 누구나 잘 알고..

studylee00.tistory.com

색상은 어차피 255까지 랜덤이니까 따로 변수를 줄 필요가 없다

그러니까 그냥 시간만 조절할 수 있는 녀석을 구성해보자

 

int R = 11; 
int G = 9; 
int B = 10; 

void setup() {
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}  // 여기까지는 그냥 기본 셋팅

void loop() {
   RandomLight(1000);


// 보이드 루프 이후에 void 선언을 통해 RandomLight 함수를 정의한다. 

void RandomLight(int d){ //랜덤 라이트 함수 뒤의 숫자는 불이 켜지는 시간을 의미한다.
  analogWrite(R, random(255));
  analogWrite(G, random(255));
  analogWrite(B, random(255));
  delay(d);

 

이것 역시 1초에 한 번씩 랜덤하게 색이 바뀐다. 

 

 

 

 


[switch 명령어]

일단 switch는 case, break, default랑 세트이다. 

 

switch (변수)

{

case 1: // 변수 값이 1이면 아래 명령을 실행한다.

~~~  // 신기한 건 케이스 아래에 중괄호를 쓰지 않는다. 

break;

case 2: // 변수 값이 1이면 아래 명령을 실행한다.

~~~

break

default:  // 변수 값이 보기에 없으면 아래 명령을 실행한다.

~~~

}

 

물론 스위치 뒤의 변수에는 아날로그 신호를 받아들여 

신호에 따라서 어떤 특정 행동을 하기 원할 때

사용하는 함수이다. 

 

우리는 특별히 신호를 입력할 것이 없으니 랜덤함수를 쓰도록 하겠다. 

 

 

[패턴을 무작위로 표현해보자]

지난 번에 만든 Light 함수와 

오늘 만든 RandomLight 함수를 이용할 거다. 

 

일단 패턴을 5가지 정도 정해야겠다. 

1. 3초 정도 밝게 빛난다.(모든 불빛 온)

2. RGBRGB로 깜박인다(0.5초 간격)

3. 무지개 패턴(0.5초 간격)

4. 랜덤한 불빛이 일곱번 깜박인다(0.5초 간격)

5. 빨강 불빛이 서서히 켜졌다 꺼진다.

 

서서히 켜졌다 꺼졌다... for 문이 궁금하다면?

2020/03/08 - [공부하는 이땡땡/아두이노를 작동해보자] - 아두이노로 LED를 켜보자! (디지털핀, 아날로그핀)

아두이노로 LED를 켜보자! (디지털핀, 아날로그핀)

오늘의 회로도는 LED를 켜는 가장 기본이 되는 명령어에 대해서 알아볼까 한다. [LED를 켜기 위한 사전 지식] 우선 아두이노의 기본적인 정보부터 탐색해볼까 한다. POWER: 전원과 관련된 부분이다. 3.3V, 5V가..

studylee00.tistory.com

오늘의 코드는 엄청 길다 ㅋㅋㅋ 

(마치 여태껏 배운 것의 총 정리 느낌이랄까?)


int T = 500; // 기본 시간 셋팅을 0.5초 설정하였다.
int R = 11; 
int G = 9; 
int B = 10; 
  
void setup() {
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}

void loop() {
int RD = random(1, 5); // RD 변수는 1에서부터 5까지의 랜덤값
  switch (RD)
  {
    case 1: // 변수 값이 1이면 아래 명령을 실행한다.
    Light(255,255,255);
    delay(T*6);
    break;

    case 2: // 변수 값이 2이면 아래 명령을 실행한다.
    Light(255,0,0);
    Light(0,255,0);
    Light(0,0,255);
    Light(255,0,0);
    Light(0,255,0);
    Light(0,0,255);
    break;
    
    case 3: //빨주노초파남보 패턴
    Light(255,0,0);
    Light(255,140,0);
    Light(255,255,0);
    Light(0,205,0);
    Light(0,191,255);
    Light(0,0,139);
    Light(75,0,130);
    break;
    
    case 4: //랜덤 색상 7번, 0.5초 간격
    RandomLight(T); 
    RandomLight(T); 
    RandomLight(T); 
    RandomLight(T); 
    RandomLight(T); 
    RandomLight(T); 
    RandomLight(T); 
    break;
    
    case 5:  // 빨간불이 점차 밝아지고, 점차 어두워지고
    for (int i =0; i<255; i=i+10) // i가 10보다 작으면 10을 더한다 
       {  
       Light(i, 0, 0); // 빨간 색에 i만큼의 신호 출력 
       } 
    for (int i =255; i>0; i=i-10) // i가 0보다 크면 10을 뺀다. 
       {  
       Light(i, 0, 0); // 빨간 색에 i만큼의 신호 출력 
       }
    break;
  }  // Switch 명령 끝
} // void loop 끝


// Light, RandomLight 정의
void Light(int a, int b, int c){  // Light 함수에는 3가지 변수가 필요하다. R색상, G색상, B색상
  analogWrite(R, a);
  analogWrite(G, b);
  analogWrite(B, c);
  delay(T);}

 

void RandomLight(int d){ // 뒤의 변수는 시간
  analogWrite(R, random(255));
  analogWrite(G, random(255));
  analogWrite(B, random(255));
  delay(d);}


시뮬레이션과 실물은 생략하도록 하겠다... (작동은 확인함 ㅋㅋ)

너무 괴랄맞고 정신없어서 어떤게 어떤거진도 잘 모르겠다.ㅋㅋㅋ

 

대표 화면이 필요해서 ㅋㅋㅋㅋㅋㅋ

 

 

 

 

 

[오늘의 창의력 문제]

 

앞서 테스트 했던 코드

RGBRGB로 깜박인다(0.5초 간격)

랜덤한 불빛이 일곱번 깜박인다(0.5초 간격)

for문으로 그럴싸하게 만들 수 없을까?

더보기

 for (int i=1; i<3; i++){ // i는 1부터 시작. i++가 i에 1을 더해준다. 즉 i=1,2 두번 반복된다. 
    Light(255,0,0); 
    Light(0,255,0); 
    Light(0,0,255); 
  }

 

for (int i=1; i<=7; i=i+1){ // i는 1부터 시작. 7번 반복한다. i++ 대신 i=i+1을 써보았다. 
    RandomLight(T);
  }

 

여기서 i값 들을 조절해주면 반복 횟수를 조정할 수 있다. 

 

반응형

댓글