소스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);
}
'작업실 > arduino' 카테고리의 다른 글
아두이노(arduino) - 내부 저장소 (EEPROM)에 정보를 저장하고 읽어보자 (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 |