Re: DHT22+Relay를 이용한 온습도측정 및 전원제어
Makerist
예제&실습
0
620
2024.05.19 08:43
아래는const가아닌 #define을 사용하여 동일한 코드를 작성한 예제입니다. 오타나 오류가 있을 수 있습니다.
#include <DHT.h> #define DHTPIN 2 // DHT22 데이터 핀 #define DHTTYPE DHT22 // DHT 타입 #define RELAYPIN 3 // 릴레이 모듈 핀 #define INTERVAL 28800000UL // 8시간(밀리초 단위) DHT dht(DHTPIN, DHTTYPE); unsigned long previousMillis = 0; bool relayState = false; // 릴레이 상태 (true: 켜짐, false: 꺼짐) void setup() { Serial.begin(9600); dht.begin(); pinMode(RELAYPIN, OUTPUT); digitalWrite(RELAYPIN, LOW); // 처음에는 릴레이를 끈 상태로 설정 } void loop() { unsigned long currentMillis = millis(); // DHT22 센서 값 읽기 float h = dht.readHumidity(); float t = dht.readTemperature(); // 릴레이 상태 출력 Serial.print("릴레이 상태: "); Serial.print(relayState ? "켜짐" : "꺼짐"); Serial.print("t"); // 온습도 값 출력 if (isnan(h) || isnan(t)) { Serial.println("센서에서 데이터를 읽을 수 없습니다."); } else { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); } // 경과 시간이 8시간(밀리초) 이상일 때마다 릴레이 상태 변경 if (currentMillis - previousMillis >= INTERVAL) { previousMillis = currentMillis; relayState = !relayState; // 릴레이 상태 토글 digitalWrite(RELAYPIN, relayState ? HIGH : LOW); // 릴레이 상태 적용 Serial.println(relayState ? "릴레이가 켜졌습니다." : "릴레이가 꺼졌습니다."); } delay(2000); // 2초 대기 (센서 읽기 간격) }