极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14458|回复: 9

自己做的小车,求大牛指导

[复制链接]
发表于 2014-4-27 19:53:39 | 显示全部楼层 |阅读模式
闲着蛋疼,做了辆车
遥控,3档变速,感觉做得最好就是前灯了{:soso_e128:}
程序还没调好脉冲

接收程序
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <nRF24L01.h>

#include <SPI.h>


int AA,BB,CC,DD,EE,FF,XX,YY,data;
/****************************定义接口*******************/

/**************灯光******************/
const int frontLight=A0;
const int backLight=A1;
const int leftLight=A2;
const int rightLight=A3;

const int laBa=36;

/***************马达***************/

const int moto1A=22;
const int moto1B=23;
const int moto2A=24;
const int moto2B=25;
const int moto3A=26;
const int moto3B=27;
const int moto4A=28;
const int moto4B=29;
const int Enable1=3;
const int Enable2=4;
const int Enable3=5;
const int Enable4=6;


int value,i;
int dangWei[6];


void setup()
{
  Mirf.spi = &MirfHardwareSpi;          //加载24L01  SPI
  Mirf.init();
  Mirf.setRADDR((byte *)"serv1"); //接收地址" "
  Mirf.payload = sizeof(int);            //数据类型()
  Mirf.config();
  Serial.begin(9600);
  for(int i=0;i<=36;i++)
   {pinMode(i,OUTPUT);
  
    }
  
  
  

}

void loop(){

  
  int AA=BB=CC=DD=EE=FF=0;
  if(Mirf.dataReady())
  {                               //如果接收到数据则执行
    Mirf.getData((byte *)&data);   //接收数据
   
   
  /**********************接收数据*********************************/
    if (data==10){
      AA=data;
     
    }
    if (data==20){
      BB=data;
     
    }
    if (data==30){
      CC=data;
     
    }
    if (data==40){
      DD=data;
    }
    if (data==50){
      EE=data;
    }
    if (data==60){
      FF=data;
    }
    if ((data>=101)&&(data<=200)){
      XX=data;
    }
    if ((data>=201)&&(data<=300)){
      YY=data;
    }
   
   
    int dangWei[6]={AA,BB,CC,DD,EE,FF};
    value=dangWei[0];
    for(int i=0;i<6;i++){
      
      if(dangWei[i]>value)
      value=dangWei[i];
    }
   
   

/************************** 处理数据*****************/
    if (YY>234){
      switch(XX){
        case 101 :frontLightOn();
        break;
        case 134 :goStraight();
        break;
        case 167 :frontLightOff();
       }
    }
      if (YY==234){
       switch(XX){
        case 101 :turnLeft();
        break;
        case 134 :brk();
        break;
        case 167 :turnRight();
        }
      }
      if(YY<234){
       switch(XX){
        case 101 :backLightOn();
        break;
        case 134 :goBack();
        break;
        case 167 :backLightOff();
        }
      }
      if(value==50){
      digitalWrite(laBa,HIGH);
      delay(100);
      digitalWrite(laBa,LOW);
      }
     
      
    Serial.println(AA);  // 串口显示接收到的数据
    Serial.println(BB);
    Serial.println(CC);
    Serial.println(DD);
    Serial.println(EE);
    Serial.println(FF);
    Serial.println(XX);
    Serial.println(YY);
    Serial.println(value);
    Serial.println("aaaaa");
   
   
    //delay(500);
         
      
          Mirf.rxFifoEmpty();   //清理24L01援存
   
    }
   
   
}

/******************前灯亮****************/
void frontLightOn()
{
  analogWrite(A0,255);
}

/******************前灯灭****************/
void frontLightOff()
{
  analogWrite(A0,0);
}

/******************后灯亮****************/
void backLightOn()
{
  analogWrite(A1,255);
}

/******************后灯灭****************/
void backLightOff()
{
  analogWrite(A1,0);
}

/******************顺时针************/

