欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 最近在做一個(gè)類似超聲波小車避障項(xiàng)目求大佬幫忙看看程序 [打印本頁(yè)]

作者: garrettzls    時(shí)間: 2021-6-1 20:47
標(biāo)題: 最近在做一個(gè)類似超聲波小車避障項(xiàng)目求大佬幫忙看看程序
最近在做一個(gè)類似超聲波小車避障項(xiàng)目求大佬幫忙看看程序,設(shè)計(jì)一個(gè)小船,當(dāng)超聲波測(cè)距小于20舵機(jī)右轉(zhuǎn),繼續(xù)前進(jìn)如果距離減小則舵機(jī)左轉(zhuǎn),如果距離大于20則舵機(jī)置中間位

下面是我寫的代碼  (剛開始寫 求放過(guò))
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#include <math.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit Trig=P2^3;            //控制端
sbit Echo=P2^4;          //接收端
sbit PWM_OUT=P2^1;                                //PWM輸出口


uint PWM_Value;                        //定義pwm值
uchar order=0;
unsigned char T0RH=0;
unsigned char T0RL=0;
uchar flag;                                                                        //舵機(jī)按鍵標(biāo)志
void Delay(unsigned int s);      //延時(shí)函數(shù)聲明


uchar flag;                                                                        //舵機(jī)按鍵標(biāo)志

/*延時(shí)函數(shù)*/
void Delay_us(unsigned char t)
{
        while(--t);
}         //大約延時(shí)t*2+5us         超聲波模塊用
void time_init()
{
        EA=1;
        TMOD=0x11;
        TH0 = 0;
        TL0 = 0;
        ET0 = 1;
        TR0 = 1;
    PT0=1;
} //初始化定時(shí)器


void main()
{
        unsigned int time,distance,last;
        Trig=0;
        Echo=0;
Delay_us(6000);
PWM_Value =1190;                                        //pwm初值為1190中位
time_init();
while(1)
       {
        Trig=1;
        Delay_us(5);
                Trig=0;
                while(Echo==0);
                TR0=1;
                while(Echo);
                TR0=0;
                time=TH0*256+TL0;
                distance=(int)(time*0.017);                           //計(jì)算路程 單位為cm
        if(distance<20)                                        //如果距離小于20cm 舵機(jī)右轉(zhuǎn)
                {
                        flag = 1;
                        last=distance;
                }      
                else
                {
                flag=0;
                }
                Delay_us(5);
                        if(distance<last)
                        {
                        flag=2;
                        }
                        else
                {
                flag=0;
                }
                }
}
/*****中斷程序*******/
void timer0(void) interrupt 1


{


if(flag==1)        PWM_Value += 1;                                                        //如果標(biāo)志位1時(shí),pwm的值加1


if(flag==2)        PWM_Value -= 3;                                                        //如果標(biāo)志位為2時(shí),pwm減1
if(PWM_Value>=2500)                                                                                //如果pwm的值大于2500
PWM_Value = 2500;                                                                                                //則保持在2500
if(PWM_Value<=500)                                                                                        //如果pwm的值小于500
PWM_Value=500;                                                                                                        //則保持在500
switch(order)
{
        case 1:PWM_OUT=1;
                   TH0=(65536-PWM_Value)>>8;
                   TL0=(uchar)(65536-PWM_Value);
                   break;
        case 2:PWM_OUT=0;
                   TH0=(65536-(5000-PWM_Value))>>8;
                   TL0=(uchar)(65536-(5000-PWM_Value));
                   break;
        case 3:
                   TH0=60536>>8;
                   TL0=(uchar)60536;
                   break;
        case 4:
                   TH0=60536>>8;
                   TL0=(uchar)60536;
                   order=0;
                   break;
default: order=0;
                   break;
}
          order++;
}

作者: 老董    時(shí)間: 2021-6-2 19:39
程序是一方面 但是超聲波避障用在水里 不太好 傳感器十分怕水
作者: garrettzls    時(shí)間: 2021-6-4 08:11
老董 發(fā)表于 2021-6-2 19:39
程序是一方面 但是超聲波避障用在水里 不太好 傳感器十分怕水

防水肯定要考慮的
作者: glinfei    時(shí)間: 2021-6-4 09:11
while(Echo); 這句的邏輯是不是沒(méi)有收到回音,就一直等待呢?大部分時(shí)間都是沒(méi)有回音的啊。另外,轉(zhuǎn)向的邏輯有點(diǎn)問(wèn)題,沒(méi)考慮船速,不可能一右轉(zhuǎn)馬上就拉大距離,所以最終都是左轉(zhuǎn)了。還有,超聲波避障最好測(cè)幾次取平均值,我覺(jué)得僅測(cè)一次,經(jīng)常有偶然誤差。

作者: garrettzls    時(shí)間: 2021-6-15 20:03
glinfei 發(fā)表于 2021-6-4 09:11
while(Echo); 這句的邏輯是不是沒(méi)有收到回音,就一直等待呢?大部分時(shí)間都是沒(méi)有回音的啊。另外,轉(zhuǎn)向的邏 ...

好的  謝謝




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