BASIC4MCU | 질문게시판 | 아두이노 온습도 코딩 질문있습니다
페이지 정보
작성자 아주르 작성일2020-10-16 18:43 조회3,917회 댓글1건본문
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//#include <Wire.h> //Wire 헤더파일 호출
int R_LED = 2;
int G_LED = 3;
char HUMI_Sensor = A0; //2번 핀에 센서 연결
int Sensor_val; //센서 ADC값 저장 변수
byte dht11_dat[5]; //센서 변수
byte dht11_in; //센서 변수
byte i;
byte read_dht11_dat() //센서 모듈 값 읽어오는함수
{
byte i = 0; //for문 변수
byte result=0; //리턴 변수
for(i=0; i< 8; i++) //for문 8번 반복
{
while (!digitalRead(HUMI_Sensor)); //센서 값이 1이 될 때까지 무한루프
delayMicroseconds(30); //30㎲ 대기
if (digitalRead(HUMI_Sensor) != 0 ) //센서 값이 0이 아니면
bitSet(result, 7-i); //bitSet(n,x): n이라는 변수에 x번째의 비트 ON
while (digitalRead(HUMI_Sensor)); //센서 값이 0이 될 때까지 무한루프
}
return result; //result의 값을 리턴
}
void setup() //초기화
{
Serial.begin(9600); //시리얼 통신속도를 9600 baud로 설정
pinMode(HUMI_Sensor, OUTPUT); //센서 연결 핀을 출력으로 설정
pinMode(R_LED, OUTPUT);
pinMode(G_LED, OUTPUT);
digitalWrite(HUMI_Sensor, HIGH); //센서 연결 핀의 출력 값을 HIGH로 입력
lcd.begin();
lcd.backlight();
}
void loop() //무한루프 (센서를 이용해서 온도와 습도를 측정해서 모니터에 표시한다.)
{
digitalWrite(HUMI_Sensor, LOW); //센서 연결 핀의 출력 값을 LOW로 입력
delay(18); //18ms만큼 지연
digitalWrite(HUMI_Sensor, HIGH); //센서 연결 핀의 출력 값을 HIGH로 입력
delayMicroseconds(5); //5us 만큼 지연
pinMode(HUMI_Sensor, INPUT); //센서 연결 핀을 입력으로 설정
delayMicroseconds(200); //200us 만큼 지연
for (i=0; i<5; i++) //5bytes (40bits)의 데이터를 수신
{
dht11_dat[i] = read_dht11_dat();
}
pinMode(HUMI_Sensor, OUTPUT); //센서 연결 핀을 출력으로 설정
digitalWrite(HUMI_Sensor, HIGH); //센서 연결 핀의 출력 값을 HIGH로 입력
byte dht11_check_sum = dht11_dat[0]+dht11_dat[2]; //체크섬 (checksum) 확인
Serial.print("Humidity = ");
Serial.print(dht11_dat[0], DEC); //시리얼 통신으로 터미널에 습도 값 출력
Serial.println('%'); //시리얼 통신으로 터미널 프로그램에 % 출력
Serial.print("Temperature = ");
Serial.print(dht11_dat[2], DEC); //시리얼 통신으로 터미널에 온도 값 출력
Serial.println('C'); //시리얼 통신으로 터미널 프로그램에 C 출력
lcd.setCursor(0,0);
lcd.print("HUMI == ");
lcd.print(dht11_dat[0]);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("TEMP = ");
lcd.print(dht11_dat[2]);
lcd.print("C");
delay(2000); //2초간 지연
}
온습도 값에 따라 LED를 제어하고 싶은데 전혀 모르겠습니다 도와주시면 감사하겠습니다.. 설명이 힘들거나 귀찮으시다면 설명이 없어도 되니 도와주십시요..
댓글 1
조회수 3,917master님의 댓글
master 작성일
dht11_dat[0] 습도
dht11_dat[2] 온도
위 변수에 습도와 온도 값이 들어있죠?
if(dht11_dat[0]>50)digitalWrite(R_LED,1); // 습도가 50% 이상이면 적색LED ON
else digitalWrite(R_LED,0); // 아니면 적색LED OFF
if(dht11_dat[2]<30)digitalWrite(G_LED,1); // 온도가 30도 이하면 녹색LED ON
else digitalWrite(G_LED,0); // 아니면 녹색LED OFF
루프문 제일아래 딜레이 바로 앞에 추가하세요