본문 바로가기

작업실/arduino

아두이노(arduino) - 내부 저장소 (EEPROM)에 정보를 저장하고 읽어보자





소스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);

  }

}