코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-04 19:12:00
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지보드 | 1 | 오렌지보드 |
2 | 7smd RGB LED | 1 | LED |
3 | 블루투스 모듈(HC-05) | 1 | 블루투스 |
4 | 브레드보드 | 1 | 브레드보드 |
5 | 점퍼케이블 | 8 | 점퍼케이블 |
부품명 | 오렌지보드 | 7smd RGB LED | 블루투스 모듈 | 브레드보드 | 점퍼케이블 |
파트 |
#include <SoftwareSerial.h> // 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러온다. SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX) byte buffer[1024]; // 데이터 수신 버퍼 int bufferPosition; // 버퍼에 기록할 위치 int redLed = 10; int blueLed = 11; int greenLed = 9; // 각각의 LED와 연결된 핀번호 boolean redState = 0; boolean blueState = 0; boolean greenState = 0; // 각 부품을 제어하기 위한 상태 값(이 값을 조절하는 걸로 부품을 제어한다.) int redLight = 0; int greenLight = 0; int blueLight = 0; // 각 색상의 값을 저장 한다.
String lightValue; void setup () { pinMode(redLed, OUTPUT); pinMode(blueLed, OUTPUT); pinMode(greenLed, OUTPUT); BTSerial.begin(9600); Serial.begin(9600); bufferPosition = 0; } void loop () { if (BTSerial.available()) { byte data = BTSerial.read(); buffer[bufferPosition++] = data; Serial.println(data); if (data == 'q') { // Red 막대바를 조정했을 경우 해당 값에 맞게 LED를 조절 합니다. if (bufferPosition == 4) { redLight = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48); lightOn(); redState = 1; } else if (bufferPosition == 3) { redLight = (buffer[0]-48)*10 + (buffer[1]-48); lightOn(); redState = 1; } else if (bufferPosition == 2) { redLight = buffer[0] - 48; lightOn(); if (redLight == 0) { redState = 0; } else { redState = 1; } } } if (data == 'w') { // Blue 막대바를 조정했을 경우 해당 값에 맞게 LED를 조절 합니다. if (bufferPosition == 4) { blueLight = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48); lightOn(); blueState = 1; } else if (bufferPosition == 3) { blueLight = (buffer[0]-48)*10 + (buffer[1]-48); lightOn(); blueState = 1; } else if (bufferPosition == 2) { blueLight = buffer[0] - 48; lightOn(); if (blueLight == 0) { blueState = 0; } else { blueState = 1; } } } if (data == 'e') { // Green 막대바를 조정했을 경우 해당 값에 맞게 LED를 조절 합니다. if (bufferPosition == 4) { greenLight = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48); lightOn(); greenState = 1; } else if (bufferPosition == 3) { greenLight = (buffer[0]-48)*10 + (buffer[1]-48); lightOn(); greenState = 1; } else if (bufferPosition == 2) { greenLight = buffer[0] - 48; lightOn(); if (greenLight == 0) { greenState = 0; } else { greenState = 1; } } } if (data == 'r') { // red LED가 꺼져있을 경우 키고, 켜 있을 경우 끕니다. if (redState == 0) { redLight = 128; redState = 1; lightOn(); } else { redLight = 0; redState = 0; lightOn(); } delay(150); } if (data == 'b') { // blue LED가 꺼져있을 경우 키고, 켜 있을 경우 끕니다. if (blueState == 0) { blueLight = 128; blueState = 1; lightOn(); } else { blueLight = 0; blueState = 0; lightOn(); } delay(150); } if (data == 'g') { // green LED가 꺼져있을 경우 키고, 켜 있을 경우 끕니다. if (greenState == 0) { greenLight = 128; greenState = 1; lightOn(); } else { greenLight = 0; greenState = 0; lightOn(); } delay(150); } if (data == 'd') { // LED를 랜덤으로(RGB 조합을 랜덤으로 섞는다) 반복합니다. byte data1 = 10; do { if (BTSerial.available()) { data1 = BTSerial.read(); } if (data1 == 10) { setLight(random(1, 256), random(1, 256), random(1, 256)); lightOn(); delay(300); } else { break; } } while (1); setState(1, 1, 1); } if (data == 'o') { // LED를 모두 끕니다. setState(0, 0, 0); setLight(0, 0, 0); lightOn(); delay(150); } if (data == 't') { // 현재 LED 의 RGB값을 안드로이드로 보냅니다. BTSerial.print(redLight); BTSerial.print(','); BTSerial.print(blueLight); BTSerial.print(','); BTSerial.println(greenLight); } if (data == '\n') // 명령이 다 들어왔을 경우 버퍼 위치를 초기화 합니다. { bufferPosition = 0; } } } void lightOn() { // 3개의 LED 밝기를 조절 하는 함수 analogWrite(redLed, redLight); analogWrite(blueLed, blueLight); analogWrite(greenLed, greenLight); } void setState(boolean red, boolean blue, boolean green) { // 3개의 LED의 상태를 저장하는 함수 redState = red; greenState = blue; blueState = green; } void setLight(int red, int blue, int green) { // 입력 받은 LED의 밝기를 저장 하는 함수 redLight = red; blueLight = blue; greenLight = green; }
if (data == 'q') { // Red 막대바를 조정했을 경우 해당 값에 맞게 LED를 조절 합니다. if (bufferPosition == 4) { redLight = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48); lightOn(); redState = 1; } else if (bufferPosition == 3) { redLight = (buffer[0]-48)*10 + (buffer[1]-48); lightOn(); redState = 1; } else if (bufferPosition == 2) { redLight = buffer[0] - 48; lightOn(); if (redLight == 0) { redState = 0; } else { redState = 1; } } } if (data == 'w') { // Blue 막대바를 조정했을 경우 해당 값에 맞게 LED를 조절 합니다. if (bufferPosition == 4) { blueLight = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48); lightOn(); blueState = 1; } else if (bufferPosition == 3) { blueLight = (buffer[0]-48)*10 + (buffer[1]-48); lightOn(); blueState = 1; } else if (bufferPosition == 2) { blueLight = buffer[0] - 48; lightOn(); if (blueLight == 0) { blueState = 0; } else { blueState = 1; } } } if (data == 'e') { // Green 막대바를 조정했을 경우 해당 값에 맞게 LED를 조절 합니다. if (bufferPosition == 4) { greenLight = (buffer[0]-48)*100 + (buffer[1]-48)*10 + (buffer[2]-48); lightOn(); greenState = 1; } else if (bufferPosition == 3) { greenLight = (buffer[0]-48)*10 + (buffer[1]-48); lightOn(); greenState = 1; } else if (bufferPosition == 2) { greenLight = buffer[0] - 48; lightOn(); if (greenLight == 0) { greenState = 0; } else { greenState = 1; } } } if (data == 'r') { // red LED가 꺼져있을 경우 키고, 켜 있을 경우 끕니다. if (redState == 0) { redLight = 128; redState = 1; lightOn(); } else { redLight = 0; redState = 0; lightOn(); } delay(150); } if (data == 'b') { // blue LED가 꺼져있을 경우 키고, 켜 있을 경우 끕니다. if (blueState == 0) { blueLight = 128; blueState = 1; lightOn(); } else { blueLight = 0; blueState = 0; lightOn(); } delay(150); } if (data == 'g') { // green LED가 꺼져있을 경우 키고, 켜 있을 경우 끕니다. if (greenState == 0) { greenLight = 128; greenState = 1; lightOn(); } else { greenLight = 0; greenState = 0; lightOn(); } delay(150); } if (data == 'd') { // LED를 랜덤으로(RGB 조합을 랜덤으로 섞는다) 반복합니다. byte data1 = 10; do { if (BTSerial.available()) { data1 = BTSerial.read(); } if (data1 == 10) { setLight(random(1, 256), random(1, 256), random(1, 256)); lightOn(); delay(300); } else { break; } } while (1); setState(1, 1, 1); } if (data == 'o') { // LED를 모두 끕니다. setState(0, 0, 0); setLight(0, 0, 0); lightOn(); delay(150); } if (data == 't') { // 현재 LED 의 RGB값을 안드로이드로 보냅니다. BTSerial.print(redLight); BTSerial.print(','); BTSerial.print(blueLight); BTSerial.print(','); BTSerial.println(greenLight); } if (data == '\n') // 명령이 다 들어왔을 경우 버퍼 위치를 초기화 합니다. { bufferPosition = 0; }
판다마니아