아두이노

아두이노 _ 블루투스 응용

IT아메리카노 2021. 8. 15. 17:11

안녕하세요~ 아두이노 블루투스를 이용한 RGB 수치를 LCD 모듈에 연결하여 

수치를 나타내는 작업입니다!

 

기본적인 RGB 모듈을 안드로이드 블루투스로 연결하여 색을 지정할수있습니다.

안드로이드 폰 내부 RGB 어플
LCD 모듈 RGB 수치 출력
REG 수치에 따른 확인

--코드--

//lcd에 rgb모듈을 이용하여 lcd에 값 표현하기

#include <SoftwareSerial.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>



// 블루투스 연결 S

oftwareSerial BTSerial(2,3);

LiquidCrystal_I2C lcd(0x27,16,2);

byte buffer[256]; // 데이터 수신 버퍼

int bufferPosition; // 버퍼에 기록할 위치



// RED LED와 디지털 11 핀 연결
const int RED_PIN = 11; 
// GREEN LED와 디지털 10 핀 연결
const int GREEN_PIN = 10; 
// BLUE LED와 디지털 9 핀 연결
const int BLUE_PIN = 9;

boolean redState = 0;
 boolean blueState = 0; 
boolean greenState = 0; 
int redLight = 0; 
int greenLight = 0; 
int blueLight = 0;
 // 각 색상의 값을 저장 한다. 
//setup 함수는 스케치가 시작될 때 한번만 실행
 void setup() {
 //11번 핀을 출력으로 설정 
pinMode(RED_PIN, OUTPUT);
 //10번 핀을 출력으로 설정 
pinMode(GREEN_PIN, OUTPUT);
 //9번 핀을 출력으로 설정
 pinMode(BLUE_PIN, OUTPUT); 
bufferPosition = 0; 
Serial.begin(9600); 
BTSerial.begin(9600); 
lcd.init(); lcd.begin(16,2); 
cd.backlight();
 lcd.print("NAME!"); 
delay(2000); lcd.clear(); 


//loop 함수는 전원이 꺼질 때까지 반복실행 
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 == '\n' || data == 'x') // 명령이 다 들어왔을 경우 버퍼 위치를 초기화 합니다. 

bufferPosition = 0; 
 } 


char buf[20];
 snprintf(buf,sizeof(buf),"R:%3dG:%3dB:%3d",redLight,greenLight,blueLight);
 lcd.setCursor(0,0);
 lcd.print(buf); 
// 입력이 완료되면 temp값 초기화 
}

 void lightOn() { // 3개의 LED 밝기를 조절 하는 함수 
analogWrite(RED_PIN ,redLight); 
analogWrite(BLUE_PIN,blueLight); 
analogWrite(GREEN_PIN,greenLight); 


void setState(boolean red, boolean blue, boolean green) { // 3개의 LED의 상태를 저장하는 함수
 redState = red; 
greenState = green; 
blueState = blue; 


void setLight(int red,int blue,int green) { // 입력 받은 LED의 밝기를 저장 하는 함수
redLight = red; 
blueLight = blue; 
greenLight = green; 
}

728x90
반응형
LIST