진한프로젝트:온, 습도계
편집하기 (부분)
둘러보기로 이동
검색으로 이동
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
== 코드 == <syntaxhighlight lang="c++"> // 온습도계 관련 정의. #include "DHT.h" #define DHTPIN1 2 // 첫 번째 DHT 센서 핀 설정. #define DHTPIN2 3 // 두 번째 DHT 센서 핀 설정. #define DHTTYPE DHT22 // DHT22 센서를 사용 DHT dht1(DHTPIN1, DHTTYPE); // DHT 객체 생성 DHT dht2(DHTPIN2, DHTTYPE); float humidity1; // 각 센서의 습도값 저장할 변수. float humidity2; float temperature1; // 온도값. float temperature2; // 지난시간 관련. unsigned long startTime; // 분유 먹인 시간 저장. // WIFI. #include <WiFi.h> #include <WiFiUdp.h> #include <NTPClient.h> #include <time.h> const char* ssid = "kwsh"; const char* password = "khsh9700#"; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); // LCD 관련 정의. #include <LiquidCrystal.h> // 관련 라이브러리. LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD panel에서 사용되는 핀 선택. int lcd_key = 0; // 들어온 키 값을 해석한 값을 담을 변수. int lcd_key_in = 0; // LCD에서 들어오는 키 값을 담을 변수. // 밝기조절 관련. const int lcd_backlightPin = 10; // 제품별로 핀 달라짐. int brightness = 128; // 초기 밝기. void setup() { Serial.begin(9600); // 시리얼 통신을 사용하기 위해 보드레이트를 9600으로 설정합니다. lcd.begin(16, 2); // LCD 초기화. pinMode(lcd_backlightPin, OUTPUT); dht1.begin(); dht2.begin(); WiFi.begin(ssid, password); // WiFi 연결 시도 while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi network"); // 시간관련모듈. timeClient.begin(); timeClient.setTimeOffset(32400); // 서울 시간(UTC+9)으로 변환하기 위한 오프셋 설정 } void loop() { lcd_key = read_LCD_buttons(); // 들어온 버튼을 해석한다. lcd.setCursor(0, 0); // LCD 시작점 지정. switch (lcd_key) { case 1: { // 상 brightness = min(brightness + 10, 255); // 255로 제한. analogWrite(lcd_backlightPin, brightness); // 조정된 밝기 값을 적용합니다. delay(500); // 버튼이 한번만 눌리게끔. break; } case 2: { // 하 brightness = min(brightness - 10, 255); // 255로 제한. analogWrite(lcd_backlightPin, brightness); // 조정된 밝기 값을 적용합니다. delay(500); // 버튼이 한번만 눌리게끔. break; } case 3: { // 좌 lcd.print("좌"); break; } case 4: { // 우 break; } case 5: { // 선택 startTime = millis(); // 새로 시작. break; } case 0: { // 버튼 눌림 없음. unsigned long elapsedSeconds = (millis() % 60000) / 1000; elapsedSeconds = elapsedSeconds /3; // n초마다 변경을 설정하기 위해. int functionIndex = elapsedSeconds % 3; // 3가지 함수를 보여줄 거라서. switch (functionIndex) { case 0: show_humid_temp(); break; case 1: show_Discomfort(); break; case 2: show_elapsedTime(); break; } break; } } // lcd.clear(); 를 쓰면 문자가 점멸해서;; 불편; 차라리 덮어씌우는 전략으로...! } void show_humid_temp(){ humidity1 = dht1.readHumidity(); temperature1 = dht1.readTemperature(); lcd.print("H1:"); lcd.print(humidity1,1); lcd.print(",T1:"); lcd.print(temperature1,1); humidity2 = dht2.readHumidity(); temperature2 = dht2.readTemperature(); lcd.setCursor(0, 1); // 두 번째 줄로 이동. lcd.print("H2:"); lcd.print(humidity2, 1); lcd.print(",T2:"); lcd.print(temperature2, 1); Serial.print("온습도센서점검"); Serial.print(humidity1); Serial.println(humidity2); } void show_elapsedTime() { // 특정 시간으로부터 지난 시간 알려주기. // 현재시간 띄우기. timeClient.update(); String fromattedTime = timeClient.getFormattedTime(); lcd.print("Now: "); lcd.print(fromattedTime.substring(0,2)); lcd.print(":"); lcd.print(fromattedTime.substring(3,5)); lcd.print(" "); unsigned long currentTime = millis(); // 현재시간 // 경과 시간 계산 (밀리초 단위) unsigned long elapsedTime = currentTime - startTime; // 경과 시간을 시, 분, 초 단위로 변환 unsigned long elapsedHours = elapsedTime / 3600000; unsigned long elapsedMinutes = (elapsedTime % 3600000) / 60000; // 표시 lcd.setCursor(0, 1); // 두 번째 줄로 이동. lcd.print("after "); lcd.print(elapsedHours); lcd.print(":"); if (elapsedMinutes < 10) { lcd.print("0"); // 분이 한 자리일 때 앞에 0 추가 } lcd.print(elapsedMinutes); lcd.print(" "); } int read_LCD_buttons() { // 입력신호를 해석할 함수. lcd_key_in = analogRead(0); // 센서에서 들어온 값을 읽는다. // 상하좌우, 선택 순으로 인덱스를 지정한다. if (lcd_key_in > 1000) return 0; // 입력이 없는 경우. if (lcd_key_in > 700) return 5; // 선택버튼. if (lcd_key_in > 450) return 3; // 좌 if (lcd_key_in > 300) return 2; // 하 if (lcd_key_in > 100) return 1; // 상 return 4; // 우 } void show_Discomfort(){ lcd.print("Discomfort:"); lcd.print(calculateDiscomfortIndex(temperature1, humidity1)); lcd.setCursor(0, 1); lcd.print("Discomfor2:"); lcd.print(calculateDiscomfortIndex(temperature2, humidity2)); } float calculateDiscomfortIndex(float temperature, float humidity) { // 불쾌지수 계산 공식 return 0.81 * temperature + 0.01 * humidity * (0.99 * temperature - 14.3) + 46.3; } </syntaxhighlight> [[분류:아두이노 프로젝트]]
요약:
학교의 모든 지식. SMwiki에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
학교의 모든 지식. SMwiki:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기 메뉴
개인 도구
로그인하지 않음
토론
기여
로그인
이름공간
문서
토론
한국어
보기
읽기
편집
원본 편집
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보