久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2923|回復: 2
打印 上一主題 下一主題
收起左側

如何讓超聲波舵機避障小車更加精準 附單片機代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:473410 發表于 2019-4-25 11:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  就這一段時間,做了一個超聲波避障的小車,單獨的超聲波,和舵機程序測試的時候都很準確,但是合在一起的時候,就讓避障變得不太靈敏,可能是代碼寫的有些瑕疵吧。可以躲避障礙物,但是不是每次都能準確躲避,大多數情況下,轉幾次彎就會撞墻,但是網上看到別人的小車都很靈敏,基本是大多數的障礙都可以躲避。下面附上部分代碼,希望大家看看有什么問題吧。初學51,請多指教!

這一塊是超聲波部分:

void Conut(void)                    //超聲波計算距離
{
        time1=TH0*256+TL0;
        TH0=0;
        TL0=0;
        
        S=(time1*1.7)/100;     //算出來是CM

}

void jiance()                           //檢測障礙物是否在范圍內
{
        if((S>=600)||flag==1)
        {         
                flag=0;
                leftqian();
                rightqian();
                OLED_ShowChar(0,  4, ASCII[11]);
                 OLED_ShowChar(18, 4, ASCII[10]);        //顯示點
                  OLED_ShowChar(36, 4, ASCII[11]);
                  OLED_ShowChar(54, 4, ASCII[11]);
                 OLED_ShowChar(72, 4, ASCII[12]);        //顯示M
        }
        else if(S<40)
        {
               
                leftqian();
                righthou();
                delay(200);
                disbuff[0]=S%1000/100;
                  disbuff[1]=S%1000%100/10;
                  disbuff[2]=S%1000%10 %10;
                OLED_ShowChar(0, 4, ASCII[disbuff[0]]);
                  OLED_ShowChar(18, 4, ASCII[10]);        //顯示點
                  OLED_ShowChar(36, 4, ASCII[disbuff[1]]);
                  OLED_ShowChar(54, 4, ASCII[disbuff[2]]);
                OLED_ShowChar(72, 4, ASCII[12]);        //顯示M
        }
        else
        {
                leftqian();
                rightqian();
                led7=0;
                disbuff[0]=S%1000/100;
                  disbuff[1]=S%1000%100/10;
                  disbuff[2]=S%1000%10 %10;
                OLED_ShowChar(0, 4, ASCII[disbuff[0]]);
                  OLED_ShowChar(18, 4, ASCII[10]);        //顯示點
                  OLED_ShowChar(36, 4, ASCII[disbuff[1]]);
                  OLED_ShowChar(54, 4, ASCII[disbuff[2]]);
                OLED_ShowChar(72, 4, ASCII[12]);        //顯示M
        }

void  StartModule()                          //啟動模塊
{
        uint k;
        Trig=1;        
        for(k=0;k<21;k++)                             //啟動一次模塊
                _nop_();
        Trig=0;
}




這一塊是舵機部分:
void Timer1Interrupt(void) interrupt 3
{
    TH1 = 0xFE;
    TL1 = 0x0C;
        if(count<jd)
                pwm=1;
        else
                pwm=0;
        count=count+1;
        count=count%40;
}        



下面是主程序:
void main()
{
        InitTimer0();
        InitTimer1();
        IrInit();
        OLED_Init();                        //初始化OLED
        leftqian();
        rightqian();
        jd=2;
        OLED_Clear();
        OLED_ShowCHinese2(0,0,0);//
        OLED_ShowCHinese2(18,0,1);//
        OLED_ShowCHinese2(36,0,2);//
        OLED_ShowCHinese2(54,0,3);//作
        OLED_ShowCHinese2(72,0,4);//品
        OLED_ShowCHinese2(90,0,5);//答
        OLED_ShowCHinese2(108,0,6);//辯               
        OLED_ShowCHinese(0,2,0); //測
        OLED_ShowCHinese(18,2,1);//量
        OLED_ShowCHinese(36,2,2);//距
        OLED_ShowCHinese(54,2,3);//離
        OLED_ShowCHinese(72,2,4);//:
        while(1)
        {                 
//                delay500ms();
                jd=jd+2;
                if(jd>5)
                        jd=2;                  
                switch(IrValue[2])
                {
                        case 24: leftqian();rightqian(); break;
                        case 82: lefthou();righthou(); break;
                        case  8: lefthou();rightqian(); break;
                        case 90: leftqian();righthou(); break;
                        case 28: leftting();rightting(); break;
                        default : break;
                }
                if(IrValue[2]==71)
                {
                        StartModule();
                        led8=0;
                       while(!Echo);                //當RX為零時等待
                       TR0=1;                            //開啟計數
                           while(Echo);                        //當RX為1計數并等待
                    TR0=0;                                //關閉計數
                 Conut();                        //計算
                        jiance();
                        led8=1;
//                        delayms(80);                //處理速度不夠,導致轉彎不靈敏
                }
                if(IrValue[2]==70)
                {                                                
                        StartModule();
                        led8=0;
                       while(!Echo);                //當RX為零時等待
                       TR0=1;                            //開啟計數
                           while(Echo);                        //當RX為1計數并等待
                    TR0=0;                                //關閉計數
                 Conut();                        //計算
                        jd=3;
                        while(S>20)
                        {
                                leftqian();
                                rightqian();
                                Conut();
                        }
                        leftting();
                        rightting();
                }                                                                 
                delay_ms(100);                                
//                OLED_Clear();
/*                delay_ms(500);
                OLED_Clear();
                delay_ms(500);
                OLED_DrawBMP(0,0,128,8,BMP1);    //顯示圖片1
                delay_ms(500);                                         
                OLED_DrawBMP(0,0,128,8,BMP2);         //顯示圖片2
                delay_ms(500);                                            */
        }
}


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

使用道具 舉報

沙發
ID:432823 發表于 2019-4-25 12:16 | 只看該作者
主程序中軟件延時太長了,有1.5S多。
回復

使用道具 舉報

板凳
ID:473410 發表于 2019-4-25 15:06 | 只看該作者
yaoji123 發表于 2019-4-25 12:16
主程序中軟件延時太長了,有1.5S多。

僅僅是延時的問題嗎?我聽別人說需要對超聲波所傳回來的數據進行處理,而不是所有的都能用
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品欧美一区二区三区麻豆 | 亚洲欧美日韩成人在线 | 久久99一区二区 | 欧美日韩一区在线 | 精品国产乱码久久久久久闺蜜 | 欧美在线视频a | 日韩在线观看 | 综合国产 | 日韩电影一区 | 久久久久久www | 日韩三区 | av天天看 | 日韩成人在线免费视频 | 亚洲不卡av在线 | 国产成在线观看免费视频 | 日本不卡视频在线播放 | 亚洲女人天堂成人av在线 | 有码一区 | 亚洲国产成人av | 91国内产香蕉 | 午夜电影一区二区 | 欧美精品一区在线发布 | 欧美久久久久久 | 国产精品免费高清 | 久久精品视频在线播放 | 精品亚洲一区二区 | 欧美亚洲激情 | 日韩在线日韩 | 免费黄色录像视频 | 成人一区二区三区在线观看 | 亚洲一区在线免费观看 | 国产三区在线观看视频 | 国产免费一区二区三区 | 日韩精品一区在线观看 | 色就干| 91福利网| 久久91精品国产一区二区三区 | 国产精品一区2区 | 欧美一级一 | 亚洲九九| 日韩欧美在线播放 |