找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1900|回复: 3
打印 上一主题 下一主题
收起左侧

求助 两个红外的智能小车的源代码

[复制链接]
跳转到指定楼层
楼主
ID:246031 发表于 2017-11-10 12:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人大一,参加了学校的智能小车赛, 但是对于编程还是不太会,求助各位大佬。 可以不避障

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:248052 发表于 2017-11-10 13:47 | 只看该作者
说一下大概思路
回复

使用道具 举报

板凳
ID:248048 发表于 2017-11-10 14:01 | 只看该作者
#include "nRF24L01.h"
       
uchar TX_ADDRESS[TX_ADR_WIDTH]={0xFF,0xFF,0xFF,0xFF,0xFF}; //发送地址
uchar RX_ADDRESS[RX_ADR_WIDTH]={0xFF,0xFF,0xFF,0xFF,0xFF}; //接收地址

uchar   rate = 0x0F;    //2Mbs, 0dB  低噪声增益开启
//--定义一个全局变量--//
unsigned char timer1;

void Time1Config();


sbit        L1                  =P3^4;                                          //驱动模块in1,2,3.4
sbit        L2                  =P3^5;
sbit        R1                  =P3^6;
sbit        R2                  =P3^7;
sbit    m1       =P2^1;
sbit    m2       =P2^0;
sbit    h1       =P2^2;
sbit PWM1=P3^4;
sbit PWM2=P3^5;
sbit PWM3=P3^6;
sbit PWM4=P3^7;       
uchar rece_buf[32];                                                        //接收寄存器
//int num,S=0,time=0,timer=0;                                                        //a0=37:最大角度,脉宽1.899ms

void delay(uint t)
{
        uint a,b;
        for(a=0;a<t;a++)
                for (b=0;b<110;b++);
}//          寻迹
void Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断
{   
        TH1 = 0xFE;  //重新赋初值
        TL1 = 0x0C;
        timer1++;   
}

          void Time1Config()
{
        TMOD|= 0x10;   //设置定时计数器工作方式1为定时器

        //--定时器赋初始值,12MHZ下定时0.5ms--//  
        TH1 = 0xFE;
        TL1 = 0x0C;

       
        ET1 = 1;          //开启定时器1中断
        EA = 1;
        TR1 = 1;         //开启定时器       
}
void main()
{  
int i,t;

//寻迹
Time1Config();
        while(1)
        {
                if(h1==1)
                {
                                 if(timer1>60)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 <60)        //改变30这个值可以改变直流电机的速度
                {
                        PWM1=0;
                        PWM2=1;
                        PWM3=0;
                        PWM4=1;
                        delay(100);
                        }
                        else
                {
                        PWM1=0;
                        PWM2=0;
                        PWM3=0;
                        PWM4=0;

                }
                }


         else        if(m1==0&&m2==0)                           //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
                                {

                                                if(timer1>100)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 <15)        //改变30这个值可以改变直流电机的速度
                {
                        PWM1=1;
                        PWM2=0;
                        PWM3=0;
                        PWM4=1;
                }
                           else
                {
                        PWM1=0;
                        PWM2=0;
                        PWM3=0;
                        PWM4=0;

                }

                                }
                                else if(m1==1&&m2==1)                         //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
                                {
                                                                   if(timer1>100)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 <15)        //改变30这个值可以改变直流电机的速度
                {
                        PWM1=0;
                        PWM2=1;
                        PWM3=1;
                        PWM4=0;


                                }
                                           else
                {
                        PWM1=0;
                        PWM2=0;
                        PWM3=0;
                        PWM4=0;

                }
                                 }
                else if(m1==1&&m2==0)                         //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
                {
                           L1        =0;
                        L2        =1;
                        R1        =1;
                        R2        =0;
                        delay(10);

                        if(timer1>60)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 <60)        //改变30这个值可以改变直流电机的速度
                {
                        PWM1=1;
                        PWM2=0;
                        PWM3=1;
                        PWM4=0;        }
                else
                {
                        PWM1=0;
                        PWM2=0;
                        PWM3=0;
                        PWM4=0;

                }

                                }       
                        else if(m1==0&&m2==1)                         //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
                        {
                    L1        =0;
                        L2        =1;
                        R1        =1;
                        R2        =0;
                        delay(10);

                                if(timer1>60)  //PWM周期为100*0.5ms
                {
                        timer1=0;
                }
                if(timer1 <60)        //改变30这个值可以改变直流电机的速度
                {
                        PWM1=0;
                        PWM2=1;
                        PWM3=0;
                        PWM4=1;
                        }
                        else
                {
                        PWM1=0;
                        PWM2=0;
                        PWM3=0;
                        PWM4=0;

                }
        }
                        delay(20);
        }
                  
回复

使用道具 举报

地板
ID:196928 发表于 2017-11-10 19:17 | 只看该作者
3.例程代码.rar (5.31 KB, 下载次数: 3)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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