// 핀번호 매칭
#define buzzPin 4 // 부저 핀번호
#define lampPin A3 // LED(나중에 220Vac 전등 릴레이 연결)
void setup() {
pinMode(lampPin, OUTPUT);
pinMode(buzzPin, OUTPUT); // 부저에는 자동점멸 RGB LED가 병렬로 연결
}
void loop() {
// (1) 점멸 테스트
digitalWrite(lampPin, HIGH);
digitalWrite(buzzPin, HIGH);
delay(1000);
digitalWrite(lampPin, LOW);
digitalWrite(buzzPin, LOW);
delay(1000);
}
나. 시리얼 통신으로 제어하기
// (2) 시리얼 통신으로 제어
if (Serial.available()) {
inString = Serial.readString();
if(inString == "L0") digitalWrite(lampPin, LOW);
if(inString == "L1") digitalWrite(lampPin, HIGH);
if(inString == "F0") digitalWrite(buzzPin, LOW);
if(inString == "F1") digitalWrite(buzzPin, HIGH);
Serial.println(inString);
가. 회로 연결
나. 소스 코드
#include <SoftwareSerial.h> // Serial 통신 라이브러리
// 핀번호 매칭
#define buzzPin 4 // 부저 핀번호
#define lampPin A3 // LED(나중에 220Vac 전등 릴레이 연결)
// 객체 인스턴스 생성
SoftwareSerial BTSerial(2, 3); // BTSerial(Rx, Tx): Adu-Rx(2)<->BT(Tx), Adu-Tx(3)<->BT(Rx) 연결
// 수신 명령어 변수
String inString = "";
void setup() {
Serial.begin(9600); // 컴퓨터 <--> 아두이노
BTSerial.begin(9600); // 아두이노 <--> 블루투스
pinMode(lampPin, OUTPUT);
pinMode(buzzPin, OUTPUT); // 부저에는 자동점멸 RGB LED가 병렬로 연결
}
void loop() {
...
// (3) 블루투스와 통신(AT, AT+VERSION 등. AT V1.8 명령어 검색)
if (BTSerial.available()) {
Serial.write(BTSerial.read()); //블루투스측 내용을 시리얼모니터에 출력
}
if (Serial.available()) {
BTSerial.write(Serial.read()); //시리얼 모니터 내용을 블루투스측에 WRITE
}
}
도전1
#include <SoftwareSerial.h> // Serial 통신 라이브러리
#include "DHT.h"
#define DHTPIN 8
#define DHTTYPE DHT11 // DHT 11
// 핀번호 매칭
#define buzzPin 4 // 부저 핀번호
#define lampPin A3 // LED(나중에 220Vac 전등 릴레이 연결)
// 객체 인스턴스 생성
SoftwareSerial BTSerial(2, 3); // BTSerial(Rx, Tx): Adu-Rx(2)<->BT(Tx), Adu-Tx(3)<->BT(Rx) 연결
DHT dht(DHTPIN, DHTTYPE);
// 수신 명령어 변수
String inString = "";
// 조도값
int cdsValue = 0;
void setup() {
Serial.begin(9600); // 컴퓨터 <--> 아두이노
BTSerial.begin(9600); // 아두이노 <--> 블루투스
dht.begin();
pinMode(lampPin, OUTPUT);
pinMode(buzzPin, OUTPUT); // 부저에는 자동점멸 RGB LED가 병렬로 연결
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
cdsValue = 1023 - analogRead(A1);
Serial.print("온도 : ");
Serial.print(t);
Serial.print(" 습도 : ");
Serial.print(h);
Serial.print(" 조도 : ");
Serial.println(cdsValue);
String cdsString = String("*B") + String(cdsValue) + String("*");
BTSerial.print(cdsString);
if (BTSerial.available()) {
inString = BTSerial.readString();
if (inString == "L0") {
digitalWrite(lampPin, LOW);
BTSerial.print("*LR100G0B0*");
}
if (inString == "L1") {
digitalWrite(lampPin, HIGH);
BTSerial.print("*LR255G50B50*");
}
if (inString == "F0") digitalWrite(buzzPin, LOW);
if (inString == "F1") digitalWrite(buzzPin, HIGH);
Serial.println(inString);
}
#if 0
if (BTSerial.available()) {
Serial.write(BTSerial.read()); //블루투스측 내용을 시리얼모니터에 출력
}
if (Serial.available()) {
BTSerial.write(Serial.read()); //시리얼 모니터 내용을 블루투스측에 WRITE
}
#endif
}