코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-11-25 14:20:30
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 우노 | 1 | 아두이노 |
2 | 7SMD RGB LED | 2 | DFRobot |
3 | 브레드 보드 | 1 | |
4 | 케이블 | 2 |
부품명 | 아두이노 우노 | 7SMD RGB LED | 브레드 보드 | 케이블 |
부품 사진 |
import processing.serial.*;
import controlP5.*;
ControlP5 cp5;
Accordion accordion;
Serial myPort;
color c = color(0, 160, 100);
byte colors;
void setup() {
println(Serial.list());
println(Serial.list()[0]);
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
size(400, 600);
noStroke();
smooth();
gui();
}
void gui() {
cp5 = new ControlP5(this);
// group number 1, contains 2 bangs
Group g1 = cp5.addGroup("Random RGB") //Random RGB 이름을 가진 그룹을 추가
.setBackgroundColor(color(0, 64)) //배경색을 (0,64)로 지정
.setBackgroundHeight(150) // 높이를 150으로 지정
;
cp5.addBang("bang") //bang이란 이름을 가진 Bang을 추가
.setPosition(10,20) //bang의 좌상단 좌표를 10,20으로 위치시킨다.
.setSize(100,100) //너비, 높이를 100,100으로 지정
.moveTo(g1) //그룹1에 추가
.plugTo(this,"shuffle"); //shuffle기능을 발동시킨다.
;
// group number 2, contains a radiobutton
Group g2 = cp5.addGroup("SetColor") //SetColor 이름을 가진 그룹을 추가
.setBackgroundColor(color(0, 64)) //배경색을 (0,64)로 지정
.setBackgroundHeight(150) // 높이를 150으로 지정
;
cp5.addRadioButton("radio") //radio이름을 가진 Radio버튼을 추가
.setPosition(10,20) //Radio버튼의 좌상단 좌표를 10,20으로 위치시킨다.
.setItemWidth(20) //너비 20
.setItemHeight(20) //높이 20
.addItem("black", 0) //black이름을 가지고 0의 값을 갖는 버튼 추가
.addItem("red", 1) //red이름을 가지고 1의 값을 갖는 버튼 추가
.addItem("green", 2) //green이름을 가지고 2의 값을 갖는 버튼 추가
.addItem("blue", 3) //blue이름을 가지고 3의 값을 갖는 버튼 추가
.addItem("gray", 4) //gray이름을 가지고 4의 값을 갖는 버튼 추가
.setColorLabel(color(255)) //글씨의 색을 흰색(255)로 지정. 0일 경우 검정색 글씨가 뜸
.activate(2) //시작할때 세번째 버튼(0부터 시작)을 활성화 시킨다.
.moveTo(g2) //그룹2에 추가
;
// group number 3, contains a bang and a slider
Group g3 = cp5.addGroup("SetBrightness") //SetBrightness 이름을 가진 그룹을 추가
.setBackgroundColor(color(0, 64)) //배경색을 (0,64)로 지정
.setBackgroundHeight(150) // 높이를 150으로 지정
;
cp5.addBang("shuffle") //shuffle이란 이름을 가진 Bang을 추가
.setPosition(10,20) //shuffle의 좌상단 좌표를 10,20으로 위치시킨다.
.setSize(40,50) //너비, 높이를 40,50으로 지정
.moveTo(g3) //그룹3에 추가
;
cp5.addSlider("rgbLED1") //rgbLED1이란 이름을 가진 슬라이드 추가
.setPosition(60,20) //60,20좌표에 위치시킨다
.setSize(100,20) //너비 100 높이 20
.setRange(0,100) //슬라이더가 갖는 값을 최소 0 최대 100으로 지정
.setValue(100) //초기값을 100으로 지정
.moveTo(g3) //그룹3에 추가
;
cp5.addSlider("rgbLED2") //rgbLED2이란 이름을 가진 슬라이드 추가
.setPosition(60,50) //60,50좌표에 위치시킨다
.setSize(100,20) //너비 100 높이 20
.setRange(0,100) //슬라이더가 갖는 값을 최소 0 최대 100으로 지정
.setValue(100) //초기값을 100으로 지정
.moveTo(g3) //그룹3에 추가
;
// create a new accordion
// add g1, g2, and g3 to the accordion.
accordion = cp5.addAccordion("acc") //acc란 이름을 가진 어코디언 추가
.setPosition(40,40) //어코디언의 좌상단 좌표를 40,40으로 지정
.setWidth(200) //너비를 200으로 지정
.addItem(g1) //그룹1, 그룹2, 그룹3을 포함시킨다
.addItem(g2)
.addItem(g3)
;
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {accordion.open(0,1,2);}}, 'o');
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {accordion.close(0,1,2);}}, 'c');
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {accordion.setWidth(300);}}, '1');
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {accordion.setPosition(0,0);accordion.setItemHeight(190);}}, '2');
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {accordion.setCollapseMode(ControlP5.ALL);}}, '3');
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {accordion.setCollapseMode(ControlP5.SINGLE);}}, '4');
cp5.mapKeyFor(new ControlKey() {public void keyEvent() {cp5.remove("myGroup1");}}, '0');
accordion.open(0,1,2);
// use Accordion.MULTI to allow multiple group
// to be open at a time.
accordion.setCollapseMode(Accordion.MULTI);
// when in SINGLE mode, only 1 accordion
// group can be open at a time.
// accordion.setCollapseMode(Accordion.SINGLE);
}
void radio(int theC) { //라디오버튼을 눌렀을 때 생기는 이벤트 함수
colors = 20;
myPort.write(colors);
switch(theC) { //누르는 버튼에 따라 RGB black,gray설정
case(0):c=color(0,200);colors = 0;myPort.write(colors);break;
case(1):c=color(255,0,0,255);colors = 1;myPort.write(colors);break;
case(2):c=color(0, 255, 0,255);colors = 2;myPort.write(colors);break;
case(3):c=color(0, 128, 255,200);colors = 3;myPort.write(colors);break;
case(4):c=color(50,128);colors = 4;myPort.write(colors);break;
}
}
void shuffle() { //Bang버튼을 눌렀을때 랜덤하게 색상을 뽑아내는 이벤트 함수
colors = 10;
myPort.write(colors);
int r = (int)random(255);
println(r);
int g = (int)random(255);
println(g);
int b = (int)random(255);
println(b);
myPort.write(r); myPort.write(g); myPort.write(b);
c = color(r,g,b,200);
}
void draw() {
background(220);
fill(c); //지정된 색으로 채우기 발동
//버튼으로 조절한 값에 의해 타원의 색과 반지름이 결정되어 그려진다.
float s1 = cp5.getController("rgbLED1").getValue();
ellipse(300,400,s1*2,s1*2);
byte ch1 = (byte)s1;
myPort.write(30);
myPort.write(ch1);
float s2 = cp5.getController("rgbLED2").getValue();
ellipse(300,100,s2*2,s2*2);
byte ch2 = (byte)s2;
myPort.write(40);
myPort.write(ch2);
}
byte index; //그룹별 Index값 byte colors; //Group2의 색상값 byte red,green,blue; //RGB별 색상값을 받는 변수 byte brs1, brs2 = 255; //밝기값
//핀번호 int b2 = 3; int g2 = 5; int r2 = 6;
int b1 = 9; int g1 = 10; int r1 = 11; void setup(){ Serial.begin(9600); //시리얼 통신 초기화 for(int i=9;i<12;i++) pinMode(i,OUTPUT); pinMode(b2,OUTPUT); pinMode(g2,OUTPUT); pinMode(r2,OUTPUT); } void loop(){ if(Serial.available()) { index = Serial.read(); if(index == 10) { //Bang버튼(랜덤색상) while(Serial.available() <=0); //값을 받을 때까지 대기 red = Serial.read(); while(Serial.available() <=0); //값을 받을 때까지 대기 green = Serial.read(); while(Serial.available() <=0); //값을 받을 때까지 대기 blue = Serial.read(); setRGBValue1(red,green,blue); setRGBValue2(red,green,blue); } else if(index == 20) { //Radio버튼 while(Serial.available() <=0); //값을 받을 때까지 대기 colors = Serial.read(); if(colors == 0) { //LED off red = 0; green = 0; blue = 0; setRGBValue1(red,green,blue); setRGBValue2(red,green,blue); } else if(colors == 1) { //Red 표시 red = 255; green = 0; blue = 0; setRGBValue1(red,green,blue); setRGBValue2(red,green,blue); } else if(colors == 2) { //Green 표시 red = 0; green = 255; blue = 0; setRGBValue1(red,green,blue); setRGBValue2(red,green,blue); } else if(colors == 3) { //Blue 표시 red = 0; green = 0; blue = 255; setRGBValue1(red,green,blue); setRGBValue2(red,green,blue); } else if(colors == 4) { //Gray 표시 red = 200; green = 200; blue = 200; setRGBValue1(red,green,blue); setRGBValue2(red,green,blue); } } else if(index == 30) { //슬라이드를 통해 1번 LED 밝기값 조절 while(Serial.available() <=0); //값을 받을 때까지 대기 brs1 = Serial.read(); setRGBValue1((red*brs1)/100,(green*brs1)/100,(blue*brs1)/100); } else if(index == 40) { //슬라이드를 통해 2번 LED 밝기값 조절 while(Serial.available() <=0); //값을 받을 때까지 대기 brs2 = Serial.read(); setRGBValue2((red*brs2)/100,(green*brs2)/100,(blue*brs2)/100); } } } void setRGBValue1(int R, int G, int B) { //1번 LED 밝기 세팅 analogWrite(r1,R); analogWrite(g1,G); analogWrite(b1,B); } void setRGBValue2(int R, int G, int B) { //2번 LED 밝기 세팅 analogWrite(r2,R); analogWrite(g2,G); analogWrite(b2,B); }
수박쨈