亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: stm32溫濕度報警器藍牙模塊錯誤 [打印本頁]

作者: chitu    時間: 2020-1-7 18:54
標題: stm32溫濕度報警器藍牙模塊錯誤
上位機一直收到藍牙發送  AT  
oled顯示屏也只顯示溫度濕度漢字而不顯示溫濕度的數據
但是我編譯的時候也沒有報錯
求求各位大佬幫我看看哪里有問題
下面是主函數

int main(void)
{
        u8 t=0;                           
        u8 temperature;              
        u8 humidity;
        u8 reclen=0;
  int tmp;         
        usart_init(9600);
         BEEP_Init();//蜂鳴器初始化
        delay_init();                           //延時初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
        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);                        //等待藍牙模塊上電穩定
         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);                //發送到藍牙模塊
                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)                        //接收到一次數據了
                {
               
                           reclen=USART_RX_STA&0X7FFF;        //得到數據長度
                          USART_RX_BUF[reclen]=0;                 //加入結束符
                        if(reclen==9||reclen==8)                 //控制DS1檢測
                        {
                                if(strcmp((const char*)USART_RX_BUF,"關閉報警器")==0);        //關閉蜂鳴器
                {
                                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;
                }
        }

}


作者: 闊愛的釗釗    時間: 2020-1-7 20:56
         while(HC05_Init())                 //初始化ATK-HC05模塊           {                 delay_ms(200);          }    看看是不是卡在初始化這一步了。
作者: 闊愛的釗釗    時間: 2020-1-7 20:58
反復調試一下,應該是藍牙AT沒配好。
作者: 瘋子本人    時間: 2020-1-7 23:56
能否說明一下是哪里出現問題了,藍牙接收到數據,但是溫濕度模塊沒有測到數據?
作者: chitu    時間: 2020-1-8 10:02
闊愛的釗釗 發表于 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);      //根據設定參數初始化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);      //根據設定參數初始化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置高,進入AT模式
  delay_ms(10);
  printf("AT\r\n");  //發送AT測試指令
  HC05_KEY=0;     //KEY拉低,退出AT模式
  for(t=0;t<10;t++)    //最長等待50ms,來接收HC05模塊的回應
  {
   if(USART_RX_STA&0X8000)break;
   delay_ms(5);
  }  
  if(USART_RX_STA&0X8000) //接收到一次數據了
  {
   temp=USART_RX_STA&0X7FFF; //得到數據長度
   USART_RX_STA=0;   
   if(temp==4&&USART_RX_BUF[0]=='O'&&USART_RX_BUF[1]=='K')
   {
    temp=0;//接收到OK響應
    break;
   }
  }         
}      
if(retry==0)temp=1; //檢測失敗
return temp;   
}  
這是藍牙初始化的程序  我感覺是那個循環語句一直在循環,但是我程序不變的時候又有一兩次可以正確運行。。。。。。。

作者: chitu    時間: 2020-1-8 10:07
瘋子本人 發表于 2020-1-7 23:56
能否說明一下是哪里出現問題了,藍牙接收到數據,但是溫濕度模塊沒有測到數據?

就是藍牙配對好之后  串口調試助手一直收到AT
我把語句挨個刪除之后試了一下
應該就是while(HC05_Init())                 //初始化ATK-HC05模塊  
        {
                delay_ms(100);
        }
的問題
然后我看了一下
應該是HC05_Init()里的這一段他一直循環
while(retry--)
        {
                HC05_KEY=1;                                        //KEY置高,進入AT模式
                delay_ms(10);
                printf("AT\r\n");                //發送AT測試指令
                HC05_KEY=0;                                        //KEY拉低,退出AT模式
                for(t=0;t<10;t++)                         //最長等待50ms,來接收HC05模塊的回應
                {
                        if(USART_RX_STA&0X8000)break;
                        delay_ms(5);
                }               
                if(USART_RX_STA&0X8000)        //接收到一次數據了
                {
                        temp=USART_RX_STA&0X7FFF;        //得到數據長度
                        USART_RX_STA=0;                         
                        if(temp==4&&USART_RX_BUF[0]=='O'&&USART_RX_BUF[1]=='K')
                        {
                                temp=0;//接收到OK響應
                                break;
                        }
                }                                           
        }                    
但是我不知道咋辦,而且程序不變的時候他能用一兩次,斷電之后再接上又不能用了
作者: jizhongbiao    時間: 2020-1-8 11:03
你主程序里面t++了兩次,第一個t++后當t =20后后t清0,緊接著又從0開始加的時候是加不到10的所以if(t % 10 == 0)是不會執行的
作者: chitu    時間: 2020-1-8 14:23
jizhongbiao 發表于 2020-1-8 11:03
你主程序里面t++了兩次,第一個t++后當t =20后后t清0,緊接著又從0開始加的時候是加不到10的所以if(t % 10 ...

我把重復的那一段程序刪了還是不行




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1