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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1824|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 操网站 | 99成人| 久久精品成人 | аⅴ资源新版在线天堂 | 日韩av免费在线观看 | 日本精品在线观看 | 午夜精品一区二区三区在线观看 | 亚洲风情在线观看 | 婷婷国产一区二区三区 | 日韩一区二区在线视频 | 色婷婷综合久久久中文字幕 | 亚洲黄色视屏 | 美女黄视频网站 | 国产精品久久片 | 日韩一级电影免费观看 | 欧州一区二区三区 | 精国产品一区二区三区四季综 | 看片网站在线 | 精品国产欧美一区二区三区成人 | 欧美成人a | 男女网站免费观看 | 国内精品久久精品 | 国产午夜视频 | 黄视频网站在线 | 免费的av | 午夜免费福利影院 | 九九热这里 | 亚洲欧美日韩电影 | 国产一级片在线播放 | 黄网站在线播放 | 亚洲欧洲激情 | 超碰导航 | 成人精品 | 亚洲成人综合在线 | 欧美一区二区在线观看 | 一区二区精品视频 | 精品一区二区三区在线视频 | 2020国产在线 | 欧美精品一区二区在线观看 | 久久一区二区三区四区五区 | 在线一区 |