// 온습도========================
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
float Hum = 0; // 측정습도
float Temp = 0 ; //측정온도
float SHumup = 0; //설정한 습도 최대값
float SHumdw = 0; //설정한 습도 최소값
float STempup = 0; //설정한 온도 최대값
float STempdw = 0; // 설정한 온도 최소값
float Wind = 0; //환기
float Heater = 0; //히터
// 화면=================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//LED===================
float RedLED = 0, GreenLED = 0, BlueLED = 0;
float LEDoff = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("안녕하세요. 지금부터 시스템을 시작합니다.");
pinMode(8, OUTPUT); // 파
pinMode(9, OUTPUT); //초
pinMode(10, OUTPUT); //빨
pinMode(7, OUTPUT); //히터
pinMode(6, OUTPUT); // 환풍기
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Hello Arduino123");
lcd.setCursor(0,1);
lcd.print("LCD Display Test");
}
void loop() {
// put your main code here, to run repeatedly:
//LED 지정 -----------------------------------------
analogWrite(10,RedLED);
analogWrite(9, GreenLED);
analogWrite(8, BlueLED);
// 모두 끄기 버전 1. 변수와 합차 활
if (LEDoff >= 1){
RedLED = 0;
GreenLED = 0;
BlueLED = 0;
LEDoff = 0;
}
//온습도 센서. 핀 7,6 사용------------------------------------------------------
// 온도, 습도 지정 코드 필요.
// 환풍기, 히터 강도 실험과 설정 필요.
// 환풍기, 히터 유지 시간과 조건 설정 필요
float Hum = dht.readHumidity();
float Temp = dht.readTemperature();
// if(isnan(Hum) || isnan(Temp)) {
// Serial.println("온습도 센서에서 오류가 발생하였습니다.");
// return;
// } //시뮬레이션은 계속 오류나서 잠시 꺼둠
if (Hum >= SHumup || Wind >= 1 || Temp >= STempup){
if (Hum >= SHumup){
Serial.println("현재 습도가 지정된 습도보다 높습니다.");
}
else if (Temp >= STempup){
Serial.println("현재 온도가 지정된 온도보다 높은 편입니다.");
}
digitalWrite(6, HIGH);
Serial.println("환풍기를 작동합니다.");
}
if (Temp <= STempdw || Heater >= 1){
if (Temp <= STempdw){
Serial.println("현재 온도가 지정된 온도보다 낮습니다.");
}
Serial.println("전열기를 작동합니다.");
analogWrite(7, 11);
}
//LCE 화면 ---------------------------------------
//온습도 센서랑 연결, 수치 띄우기.
// 버튼으로 설정 조작 나타내기. 수동 조작 시 현재 상태 나타내기.
// 시간 센서
////시험중....--------------------------------통신을 이용한 조작
// 이걸 if문 하나에 세트로 두는게 낫나? 아님 if문을 여러개 만들어? 역할별로
if (Serial.available()){
long inside = Serial.parseInt();
if (inside >= 1000 && inside < 2000){
//1000은 LED 수치 조절.--------------------------------------
//1. 빨강, 2. 초록, 3. 파랑, 4. off, 5. 모두
if (inside < 1100){
Serial.println("붉은색 LED를 조절합니다.");
RedLED = (inside - 1000)*2.25;
}
else if (inside < 1200 && inside >=1100){
Serial.println("초록색 LED를 조절합니다.");
GreenLED = (inside - 1000)*2.25;
}
else if (inside < 1300 && inside >=1200){
Serial.println("푸른색 LED를 조절합니다.");
BlueLED = (inside - 1000)*2.25;
}
else if (inside < 1400 && inside >=1300){
Serial.println("LED를 모두 끕니다.");
LEDoff = 1;
}
else if (inside < 1500 && inside >=1400){
Serial.println("모든 LED를 조작합니다.");
RedLED = (inside - 1000)*2.25;
GreenLED = (inside - 1000)*2.25;
BlueLED = (inside - 1000)*2.25;
}
inside = 0;
}
else if (inside >= 2000 && inside < 3000){
//온습도 관리 : 2000~---------------------------------------------
//1. 확인, 2. 온도 수정, 3. 습도수정, 4. 환기, 5. 히터
if (inside < 2100){
Serial.println("현재 측정된 온도&습도입니다.");
Serial.print(Hum);
Serial.println("%");
Serial.print(Temp);
Serial.println("C");
}
else if (inside < 2200 && inside >=2100){
Serial.println("원하시는 온도 범위를 입력하세요.");
Serial.print("설정하신 값이 ");
Serial.print(STempup);
Serial.print("C ~ ");
Serial.print(STempdw);
Serial.println("C 가 맞습니까?");
}
}
else if (inside >= 3000 && inside < 4000){
// LCE 화면 관리????
// 아이콘 변경, 나오는 정보 변경, 메모 입력
if (inside < 3100){
}
}
}
}