/*void CW()
{
  analogWrite(led[0],255);
  delay(300);
  for(i=1;i<=10;i++){
    analogWrite(led[i],255);
   analogWrite(led[i-1],0);
    delay(300);
   
  }
}


/******************逆时针**********************/

/*void CCW()
{
  analogWrite(led[9],255);
  delay(300);
  for(i=9;i>=0;i--){
    analogWrite(led[i],255);
    analogWrite(led[i+1],0);
    delay(300);
   
  }
  analogWrite(led[0],0);
  
  
}*/

/******************直走****************/
void goStraight()
{
  
  switch(value){
    case 10:goStraight1();
    break;
    case 20:goStraight2();
    break;
    case 30:goStraight3();
    break;
    case 40:brk();
    break;
   
  }
}

/*void normal1()
{
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,HIGH);
  analogWrite(Enable1,60);
  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable2,60);
  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,HIGH);
  analogWrite(Enable3,60);
  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,HIGH);
  analogWrite(Enable4,35);
}*/


void goStraight1()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,70);
  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable2,80);
  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,HIGH);
  analogWrite(Enable3,60);
  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,HIGH);
  analogWrite(Enable4,60);
}

void goStraight2()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,120);
  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable2,120);
  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,HIGH);
  analogWrite(Enable3,120);
  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,HIGH);
  analogWrite(Enable4,90);
}

void goStraight3()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,150);
  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable2,150);
  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,HIGH);
  analogWrite(Enable3,150);
  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,HIGH);
  analogWrite(Enable4,150);
}

/*void goStraight4()
{
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,HIGH);
  analogWrite(Enable1,170);
  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable2,170);
  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,HIGH);
  analogWrite(Enable3,170);
  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,HIGH);
  analogWrite(Enable4,170);
}*/



/*****************************后退******************/

void goBack()
{
  
  
  switch(value){
    case 10:goBack1();
    break;
    case 20:goBack2();
    break;
    case 30:goBack3();
    break;
    case 40:brk();
    break;
   
  }
}

/*void normal2()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,60);
  
  digitalWrite(moto2A,HIGH);
  digitalWrite(moto2B,LOW);
  analogWrite(Enable2,60);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
  analogWrite(Enable3,60);
  
  digitalWrite(moto4A,HIGH);
  digitalWrite(moto4B,LOW);
  analogWrite(Enable4,35);
}*/


void goBack1()
{
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,HIGH);
  analogWrite(Enable1,90);
  
  digitalWrite(moto2A,HIGH);
  digitalWrite(moto2B,LOW);
  analogWrite(Enable2,100);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
  analogWrite(Enable3,98);
  
  digitalWrite(moto4A,HIGH);
  digitalWrite(moto4B,LOW);
  analogWrite(Enable4,60);
}
void goBack2()
{
  
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,HIGH);
  analogWrite(Enable1,120);
  
  digitalWrite(moto2A,HIGH);
  digitalWrite(moto2B,LOW);
  analogWrite(Enable2,120);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
  analogWrite(Enable3,120);
  
  digitalWrite(moto4A,HIGH);
  digitalWrite(moto4B,LOW);
  analogWrite(Enable4,90);
}

void goBack3()
{
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,HIGH);
  analogWrite(Enable1,85);
  
  digitalWrite(moto2A,HIGH);
  digitalWrite(moto2B,LOW);
  analogWrite(Enable2,85);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
  analogWrite(Enable3,85);
  
  digitalWrite(moto4A,HIGH);
  digitalWrite(moto4B,LOW);
  analogWrite(Enable4,85);
}

/*void goBack4()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,105);
  
  digitalWrite(moto2A,HIGH);
  digitalWrite(moto2B,LOW);
  analogWrite(Enable2,105);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
  analogWrite(Enable3,105);
  
  digitalWrite(moto4A,HIGH);
  digitalWrite(moto4B,LOW);
  analogWrite(Enable4,105);
}*/


void brk()
{
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,LOW);

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,LOW);

  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,LOW);

  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);

}

