코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-10-01 11:50:24
리셋 버튼 모듈은 푸시버튼을 쉽게 연결할 수 있는 모듈이라고 생각하시면 됩니다.
그냥 푸시버튼을 연결하면 되지 않나라는 생각을 하실 수도 있습니다.
하지만 저항이 없이 연결이 가능하고 브레드 보드가 필요하지 않기 때문에
완성도 있는 작품이 만들 경우 간단하게 연결하실 수 있습니다.
보드와 이 모듈만 있으면 라디오 송수신기 등을 사용해서 먼 거리에서도 간단하게 버튼하나로 어떤 센서를 제어 할 수도 있습니다.
본 문에서는 버튼을 누를 때 색이 RGB LED 색이 변하는 것을 멈추도록 하겠습니다.
원하는 색이 있을 때 버튼을 누르면
버튼을 누르고 있는 동안 그 색을 계속 유지 하실 수 있습니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | |
2 | 브레드 보드 | 1 | |
3 | RGB LED | 1 | |
4 | 330 ohm 저항 | 3 | |
5 | 리셋 버튼 모듈 | 1 | |
6 | 점퍼 케이블 | 9 | KY-004를 사용했습니다. |
부품명 | 오렌지 보드 | 브레드 보드 | RGB LED | 330 ohm 저항 | 점퍼 케이블 |
사진 | x1 | x1 | x1 | x3 | x9 |
부품명 | 리셋 버튼 모듈 |
사진 | x1 |
다음 스케치를 아두이노에 업로드 하세요.
/* 리셋 버튼 모듈 사용하기 본 스케치는 여러 커뮤니티를 참고하여 kocoafab에서 작성하였습니다. 누구나 무료로 사용하실 수 있습니다. */ int redPin = 11; //RGB red int greenPin = 10; //RGB green int bluePin = 9; //RGB blue int buttonPin = 4; //리셋 버튼 모듈 int val; //읽어온 버튼의 디지털 값 저장 변수 void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { int i; //밑의 for 반복문 횟수 조절, 특정 color 값을 전달 하기 위해 선언 //i가 0~767이 될 때 까지 { }안의 내용을 반복 for (i = 0; i < 768; i++) { val = digitalRead(buttonPin); //버튼 값 읽어옴 while(val==LOW) { //버튼이 눌린 동안 showColor(i); //지금 색을 유지 val = digitalRead(buttonPin); //다시 버튼 값 읽어옴 if ( val == HIGH) //버튼이 눌리지 않았다면 break; //while구문 빠져나옴 } showColor(i); //눌리지 않을 경우 계속 색이 변함 delay(30); } } // color를 결정하는 함수, color(= i) 값을 전달 받음 void showColor(int color) { int redRate; //RED_PIN에 출력시킬 값 저장하기 위한 변수 int greenRate; //GREEN_PIN에 출력시킬 값 저장하기 위한 변수 int blueRate; //BLUE_PIN에 출력시킬 값 저장하기 위한 변수 if (color <= 255) //빨강 -> 초록 { redRate = 255 - color; //빨강을 점점 줄임 greenRate = color; //초록을 점점 높임 blueRate = 0; //파랑은 없음 } else if (color <= 511) //초록 -> 파랑 { redRate = 0; //빨강은 없음 greenRate = 255 - (color - 256); // 초록을 점점 줄임 blueRate = (color - 256); //파랑을 점점 높임 } else //파랑 -> 빨강 { redRate = (color - 512); //빨강을 점점 높임 greenRate = 0; //초록은 없음 blueRate = 255 - (color - 512); //파랑을 점점 줄임 } analogWrite(redPin, redRate); //RED_PIN으로 redRate만큼 아날로그 값 출력 analogWrite(greenPin, greenRate); //GREEN_PIN으로 greenRate만큼 아날로그 값 출력 analogWrite(bluePin, blueRate); //BLUE_PIN으로 blueRate만큼 아날로그 값 출력 }
showColor함수를 사용하면 다양한 색으로 RGB LED의 색을 변형 시킬 수 있습니다.
이 함수에 대한 설명은 다음 링크를 참고하세요.
본 스케치를 업로드하면 계속 빠르게 색깔이 변하는 도중에 원하는 색이 나왔을 때 계속 보고 싶다면 버튼을 누르면 됩니다.
버튼을 누르는 동안은 일정 색을 유지하고 다시 떼는 순간 색깔이 다시 변하기 시작합니다.
for (i = 0; i < 768; i++) { val = digitalRead(buttonPin); //버튼 값 읽어옴 while(val==LOW) { //버튼이 눌린 동안 showColor(i); //지금 색을 유지 val = digitalRead(buttonPin); //다시 버튼 값 읽어옴 if ( val == HIGH) //버튼이 눌리지 않았다면 break; //while구문 빠져나옴 } showColor(i); //눌리지 않을 경우 계속 색이 변함 delay(30); }
for 반복문을 통해 showColor함수를 반복적으로 호출함으로써 색이 계속 변합니다.
그 중간에 버튼의 디지털 값을 읽어와서 눌렸을 경우를 구분합니다.
눌렸을 경우, while문을 통해 눌린 동안 같은 색을 유지 하도록 합니다.
while문이 계속 도는 경우에도 다시 한번 버튼의 디지털 값을 확인해서 버튼을 누르다 뗀 경우
같은 색을 유지하는 것을 멈춥니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!