oujz123 发表于 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;


void setup()
{
Mirf.spi = &MirfHardwareSpi;          //加载24L01SPI
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={AA,BB,CC,DD,EE,FF};
    value=dangWei;
    for(int i=0;i<6;i++){
      
      if(dangWei>value)
      value=dangWei;
    }
   
   

/************************** 处理数据*****************/
    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,255);
delay(300);
for(i=1;i<=10;i++){
    analogWrite(led,255);
   analogWrite(led,0);
    delay(300);
   
}
}


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

/*void CCW()
{
analogWrite(led,255);
delay(300);
for(i=9;i>=0;i--){
    analogWrite(led,255);
    analogWrite(led,0);
    delay(300);
   
}
analogWrite(led,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;
   
}

}

voidzeroR()
{
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);
}




沧海笑1122 发表于 2014-4-27 20:30:42

四驱啊,霸气!

oujz123 发表于 2014-4-27 22:55:11

沧海笑1122 发表于 2014-4-27 20:30 static/image/common/back.gif
四驱啊,霸气!

不是四驱跑不动,有点重,不过极速还是挺快的。哈哈

以无聊的名义 发表于 2014-4-27 23:33:25

24L01 我也有2个 没空去搞
程序简单明了 改成比例的就更好了

124330190 发表于 2014-4-28 09:36:22

方向控制,是不是可以直接写一个函数,之后每次调用只改变参数,你这个代码太笨重了……

oujz123 发表于 2014-4-28 09:57:46

124330190 发表于 2014-4-28 09:36 方向控制,是不是可以直接写一个函数,之后每次调用只改变参数,你这个代码太笨重了……

谢谢建议,我会试试改的

wo123 发表于 2014-4-28 22:32:56

用亚克力板做的?自己加工的?我也要做一个小车。。找不到材料做底板......

lison 发表于 2014-4-29 08:28:16

重型机甲的感觉啊

oujz123 发表于 2014-4-29 12:37:50

wo123 发表于 2014-4-28 22:32 static/image/common/back.gif
用亚克力板做的?自己加工的?我也要做一个小车。。找不到材料做底板......

是亚克力,也是自己加工,淘宝有很多代工的

雨轩 发表于 2015-5-31 11:39:16

四四方方的大脚车,哈哈!带亮瞎眼的大前灯:lol
发送端的程序咧?可以给一份不,回头我也照着你的做一个,嘿嘿!
页: [1]
查看完整版本: 自己做的小车,求大牛指导