自己做的小车,求大牛指导
闲着蛋疼,做了辆车遥控,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 static/image/common/back.gif
四驱啊,霸气!
不是四驱跑不动,有点重,不过极速还是挺快的。哈哈 24L01 我也有2个 没空去搞
程序简单明了 改成比例的就更好了 方向控制,是不是可以直接写一个函数,之后每次调用只改变参数,你这个代码太笨重了…… 124330190 发表于 2014-4-28 09:36 方向控制,是不是可以直接写一个函数,之后每次调用只改变参数,你这个代码太笨重了……
谢谢建议,我会试试改的 用亚克力板做的?自己加工的?我也要做一个小车。。找不到材料做底板...... 重型机甲的感觉啊 wo123 发表于 2014-4-28 22:32 static/image/common/back.gif
用亚克力板做的?自己加工的?我也要做一个小车。。找不到材料做底板......
是亚克力,也是自己加工,淘宝有很多代工的 四四方方的大脚车,哈哈!带亮瞎眼的大前灯:lol
发送端的程序咧?可以给一份不,回头我也照着你的做一个,嘿嘿!
页:
[1]