/**************左转*****************/
void turnLeft()
{
  analogWrite(leftLight,255);
  delay(100);
  analogWrite(leftLight,0);
  switch(value){
    case 10:zeroL();
    break;
    case 20:thirtyL();
    break;
    case 30:fortyFiveL();
    break;
    case 40:brk();
    break;
    default:;
    break;
  }

}

void zeroL()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,50);

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,LOW);

  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,HIGH);
  //analogWrite(Enable3,65);

  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);
}

void thirtyL()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,80);

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,LOW);
  //analogWrite(Enable1,40);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
  //analogWrite(Enable3,65);

  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);
  //analogWrite(Enable1,30);
}

void fortyFiveL ()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  analogWrite(Enable1,120);

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,LOW);
  //analogWrite(Enable1,60);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
// analogWrite(Enable3,90);

  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);
  //analogWrite(Enable1,40);
}
/*
void sixtyL()
{
  
}*/

/*************************右转*********************/

void turnRight()
{
  analogWrite(rightLight,255);
  delay(100);
  analogWrite(rightLight,0);
  switch(value){
    case 10:zeroR();
    break;
    case 20:thirtyR();
    break;
    case 30:fortyFiveR();
    break;
    case 40: brk();
    break;
    default :;
    break;
   
  }
  
}

void  zeroR()
{
  digitalWrite(moto1A,LOW);
  digitalWrite(moto1B,LOW);
  

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable2,65);

  
  digitalWrite(moto3A,LOW);
  digitalWrite(moto3B,LOW);


  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);
  //analogWrite(Enable4,65);
}


void thirtyR()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
  //analogWrite(Enable1,40);

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable1,65);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
// analogWrite(Enable3,40);

  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);
  //analogWrite(Enable1,45);
}

void fortyFiveR()
{
  digitalWrite(moto1A,HIGH);
  digitalWrite(moto1B,LOW);
// analogWrite(Enable1,60);

  
  digitalWrite(moto2A,LOW);
  digitalWrite(moto2B,HIGH);
  analogWrite(Enable1,90);
  
  digitalWrite(moto3A,HIGH);
  digitalWrite(moto3B,LOW);
// analogWrite(Enable3,60);

  
  digitalWrite(moto4A,LOW);
  digitalWrite(moto4B,LOW);
  //analogWrite(Enable1,70);
}




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-4-27 20:30:42 | 显示全部楼层
四驱啊,霸气!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 22:55:11 | 显示全部楼层
沧海笑1122 发表于 2014-4-27 20:30
四驱啊,霸气!

不是四驱跑不动,有点重,不过极速还是挺快的。哈哈
回复 支持 反对

使用道具 举报

发表于 2014-4-27 23:33:25 | 显示全部楼层
24L01 我也有2个 没空去搞
程序简单明了 改成比例的就更好了
回复 支持 反对

使用道具 举报

发表于 2014-4-28 09:36:22 | 显示全部楼层
方向控制,是不是可以直接写一个函数,之后每次调用只改变参数,你这个代码太笨重了……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-28 09:57:46 来自手机 | 显示全部楼层
124330190 发表于 2014-4-28 09:36 方向控制,是不是可以直接写一个函数,之后每次调用只改变参数,你这个代码太笨重了……

谢谢建议,我会试试改的
回复 支持 反对

使用道具 举报

发表于 2014-4-28 22:32:56 | 显示全部楼层
用亚克力板做的?自己加工的?我也要做一个小车。。找不到材料做底板......
回复 支持 反对

使用道具 举报

发表于 2014-4-29 08:28:16 | 显示全部楼层
重型机甲的感觉啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-29 12:37:50 | 显示全部楼层
wo123 发表于 2014-4-28 22:32
用亚克力板做的?自己加工的?我也要做一个小车。。找不到材料做底板......

是亚克力,也是自己加工,淘宝有很多代工的
回复 支持 反对

使用道具 举报

发表于 2015-5-31 11:39:16 | 显示全部楼层
四四方方的大脚车,哈哈!带亮瞎眼的大前灯
发送端的程序咧?可以给一份不,回头我也照着你的做一个,嘿嘿!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 11:19 , Processed in 0.056234 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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