본문 바로가기
임베디드/Arduino

LEDOnOff_DHT11

by sj0020 2020. 8. 21.
#include "DHT.h"
/*
 RXD = 아두이노 2번핀에 연결
 TXD = 아두이노 3번핀에 연결
*/
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(3,2); // (TX, RX)

#define DHTPIN 8   //DHT를 아두이노 8번핀에 연결
#define DHTTYPE DHT11   // DHT 11 모델 사용
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600); //HW Serial. 
  BTSerial.begin(9600); //SW Serial.
  pinMode(9, OUTPUT); // LED를 아두이노 9번에 연결
  Serial.println(F("DHTxx test!"));
  dht.begin();
}

void loop() {
//LED ON, OFF
  if(BTSerial.available()){
    char ch = BTSerial.read();
    Serial.write(ch);
    if (ch =='0'){ //'0'이 BTSerial 일때
      Serial.write("LED OFF\n"); //LED OFF를 시리얼 모니터에 출력
      digitalWrite(9, LOW); //9번 LED를 끔
      }
  else if (ch == '1'){ //'1'이 BTSerial 일때
      Serial.write("LED ON\n"); //LED ON을 시리얼 모니터에 출력
      digitalWrite(9, HIGH); //9번 LED를 켬
      }
  }     

//DHT

  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  //시리얼 모니터 상에 출력
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));

  // BT 전송
  BTSerial.print(F("Humidity: "));
  BTSerial.print(h);
  BTSerial.print(F("%  Temperature: "));
  BTSerial.print(t);
  BTSerial.print(F("°C "));
  BTSerial.print(f);
  BTSerial.print(F("°F  Heat index: "));
  BTSerial.print(hic);
  BTSerial.print(F("°C "));
  BTSerial.print(hif);
  BTSerial.println(F("°F"));
  delay(5000);  // 5초 딜레이. 5초마다 수신하기 위해
}      

폰에서 1 보내면 5초뒤에 라이트켜짐 .  코드가 순차대로 진행되서 마지막 delay(5000) 때문....

이 문제 없애려면 타이머인터럽트 사용해야함

'임베디드 > Arduino' 카테고리의 다른 글

button_led  (0) 2020.09.01
CDS 조도센서 , Potentiometer 가변저항  (0) 2020.08.21
dht11 온도습도  (0) 2020.08.20
가변저항  (0) 2020.08.20
Light 1 ON 0 OFF  (0) 2020.08.20