標題:
基于Mega4809 Curiosity Nao 開發(fā)板的溫濕度測量
[打印本頁]
作者:
jinglixixi
時間:
2020-8-25 12:05
標題:
基于Mega4809 Curiosity Nao 開發(fā)板的溫濕度測量
DHT22是一款數(shù)字式溫濕度傳感器,它采用單總線方式工作。為此,在使用時需占用一個I/O口,來進行信息的收發(fā)處理,這里選用PF2來完成。
為進行溫濕度的檢測與顯示,對引腳的配置如圖1所示。
1.jpg
(24.72 KB, 下載次數(shù): 52)
下載附件
2020-8-25 12:04 上傳
圖1引腳配置
DHT22的初始化函數(shù)為:
unsigned char DHT22_Init(void)
{
DHT22_Rst();
return DHT22_Check();
}
復(fù)制代碼
讀取DHT22溫濕度的函數(shù)為:
unsigned char DHT22_Read_Data(unsigned int *temp,unsigned int *humi)
{
unsigned char buf[5];
unsigned char i;
DHT22_Rst();
if(DHT22_Check()==0)
{
for(i=0;i<5;i++)
{
buf[i]=DHT22_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=(buf[0]*256+buf[1]);
*temp=(buf[2]*256+buf[3]);
}
}else return 1;
return 0;
}
復(fù)制代碼
相應(yīng)的數(shù)值顯示函數(shù)為:
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len)
{
uint8_t t,temp;
uint8_t enshow=0;
uint8_t size2=16;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size2/2)*t,y,' ');
continue;
}else enshow=1;
}
OLED_ShowChar(x+(size2/2)*t,y,temp+'0');
}
}
復(fù)制代碼
實現(xiàn)溫濕度顯示的主程序為:
int main(void)
{
unsigned char senflag;
/* Initializes MCU, drivers and middleware */
SYSTEM_Initialize();
OLED_Init();
OLED_CLS();
OLED_P8x16Str(0,0,"ATmega4809");
OLED_P8x16Str(0,2,"OLED Display");
OLED_P8x16Str(0,4,"T= . C H= . %");
DELAY_milliseconds(100);
senflag=DH22_Init();
/* Replace with your application code */
while (1){
if(senflag)
{
OLED_P8x16Str(64,0," SEN OK!");
DHT22_Read_Data(&temperature,&humidity);
OLED_ShowNum(16,4,temperature/10,2);
OLED_ShowNum(40,4,temperature%10,1);
OLED_ShowNum(80,4,humidity/10,2);
OLED_ShowNum(104,4,humidity%10,1);
}
else
{
OLED_P8x16Str(64,0," NO SEN!");
}
//PORTF_toggle_pin_level(5);
LED_Toggle();
DELAY_milliseconds(1000);
}
}
復(fù)制代碼
經(jīng)編譯下載,其運行效果如圖2所示。
2.jpg
(18.78 KB, 下載次數(shù): 50)
下載附件
2020-8-25 12:04 上傳
圖2 溫濕度顯示
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1