안녕하세요~ 아두이노 블루투스를 이용한 RGB 수치를 LCD 모듈에 연결하여
수치를 나타내는 작업입니다!
기본적인 RGB 모듈을 안드로이드 블루투스로 연결하여 색을 지정할수있습니다.
--코드--
//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;
}
'아두이노' 카테고리의 다른 글
아두이노 프로젝트(스마트카트) (0) | 2021.08.15 |
---|---|
아두이노 초음파센서를 이용한 거리측정 (0) | 2021.08.15 |
아두이노 RFID 모듈 (0) | 2021.08.15 |
아두이노 우노를 이용한 멀티탭 제어 (0) | 2021.08.15 |