소스1 -전에 온습도센서의 정보를 저장하도록 하겠습니다. EEPROM은 아두이노에 내부저장소로 전원이 끊어져도 자료가 남습니다.-
#define dht11_pin 14 //Analog port 0 on Arduino Uno
#include<EEPROM.h>
//#define dht11_pin 54 //Analog port 0 on Arduino Mega2560
byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while (!digitalRead(dht11_pin));
delayMicroseconds(30);
if (digitalRead(dht11_pin) != 0 )
bitSet(result, 7-i);
while (digitalRead(dht11_pin));
}
return result;
}
void setup()
{
pinMode(dht11_pin, OUTPUT);
digitalWrite(dht11_pin, HIGH);
Serial.begin(9600);
Serial.println("Ready");
pinMode(8,OUTPUT);
}
void loop()
{
int addr=0; // EEPROM Address
int addr2=513;
int value=0;
int value2=0;
while(1){
byte dht11_dat[5];
byte dht11_in;
byte i;// start condition
digitalWrite(dht11_pin, LOW);
delay(18);
digitalWrite(dht11_pin, HIGH);
delayMicroseconds(1);
pinMode(dht11_pin, INPUT);
delayMicroseconds(40);
if (digitalRead(dht11_pin))
{
Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
delay(1000);
return;
}
delayMicroseconds(80);
if (!digitalRead(dht11_pin))
{
Serial.println("dht11 start condition 2 not met"); //wair for second response signal:HIGH
return;
}
delayMicroseconds(80);// now ready for data reception
for (i=0; i<5; i++)
{ dht11_dat[i] = read_dht11_dat();} //recieved 40 bits data. Details are described in datasheet
pinMode(dht11_pin, OUTPUT);
digitalWrite(dht11_pin, HIGH);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Current humdity = ");
Serial.print(dht11_dat[0], DEC);
Serial.print("% ");
Serial.print("temperature = ");
Serial.print(dht11_dat[2], DEC);
Serial.println("C ");
EEPROM.write(addr,dht11_dat[0]); // 기록
EEPROM.write(addr2,dht11_dat[2]); // 기록
value=EEPROM.read(addr); //읽어오기
value2=EEPROM.read(addr2); // 읽어오기
addr=addr+1;
addr2=addr2+1;
if(addr==512)
addr=0;
if(addr2==1024)
addr2=513;
Serial.print("humdity adress = ");
Serial.print(addr);
Serial.print(" %");
Serial.println(value); // 읽어온값 출력
Serial.print(" temperature = ");
Serial.print(addr2);
Serial.print(" c");
Serial.println(value2); // 읽어온 값 출력
delay(2000); //fresh time
digitalWrite(8,1);
delay(100);
digitalWrite(8,0);
}
}
'작업실 > arduino' 카테고리의 다른 글
아두이노(arduino) - 온습도센서(DHT11)의 정보를 7세그먼트에 출력해보자 (0) | 2015.03.06 |
---|---|
아두이노(arduino) - 온습도센서(DHT11)를 사용해보자 (0) | 2015.03.06 |
아두이노(arduino) - 더블클릭을 인식하는 스위치 [릴리즈 응용] (0) | 2015.03.06 |
아두이노(arduino) - 버튼을 누를때마다 동작이 변하는 LED [3state] (0) | 2015.03.06 |
아두이노(arduino) - 릴리즈 스위치 개선 (0) | 2015.03.06 |