Mr.华仔 发表于 2017-4-24 14:42:02

求助智能小车,各个模块单独使用正常,合成总程序后小车电机不会动

这是个毕业设计,题目是自动泊车的设计与实现,实验目的是小车前进,找到车库并检测车库大小,然后按固定轨迹进行倒车。之前编写程序,两个电机、舵机、超声波都没有问题,现在放到总程序里,电机就不会动了,万用表测了引脚电压,也没有电压,不知道是哪里出了问题。#include <IRremote.h>//红外控制头文件
#include<Servo.h>//舵机头文件
Servo servol;

int angle=90;//设置舵机角度,初始化为90度
int sudu=8;
int location;
int RECV_PIN = 7;//红外接收脚位
const int leftledPin =4;    //左LED灯输出脚位
const int rightledPin =11;//右LED灯输出脚位
const int TrigPin = 8;
const int EchoPin = 9;

int MotorLeft1=14; //A0 IN1
int MotorLeft2=15; //A1 IN2
int MotorRight1=16;//A2 IN3
int MotorRight2=17;//A3 IN4
int MotorLPWM=5;//PWM5
int MotorRPWM=3;//PWM 3
float distance,val=0;   
float depth,width;   
unsigned long time1,time2;   
//******红外控制部分********
long left = 0x00FF22DD;//左转红外编码
long right =0x00FF02FD;//右转红外编码
long stop = 0x00FFC23D;//暂定红外编码
//红外接收部分程序代码
IRrecv irrecv(RECV_PIN);// 设置RECV_PIN(也就是11引脚)为红外接收端
decode_results results;//定义results变量为红外结果存放位置

void setup()
{servol.attach(10);
pinMode(RECV_PIN, INPUT);   
pinMode(leftledPin, OUTPUT);
pinMode(rightledPin, OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(MotorRight1, OUTPUT);// 腳位 14 (PWM)
pinMode(MotorRight2, OUTPUT);// 腳位 15 (PWM)
pinMode(MotorLeft1,OUTPUT);// 腳位 16 (PWM)
pinMode(MotorLeft2,OUTPUT);// 腳位 17 (PWM)
pinMode(MotorLPWM,OUTPUT);// 腳位 5 (PWM)
pinMode(MotorRPWM,OUTPUT);// 腳位 3 (PWM)
Serial.begin(9600);
irrecv.enableIRIn(); //启动红外解码
}
void Advance(int a)   // 前進
    {      
             digitalWrite(MotorRight1,HIGH);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,LOW);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,60);
            
             digitalWrite(MotorLeft1,LOW);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,HIGH);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,75);
   delay(a * 100);   
    }
void ADVANCE()   // 前進
{            digitalWrite(MotorRight1,HIGH);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,LOW);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,200);
            
             digitalWrite(MotorLeft1,LOW);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,HIGH);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,200);
             delay(50);
}

void Right(int b)      //右轉(雙輪)
    {
             digitalWrite(MotorRight1,LOW);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,HIGH);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,70);
            
             digitalWrite(MotorLeft1,LOW);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,HIGH);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,90);
   delay(b * 100);
    }
void RIGHT()
{            digitalWrite(MotorRight1,LOW);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,HIGH);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,200);
            
             digitalWrite(MotorLeft1,LOW);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,HIGH);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,200);
             delay(50);
}
void Left(int c)      //左轉(雙輪)
    {
             digitalWrite(MotorRight1,HIGH);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,LOW);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,90);
            
             digitalWrite(MotorLeft1,HIGH);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,LOW);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,100);
   delay(c * 100);
    }   
void LEFT()
{            digitalWrite(MotorRight1,HIGH);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,LOW);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,200);
            
             digitalWrite(MotorLeft1,HIGH);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,LOW);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,200);
             delay(50);
}
void Back(int d)          //後退 后退
{         
             digitalWrite(MotorRight1,LOW);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,HIGH);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,60);
             digitalWrite(MotorLeft1,HIGH);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,LOW);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,75);
   delay(d * 100);   
    }
