找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2167|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

stm32溫濕度報(bào)警器藍(lán)牙模塊錯(cuò)誤

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:672497 發(fā)表于 2020-1-7 18:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
上位機(jī)一直收到藍(lán)牙發(fā)送  AT  
oled顯示屏也只顯示溫度濕度漢字而不顯示溫濕度的數(shù)據(jù)
但是我編譯的時(shí)候也沒(méi)有報(bào)錯(cuò)
求求各位大佬幫我看看哪里有問(wèn)題
下面是主函數(shù)

int main(void)
{
        u8 t=0;                           
        u8 temperature;              
        u8 humidity;
        u8 reclen=0;
  int tmp;         
        usart_init(9600);
         BEEP_Init();//蜂鳴器初始化
        delay_init();                           //延時(shí)初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
        DHT11_Init();//dht11初始化
        OLED_Init();                    //初始化OLED
  initial_olcd();                  //初始化
        usmart_dev.init(72);         //初始化USMART        
        clear_screen();                        //清屏        
        disp_string_8x16_16x16(1,1,"溫度:");
        disp_string_8x16_16x16(3,1,"濕度:");
        delay_ms(1000);                        //等待藍(lán)牙模塊上電穩(wěn)定
         while(HC05_Init())                 //初始化ATK-HC05模塊  
        {
                delay_ms(200);

        }        
        USART_RX_STA=0;        
            
         while(1)         
        
        {        
                if(t%10==0)                        //每100ms讀取一次
                {                                                                          
                        DHT11_Read_Data(&temperature,&humidity);        //讀取溫濕度值
                        display_number_16x8(1,46,temperature);
                        display_number_16x8(3,46,humidity);
                        u1_printf("%d %d\r\n",temperature,humidity);                //發(fā)送到藍(lán)牙模塊
                tmp=(int)temperature;
                                if((tmp<=10) || (tmp>=25))
                {
                        beep = !beep;
      led2 = 1;
                }
                else
                {
                        beep = 0;
      led2 = 0;
                }
    delay_ms(50);
               
                if(USART_RX_STA&0X8000)                        //接收到一次數(shù)據(jù)了
                {
               
                           reclen=USART_RX_STA&0X7FFF;        //得到數(shù)據(jù)長(zhǎng)度
                          USART_RX_BUF[reclen]=0;                 //加入結(jié)束符
                        if(reclen==9||reclen==8)                 //控制DS1檢測(cè)
                        {
                                if(strcmp((const char*)USART_RX_BUF,"關(guān)閉報(bào)警器")==0);        //關(guān)閉蜂鳴器
                {
                                beep = 0;
                        }
                }
                         USART_RX_STA=0;         
//                disp_string_8x16_16x16(5,1,USART_RX_BUF);
                }                                                                                                                                                                        

        }
        delay_ms(10);
                t++;
                if(t==20)
                {
                        t=0;
                }
                        
                                          
                 delay_ms(10);
                t++;
                if(t==20)
                {
                        t=0;
                }
        }

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:222006 發(fā)表于 2020-1-7 20:56 | 只看該作者
         while(HC05_Init())                 //初始化ATK-HC05模塊           {                 delay_ms(200);          }    看看是不是卡在初始化這一步了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:222006 發(fā)表于 2020-1-7 20:58 | 只看該作者
反復(fù)調(diào)試一下,應(yīng)該是藍(lán)牙AT沒(méi)配好。
回復(fù)

使用道具 舉報(bào)

地板
ID:405033 發(fā)表于 2020-1-7 23:56 | 只看該作者
能否說(shuō)明一下是哪里出現(xiàn)問(wèn)題了,藍(lán)牙接收到數(shù)據(jù),但是溫濕度模塊沒(méi)有測(cè)到數(shù)據(jù)?
回復(fù)

使用道具 舉報(bào)

5#
ID:672497 發(fā)表于 2020-1-8 10:02 | 只看該作者
闊愛(ài)的釗釗 發(fā)表于 2020-1-7 20:56
while(HC05_Init())                 //初始化ATK-HC05模塊           {                 delay_m ...

u8 HC05_Init(void)
{
u8 retry=10,t;      
u8 temp=1;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PORTA

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;     // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉輸入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);      //根據(jù)設(shè)定參數(shù)初始化A15
  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;     // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);      //根據(jù)設(shè)定參數(shù)初始化GPIOA4
GPIO_SetBits(GPIOA,GPIO_Pin_4);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
HC05_KEY=1;
HC05_LED=1;

usart_init(9600); //初始化串口1為:9600,波特率.

while(retry--)
{
  HC05_KEY=1;     //KEY置高,進(jìn)入AT模式
  delay_ms(10);
  printf("AT\r\n");  //發(fā)送AT測(cè)試指令
  HC05_KEY=0;     //KEY拉低,退出AT模式
  for(t=0;t<10;t++)    //最長(zhǎng)等待50ms,來(lái)接收HC05模塊的回應(yīng)
  {
   if(USART_RX_STA&0X8000)break;
   delay_ms(5);
  }  
  if(USART_RX_STA&0X8000) //接收到一次數(shù)據(jù)了
  {
   temp=USART_RX_STA&0X7FFF; //得到數(shù)據(jù)長(zhǎng)度
   USART_RX_STA=0;   
   if(temp==4&&USART_RX_BUF[0]=='O'&&USART_RX_BUF[1]=='K')
   {
    temp=0;//接收到OK響應(yīng)
    break;
   }
  }         
}      
if(retry==0)temp=1; //檢測(cè)失敗
return temp;   
}  
這是藍(lán)牙初始化的程序  我感覺(jué)是那個(gè)循環(huán)語(yǔ)句一直在循環(huán),但是我程序不變的時(shí)候又有一兩次可以正確運(yùn)行。。。。。。。
回復(fù)

使用道具 舉報(bào)

6#
ID:672497 發(fā)表于 2020-1-8 10:07 | 只看該作者
瘋子本人 發(fā)表于 2020-1-7 23:56
能否說(shuō)明一下是哪里出現(xiàn)問(wèn)題了,藍(lán)牙接收到數(shù)據(jù),但是溫濕度模塊沒(méi)有測(cè)到數(shù)據(jù)?

就是藍(lán)牙配對(duì)好之后  串口調(diào)試助手一直收到AT
我把語(yǔ)句挨個(gè)刪除之后試了一下
應(yīng)該就是while(HC05_Init())                 //初始化ATK-HC05模塊  
        {
                delay_ms(100);
        }
的問(wèn)題
然后我看了一下
應(yīng)該是HC05_Init()里的這一段他一直循環(huán)
while(retry--)
        {
                HC05_KEY=1;                                        //KEY置高,進(jìn)入AT模式
                delay_ms(10);
                printf("AT\r\n");                //發(fā)送AT測(cè)試指令
                HC05_KEY=0;                                        //KEY拉低,退出AT模式
                for(t=0;t<10;t++)                         //最長(zhǎng)等待50ms,來(lái)接收HC05模塊的回應(yīng)
                {
                        if(USART_RX_STA&0X8000)break;
                        delay_ms(5);
                }               
                if(USART_RX_STA&0X8000)        //接收到一次數(shù)據(jù)了
                {
                        temp=USART_RX_STA&0X7FFF;        //得到數(shù)據(jù)長(zhǎng)度
                        USART_RX_STA=0;                         
                        if(temp==4&&USART_RX_BUF[0]=='O'&&USART_RX_BUF[1]=='K')
                        {
                                temp=0;//接收到OK響應(yīng)
                                break;
                        }
                }                                           
        }                    
但是我不知道咋辦,而且程序不變的時(shí)候他能用一兩次,斷電之后再接上又不能用了
回復(fù)

使用道具 舉報(bào)

7#
ID:130230 發(fā)表于 2020-1-8 11:03 | 只看該作者
你主程序里面t++了兩次,第一個(gè)t++后當(dāng)t =20后后t清0,緊接著又從0開(kāi)始加的時(shí)候是加不到10的所以if(t % 10 == 0)是不會(huì)執(zhí)行的
回復(fù)

使用道具 舉報(bào)

8#
ID:672497 發(fā)表于 2020-1-8 14:23 | 只看該作者
jizhongbiao 發(fā)表于 2020-1-8 11:03
你主程序里面t++了兩次,第一個(gè)t++后當(dāng)t =20后后t清0,緊接著又從0開(kāi)始加的時(shí)候是加不到10的所以if(t % 10 ...

我把重復(fù)的那一段程序刪了還是不行
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表