ON /OFF 블루투스 시스템을 넣고싶습니다. 여기서 참고할만한 자료가 있을까요?
#include "DHT.h" // DHT11를 사용하기 위한 라이브러리 호출하기
#include <Servo.h> // 서보모터를 사용하기 위한 라이브러리 호출하기
#include <LiquidCrystal_I2C.h> // I2C LCD를 사용하기 위한 라이브러리 호출하기
#include <Servo.h>
Servo blind;
LiquidCrystal_I2C TV(0x27, 16, 2); // I2C LCD를 TV라는 이름으로 선언
// 온습도 센서를 디지털 3번 핀에 연결합니다.
#define DHTPIN 3
#define DHTTYPE DHT11
int servo = 6; // 서보모터를 오렌지보드 A0번에 연결
int tempo = 200; // 멜로디의 음 길이 설정
int flag1 = 1; // 블라인드의 상태를 저장하는 변수
int trig = 11;
int echo = 10;
int led = 2;
int C = 1047; // 도
int D = 1175; // 레
int E = 1319; // 미
int F = 1397; // 파
int G = 1568; // 솔
int A = 1760; // 라
int B = 1976; // 시
int piezoPin = 2; // 피에조 부저의 +극을 오렌지보드 2번에 연결
int airCon = 12; // RGB LED의 파란색 핀을 디지털 9번 연결
int cdsPin = A0; // 조도센서를 오렌지보드 A0번에 연결
int note[] = {4186, 4698, 5274, 5587, 6271};
int notes[25] = { G, G, A, A, G, G, E, G, G, E, E, D, G, G, A, A, G, G, E, G, E, D, E, C };
int notex[] = {6900, 4906, 6900, 4906, 6900};
int irPin = 5; // 적외선 장애물 센서를 오렌지보드 6번에 연결
// 가까울 시 울릴 경보의 멜로디 작성
boolean flag = 0;
int Flag;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// 시리얼 통신을 위해 통신속도(Baudrate)를 9600으로 설정
Serial.begin(9600);
dht.begin();
pinMode(piezoPin, OUTPUT); // 피에조 핀을 출력핀으로 설정
pinMode(airCon, OUTPUT); // 3색 LED중 파란색 핀을 출력핀으로 설정
pinMode(irPin, INPUT); // 적외선 장애물 센서 핀을 입력핀으로 설정
TV.init(); // I2C LCD의 기본 설정
TV.backlight(); // I2C LCD의 백라이트를 켜줌
TV.setCursor(0, 0); // I2C LCD의 커서위치를 0, 0으로 설정(첫번째 줄, 첫번째 칸)
TV.print("Looking TV...."); // I2C LCD에 "Looking TV...." 메세지 출력
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
pinMode(piezoPin, OUTPUT); // 피에조 핀을 출력핀으로 설정
blind.attach(servo); // 서보모터를 6번핀에 연결
blind.write(80); // 서보모토의 기본값을 80도로 설정
}
void loop() {
// 온습도센서로 온도와 습도값 측정
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature) ) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 측정된 온도, 습도값으로 불쾌지수 값 계산 후 시리얼 모니터에 출력
float discomfortIndex = (1.8 * temperature) - (0.55 * (1 - humidity / 100.0) * (1.8 * temperature - 26)) + 32;
Serial.println(discomfortIndex);
// 불쾌지수값이 70보다 높을 경우
if (discomfortIndex >= 80) {
// 에어콘(파란색 LED)를 켜주면서 멜로디를 재생
digitalWrite(airCon, HIGH);
if (flag == 0) {
for (int i = 0; i < 5; i++) {
tone(piezoPin, note[i], 300);
delay(150);
}
flag = 1;
}
}
else {
// 에어콘(파란색 LED)를 끔
digitalWrite(airCon, LOW);
flag = 0;
}
delay(300);
int cdsVal = analogRead(cdsPin);
Serial.println(cdsVal);
// 날이 밝으면(빛이 밝아지면)
if (cdsVal < 400) {
// 현재 블라인드가 올라가있으면
if (flag == 0) {
// 멜로디를 출력하고
for (int i = 12; i < 25; i++) {
tone(piezoPin, notes[i], tempo);
delay(300);
}
// 블라인드를 내림
blind.write(180);
// 블라인드가 내려가 있는 상태로 설정
flag1 = 1;
}
}
// 날이 어두우면(빛이 어두워지면)
else {
// 블라인드가 내려가 있으면
if (flag1 == 1) {
// 블라인드를 올림
blind.write(80);
// 블라인드가 올라가 있는 상태로 설정
flag1 = 0;
}
}
delay(300);
// 조도 센서 값 측정 후 시리얼 모니터에 출력
int IRVal = digitalRead(irPin);
Serial.println(IRVal);
// 거리가 가까울 경우
if (IRVal == 0) {
if (Flag == 0) {
// 경보 멜로디를 출력
for (int i = 0; i < 5; i++) {
tone(piezoPin, notex[i], 150);
delay(150);
}
Flag = 1;
}
// TV를 끔
TV.noBacklight();
}
// 거리가 멀 경우
else {
// TV를 킴
TV.backlight();
Flag = 0;
}
delay(100);
digitalWrite(trig, LOW);
digitalWrite(echo, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
unsigned long duration = pulseIn(echo, HIGH);
// 초음파의 속도는 초당 340미터를 이동하거나, 29마이크로초 당 1센치를 이동합니다.
// 따라서, 초음파의 이동 거리 = duration(왕복에 걸린시간) / 29 / 2 입니다.
float distance = duration / 29.0 / 2.0;
// 측정된 거리 값를 시리얼 모니터에 출력합니다.
Serial.print(distance);
Serial.println("cm");
// 측정된 거리가 10cm 이하라면, 아래의 블록을 실행합니다.
if (distance < 5) {
// LED가 연결된 핀의 로직레벨을 HIGH (5V)로 설정하여, LED가 켜지도록 합니다.
digitalWrite(led, HIGH);
}
// 측정된 거리가 10cm 이상이라면, 아래의 블록을 실행합니다.
else {
// LED가 연결된 핀의 로직레벨을 LOW (0V)로 설정하여, LED가 꺼지도록 합니다.
digitalWrite(led, LOW);
}
// 0.2초 동안 대기합니다.
delay(200);
}
|