void BACK()
{            digitalWrite(MotorRight1,LOW);//IN3 右电机 高电平正转
             digitalWrite(MotorRight2,HIGH);//IN4 右电机 高电平反转
             analogWrite(MotorRPWM,200);
             digitalWrite(MotorLeft1,HIGH);//IN1 左电机 高电平反转
             digitalWrite(MotorLeft2,LOW);//IN2 左电机 高电平正转
             analogWrite(MotorLPWM,200);
             delay(50);
}
void stopp(int e)         //停止
    {
             digitalWrite(MotorRight1,LOW);//IN3 右电机 高电平反转
             digitalWrite(MotorRight2,LOW);//IN4 右电机 高电平正转
             analogWrite(MotorRPWM,0);
            
             digitalWrite(MotorLeft1,LOW);//IN1 左电机 高电平正转
             digitalWrite(MotorLeft2,LOW);//IN2 左电机 高电平反转
             analogWrite(MotorLPWM,0);
   delay(e * 100);
    }

void Lparking()
{
BACK();
Back(1);
delay(100);
stopp(1);
delay(1000);
RIGHT();
Right(1);
delay(500);
stopp(1);
delay(1000);
BACK();
Back(1);
delay(800);
stopp(1);
delay(1000);
RIGHT();
Right(1);
delay(500);
stopp(1);
delay(1000);
BACK();
Back(1);
delay(1000);
   stopp(1);
}
   void Rparking()
{
BACK();
Back(1);
delay(100);
stopp(1);
delay(1000);
LEFT();
Left(1);
delay(300);
stopp(1);
delay(1000);
BACK();
Back(1);
delay(700);
stopp(1);
delay(1000);
LEFT();
Left(1);
delay(300);
stopp(1);
delay(1000);
BACK();
Back(1);
delay(1500);
   stopp(1);
}
void loop()
{//先等待遥控器选择方向再启动车辆
while(!irrecv.decode(&results))//等待接收到信号,把接收到的数据存储在变量results中
   {   
}
if (results.value == left )
    {
digitalWrite(leftledPin, HIGH);
digitalWrite(rightledPin, LOW);
angle=180;//舵机角度
location=0;
    }
    if (results.value == right )
    {
digitalWrite(leftledPin, LOW);
digitalWrite(rightledPin, HIGH);
angle=12; //舵机角度
location=1;
    }
servol.write(angle);//舵机转到相应的方向
ADVANCE();
Advance(1);//启动车辆前进
// 产生一个10us的高脉冲去触发TrigPin
do{
      digitalWrite(TrigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(TrigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(TrigPin, LOW);
    // 检测脉冲宽度,并计算出距离
      distance = pulseIn(EchoPin, HIGH) / 58.00;
      delay(50);
      depth=distance-val;
      val=distance;
}while(depth>25);
time1=millis();
do{
      digitalWrite(TrigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(TrigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(TrigPin, LOW);
    // 检测脉冲宽度,并计算出距离
      distance = pulseIn(EchoPin, HIGH) / 58.00;
      delay(50);
      depth=distance-val;
      val=distance;
}while(depth<-25);
time2=millis();   
width=(time2-time1)*sudu;//计算出车位宽度
if(width>20)
{   stopp(1);
    delay(1000);
    //两个LED双闪两下
digitalWrite(leftledPin, HIGH);
digitalWrite(rightledPin, HIGH);
delay(500);
digitalWrite(leftledPin, LOW);
digitalWrite(rightledPin, LOW);
delay(500);
digitalWrite(leftledPin, HIGH);
digitalWrite(rightledPin, HIGH);
delay(500);
digitalWrite(leftledPin, LOW);
digitalWrite(rightledPin, LOW);
delay(500);
   
    if(location=0)
    Lparking();//左侧泊车
    else
    Rparking();//右侧泊车
}
else
{//两个LED一直亮
    digitalWrite(leftledPin, HIGH);
    digitalWrite(rightledPin, HIGH);
    stopp(1);
    delay(1000);
    ADVANCE();
    Advance(1);//车辆继续前进
    }
}

董董soul 发表于 2017-4-25 11:44:46

可能是信号没收到,主程序里面每一步都检查过去,
页: [1]
查看完整版本: 求助智能小车,各个模块单独使用正常,合成总程序后小车电机不会动