본문 바로가기

작업실/arduino

아두이노(arduino) - 온습도센서(DHT11)의 정보를 7세그먼트에 출력해보자






소스1 -조금 문제가 있는 소스이지만 나오긴 나옵니다. 왼쪽이 습도 오른쪽이 온도입니다. 그대로 적용은 힘들테니 이런식으로 하는구나 파악하시고 적용하세요-


#define dht11_pin 14 //Analog port 0 on Arduino Uno

//#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(13, OUTPUT);

  pinMode(12, OUTPUT);

  pinMode(11, OUTPUT);

  pinMode(10, OUTPUT);

  pinMode(9, OUTPUT);

  pinMode(8, OUTPUT);

  pinMode(7, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(2, OUTPUT);

  pinMode(1, OUTPUT);

}


void loop()

{

  int num=0; // 몇번째 세그먼트인가

  int count=0;

  int h=0;

  int segment[]={5,4,3,6,2,1}; // 세그먼트 핀 저장

  int tem[6]={0,0,11,0,0,12};

  

  while(1){

    for(int i=0;i<6;i++) // all of

      digitalWrite(segment[i],0);

    digitalWrite(segment[num],1);

    switch(tem[num])

    {

     case 11:f();break;

     case 12:non();break;

     case 0:zero();break;

     case 1:one();break;

     case 2:two();break;

     case 3:three();break;

     case 4:four();break;

     case 5:five();break;

     case 6:six();break;

     case 7:seven();break;

     case 8:eight();break;

     case 9:nine();break;

    }

    delay(2);

    count++;

    

    

    if(count>=1000){ // start

    count=0;

      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 ");


tem[0]=dht11_dat[0]/10;

tem[1]=dht11_dat[0]%10;

tem[3]=dht11_dat[2]/10;

tem[4]=dht11_dat[2]%10;

Serial.println(tem[0]);

Serial.println(tem[1]);

Serial.println(tem[3]);

Serial.println(tem[4]);

    }

    

    

    if(num<6)

      num++;

    else

      num=0;

  }

}


void one(){

  digitalWrite(13,1);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,1);

  digitalWrite(9,1);

  digitalWrite(8,1);

  digitalWrite(7,1);

}


void two(){

  digitalWrite(13,0);

  digitalWrite(12,0);

  digitalWrite(11,1);

  digitalWrite(10,0);

  digitalWrite(9,0);

  digitalWrite(8,1);

  digitalWrite(7,0);

}


void three(){

  digitalWrite(13,0);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,0);

  digitalWrite(9,1);

  digitalWrite(8,1);

  digitalWrite(7,0);

}


void four(){

  digitalWrite(13,1);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,0);

  digitalWrite(9,1);

  digitalWrite(8,0);

  digitalWrite(7,1);

}


void five(){

  digitalWrite(13,0);

  digitalWrite(12,1);

  digitalWrite(11,0);

  digitalWrite(10,0);

  digitalWrite(9,1);

  digitalWrite(8,0);

  digitalWrite(7,0);

}


void six(){

  digitalWrite(13,0);

  digitalWrite(12,1);

  digitalWrite(11,0);

  digitalWrite(10,0);

  digitalWrite(9,0);

  digitalWrite(8,0);

  digitalWrite(7,0);

}


void seven(){

  digitalWrite(13,0);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,1);

  digitalWrite(9,1);

  digitalWrite(8,0);

  digitalWrite(7,1);

}


void eight(){

  digitalWrite(13,0);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,0);

  digitalWrite(9,0);

  digitalWrite(8,0);

  digitalWrite(7,0);

}


void nine(){

  digitalWrite(13,0);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,0);

  digitalWrite(9,1);

  digitalWrite(8,0);

  digitalWrite(7,0);

}


void zero(){

  digitalWrite(13,0);

  digitalWrite(12,0);

  digitalWrite(11,0);

  digitalWrite(10,1);

  digitalWrite(9,0);

  digitalWrite(8,0);

  digitalWrite(7,0);

}


void f(){

  digitalWrite(13,0);

  digitalWrite(12,1);

  digitalWrite(11,1);

  digitalWrite(10,0);

  digitalWrite(9,0);

  digitalWrite(8,0);

  digitalWrite(7,1);

}


void c(){

  digitalWrite(13,0);

  digitalWrite(12,1);

  digitalWrite(11,1);

  digitalWrite(10,1);

  digitalWrite(9,0);

  digitalWrite(8,0);

  digitalWrite(7,0);

}

void non(){

  digitalWrite(13,1);

  digitalWrite(12,1);

  digitalWrite(11,1);

  digitalWrite(10,1);

  digitalWrite(9,1);

  digitalWrite(8,1);

  digitalWrite(7,1);

}