找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2896|回复: 6
收起左侧

单片机智能小车要求是能在黑色停止线停几秒,但是我停下来就不走了

[复制链接]
ID:844082 发表于 2020-11-15 21:24 | 显示全部楼层 |阅读模式
小白刚开始学习单片机  下面是我写的智能小车代码  要求是能在黑色停止线停几秒  但是我停下来就不走了   那个大佬帮帮我...
单片机代码如下:

#ifndef _LED_H_
#define _LED_H_

    //定义小车驱动模块输入IO口
   sbit L293D_IN1=P1^2;  //左边轮在高电位前转
   sbit L293D_IN2=P1^3;  //左边轮在高电位后转
   sbit L293D_IN3=P1^4;  //右边轮高电位前转
   sbit L293D_IN4=P1^5;  //右边轮在高电位后转

        /***蜂鸣器接线定义*****/
    sbit BUZZ=P2^3;

        #define Left_1_led        P3_6//左传感器            
    #define Right_1_led       P3_7         //右传感器
        #define Left_2_led        P3_4
        #define Right_2_led       P2_0        
        #define Left_3_led        P3_5        
        #define Right_3_led       P2_1         

        #define Left_moto_pwm          P1_6         //PWM信号端

        #define Right_moto_pwm          P1_7         //PWM信号端
        
        #define Left_moto_go      {P1_2=1,P1_3=0;}  //左电机向前走
        #define Left_moto_back    {P1_2=0,P1_3=1;}         //左边电机向后转
        #define Left_moto_Stop    {P1_2=0,P1_3=0;}         //左边电机停转                     
        #define Right_moto_go     {P1_4=1,P1_5=0;}        //右边电机向前走
        #define Right_moto_back   {P1_4=0,P1_5=1;}        //右边电机向后走
        #define Right_moto_Stop   {P1_4=0,P1_5=0;}              //右边电机停转   

        unsigned char pwm_val_left  =0;//变量定义
        unsigned char push_val_left =0;// 0左电机占空比N/20
        unsigned char pwm_val_right =0;
        unsigned char push_val_right=0;//0// 右电机占空比N/20
        bit Right_moto_stop=1;
        bit Left_moto_stop =1;
        unsigned  int  time=0;

/************************************************************************/        
//延时函数        
void delayMs(int count)
{        
                int i;
        int n=count/50;
        for(i;i<n;i++)
        {
        time=0;
        while(time<=n);
        }
}
/************************************************************************/
//前速前进
void  car_run(unsigned int left_value,unsigned int right_value)
{
    if(pwm_val_left<=left_value)
        {
                Left_moto_pwm=1;
                P1_2=1;
        }
        else
        {
            Left_moto_pwm=0;
                P1_2=0;
        }

    if(pwm_val_right<=right_value)
        {
                Right_moto_pwm=1;
                P1_4=1;
        }
        else
        {
            Right_moto_pwm=0;
                P1_4=0;
        }

         L293D_IN2=0;
         L293D_IN4=0;         
}
void run(unsigned int value)
{
        car_run(value,value);
}
//左转
     void  leftrun(void)
{         
         Right_moto_go ;  //右电机往前走
     Left_moto_back ;  //左电机后走
}

//右转
     void  rightrun(void)
{
     Left_moto_go  ;   //左电机往前走
         Right_moto_back    ;  //右电机往后走        
}

//停止
     void  stop(void)
{         

         Right_moto_Stop ;  //右电机停止
     Left_moto_Stop  ;  //左电机停止         
}

#endif



主函数如下:
#include<AT89X52.H>                 
        #include<ZY-4WD_PWM.H>               
//主函数
        void main(void)
{        

        unsigned char i;
    P1=0X00;   //关电机        

                         TMOD=0X01;
                TH0= 0XFc;                  //1ms定时
                 TL0= 0X18;
                   TR0= 1;
                ET0= 1;
                EA = 1;                           //开总中断


        while(1)        //无限循环
        {
         
                         //有信号为0  没有信号为1
              if(Left_1_led==0&&Right_1_led==0)
                                {
                                       run(50);   //调用前进函数
                                 }                  
                           else if(Right_1_led==1&&Left_1_led==1&&(Right_2_led==1||Left_2_led==1))          //停车线,停车
                            {         
                                      stop();                   //调用小车停止
                                          delayMs(1000);
                                          run(50);
                                 }

                          else if(Left_1_led==1&&Right_1_led==0)            //左边检测到黑线
                                  {
                                           leftrun();                  //调用小车左转  函数

                             }
                           
                                 else if(Right_1_led==1&&Left_1_led==0)                //右边检测到黑线
                                  {         
                                      rightrun();                   //调用小车右转        函数
                                  }                                                                                                                             
         }
}


回复

使用道具 举报

ID:592807 发表于 2020-11-16 08:42 | 显示全部楼层
你要先搞清楚是你的代码不走了,还是你的马达不走了
回复

使用道具 举报

ID:311846 发表于 2020-11-16 09:03 | 显示全部楼层
本帖最后由 权威人物 于 2020-11-16 09:07 编辑

else if(Right_1_led==1&&Left_1_led==1&&(Right_2_led==1||Left_2_led==1))          //停车线,停车,不知道你另外的传感器装哪里?干什么的?
                            {         
                                      stop();                   //调用小车停止
                                          delayMs(1000);
                                          run(50);
                                          delayMs(1000);//简单直接加延时,或者用while(Right_1_led==1&&Left_1_led==1)run(50);)
                                 }
回复

使用道具 举报

ID:420836 发表于 2020-11-16 10:27 | 显示全部楼层
不要在以下条件if语句调用函数run(50):
else if(Right_1_led==1&&Left_1_led==1&&(Right_2_led==1||Left_2_led==1))
回复

使用道具 举报

ID:844082 发表于 2020-11-16 18:54 | 显示全部楼层
黄youhui 发表于 2020-11-16 08:42
你要先搞清楚是你的代码不走了,还是你的马达不走了

应该是代码不走了   
回复

使用道具 举报

ID:844082 发表于 2020-11-16 18:55 | 显示全部楼层
本帖最后由 zpc.+ 于 2020-11-16 19:07 编辑
权威人物 发表于 2020-11-16 09:03
else if(Right_1_led==1&&Left_1_led==1&&(Right_2_led==1||Left_2_led==1))          //停车线,停车,不 ...

我的传感器是横着的一排   有四个    我现在遇到的问题是停车后就没有后续了  所以我都不知道问题出在哪里了  困惑
回复

使用道具 举报

ID:844082 发表于 2020-11-16 18:57 | 显示全部楼层
TTQ001 发表于 2020-11-16 10:27
不要在以下条件if语句调用函数run(50):
else if(Right_1_led==1&&Left_1_led==1&&(Right_2_led==1||Left_ ...

因为我的小车会在停止线停车  然后我想让它停几秒后继续循迹   但是我不调用run的话  停了就不会走 虽然现在也不走
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表