BASIC4MCU | 질문게시판 | 아두이노 조이스틱를 이용한 rgb led 표현 + rgb 출력값 읽어오기
페이지 정보
작성자 나Ks 작성일2022-03-25 18:08 조회1,804회 댓글5건본문
int xpin = A0;
int ypin = A1;
int sw = 9;
int red_pin = 5;
int green_pin = 11;
int blue_pin = 6;
int red = 0;
int green = 0;
int blue = 0;
void show_light(int red, int green, int blue) {
analogWrite(red_pin, red);
analogWrite(green_pin, green);
analogWrite(blue_pin, blue);
}
void setup() {
Serial.begin(9600);
pinMode(red_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(sw, INPUT_PULLUP);
}
void loop() {
int x = analogRead(xpin);
int y = analogRead(ypin);
int z = digitalRead(sw);
int r = analogRead(red);
int g = analogRead(green);
int b = analogRead(blue);
Serial.print("R: ");
Serial.print(r);
Serial.print("G: ");
Serial.print(g);
Serial.print("B: ");
Serial.println(b);
// Serial.println(red);
if (z == 0) {
show_light(255, 255, 0);
}
else {
if (x < 300) {
show_light( 255, 0, 0);
}
if (x > 800) {
show_light(0, 255, 0);
}
if (y < 300) {
show_light(255, 0, 255);
}
if (y > 800) {
show_light(0, 255, 255);
}
}
}
rgb값을 시리얼모니터로 출력하고 싶은데 값이 제대로 나오지 않습니다. 조언 부탁드립니다.
댓글 5
조회수 1,804master님의 댓글
master 작성일
int red=0,green=0,blue=0;
int r=analogRead(red); int g=analogRead(green); int b=analogRead(blue);
analogRead()는 아나로그 핀을 읽어야합니다.
master님의 댓글
master 작성일
int xpin=A0,ypin=A1;
int sw=9;
int red_pin=5,green_pin=11,blue_pin=6;
//
int red=0,green=0,blue=0;
//
void show_light(int red,int green,int blue){
analogWrite(red_pin,red); analogWrite(green_pin,green); analogWrite(blue_pin,blue);
}
//
void setup(){
Serial.begin(9600);
pinMode(red_pin,OUTPUT); pinMode(green_pin,OUTPUT); pinMode(blue_pin,OUTPUT);
pinMode(sw,INPUT_PULLUP);
}
//
void loop(){
int x=analogRead(xpin); int y=analogRead(ypin);
int z=digitalRead(sw);
int r=analogRead(red); int g=analogRead(green); int b=analogRead(blue);
Serial.print("R: "); Serial.print(r);
Serial.print("G: "); Serial.print(g);
Serial.print("B: "); Serial.println(b);
// Serial.println(red);
if(z==0){ show_light(255,255,0); }
else{
if(x<300){ show_light(255,0, 0); } if(x>800){ show_light(0,255, 0); }
if(y<300){ show_light(255,0,255); } if(y>800){ show_light(0,255,255); }
}
}
코드를 정리해서 가독성이 좋아지면 수정이나 디버깅이 좋아집니다.
나Ks님의 댓글
나Ks
int xpin = A0;
int ypin = A1;
int sw = 9;
int red_pin = 5;
int green_pin = 11;
int blue_pin = 6;
void setup() {
Serial.begin(9600);
pinMode(red_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(sw, INPUT_PULLUP);
}
void loop() {
int x = analogRead(xpin);
int y = analogRead(ypin);
int z = digitalRead(sw);
int red = analogRead(red_pin);
int green = analogRead(green_pin);
int blue = analogRead(blue_pin);
Serial.print("R: ");
Serial.print(red);
Serial.print("G: ");
Serial.print(green);
Serial.print("B: ");
Serial.println(blue);
if (z == 0) {
analogWrite(red_pin,255);
analogWrite(green_pin,255);
}
else{
if (x < 300) {
analogWrite(red_pin,map(x,300,0,0,255));
}
if (x > 800) {
analogWrite(green_pin,map(x,800,1023,0,255));
}
if (y < 300) {
analogWrite(blue_pin,map(y,300,0,0,255));
}
if (y > 800) {
analogWrite(blue_pin,map(x,800,1023,0,255));
}
}
}
나Ks님의 댓글
나Ks 작성일
답변 감사합니다. 현재 키트가 없어 키트 받으면 해보겠습니다.
그리고 집에 가면서 같은 코딩 2개 해봤는데 한번 봐주셨으면 좋겠습니다.
나Ks님의 댓글
나Ks 작성일
int xpin = A0;
int ypin = A1;
int sw = 9;
int red_pin = 5;
int green_pin = 11;
int blue_pin = 6;
void setup() {
Serial.begin(9600);
pinMode(red_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(sw, INPUT_PULLUP);
}
void loop() {
int x = analogRead(xpin);
int y = analogRead(ypin);
int z = digitalRead(sw);
int red ;
int green;
int blue ;
if (z == 0) {
red=255;
green=255;
}
else {
red = map(x,0,1023,0,255);
blue=map(y,0,1023,0,255);
}
analogWrite(red_pin,red);
analogWrite(green_pin,green);
analogWrite(blue_pin,blue);
Serial.print("R: ");
Serial.print(red);
Serial.print(" G: ");
Serial.print(green);
Serial.print(" B: ");
Serial.println(blue);
delay(500);
}