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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

最近在做一個類似超聲波小車避障項目求大佬幫忙看看程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:927279 發表于 2021-6-1 20:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近在做一個類似超聲波小車避障項目求大佬幫忙看看程序,設計一個小船,當超聲波測距小于20舵機右轉,繼續前進如果距離減小則舵機左轉,如果距離大于20則舵機置中間位

下面是我寫的代碼  (剛開始寫 求放過)
#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;                                                                        //舵機按鍵標志
void Delay(unsigned int s);      //延時函數聲明


uchar flag;                                                                        //舵機按鍵標志

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


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);                           //計算路程 單位為cm
        if(distance<20)                                        //如果距離小于20cm 舵機右轉
                {
                        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;                                                        //如果標志位1時,pwm的值加1


if(flag==2)        PWM_Value -= 3;                                                        //如果標志位為2時,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++;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:849913 發表于 2021-6-2 19:39 | 只看該作者
程序是一方面 但是超聲波避障用在水里 不太好 傳感器十分怕水
回復

使用道具 舉報

板凳
ID:927279 發表于 2021-6-4 08:11 | 只看該作者
老董 發表于 2021-6-2 19:39
程序是一方面 但是超聲波避障用在水里 不太好 傳感器十分怕水

防水肯定要考慮的
回復

使用道具 舉報

地板
ID:844772 發表于 2021-6-4 09:11 | 只看該作者
while(Echo); 這句的邏輯是不是沒有收到回音,就一直等待呢?大部分時間都是沒有回音的啊。另外,轉向的邏輯有點問題,沒考慮船速,不可能一右轉馬上就拉大距離,所以最終都是左轉了。還有,超聲波避障最好測幾次取平均值,我覺得僅測一次,經常有偶然誤差。
回復

使用道具 舉報

5#
ID:927279 發表于 2021-6-15 20:03 來自手機 | 只看該作者
glinfei 發表于 2021-6-4 09:11
while(Echo); 這句的邏輯是不是沒有收到回音,就一直等待呢?大部分時間都是沒有回音的啊。另外,轉向的邏 ...

好的  謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久在线 | 国产精品一区二区av | 成人特区| 激情欧美一区二区三区中文字幕 | 成人精品久久 | 免费色网址 | 在线黄色影院 | 日韩一区二区三区在线 | 久草视频观看 | 天天操狠狠操 | 久久av在线播放 | 一区二区免费 | 欧美一级在线观看 | 久久五月婷 | 国产一区 在线视频 | 成人3d动漫一区二区三区91 | 日本超碰在线 | 久久精品亚洲欧美日韩久久 | 久久精品视频亚洲 | 久久国产精品99久久久大便 | 波多野结衣精品 | 亚洲欧美精品久久 | 欧美一区二区久久 | 99re在线视频观看 | 在线观看国产视频 | 亚洲午夜视频 | 日本一本视频 | 国产精品99久久久久久久久久久久 | 中文字幕一页二页 | 91视频免费视频 | 免费久 | 欧美精品1区2区 | 卡通动漫第一页 | 亚洲一二三区不卡 | 精品亚洲一区二区 | 国产高清精品一区二区三区 | 午夜精品一区二区三区免费视频 | 国产91视频免费 | 精品一区二区久久久久久久网站 | av手机免费在线观看 | 欧美精品首页 |