查看: 176|回复: 1

[未解决] 这个程序有什么问题

[复制链接]

该用户从未签到

发表于 2018-11-8 15:14 | 显示全部楼层 |阅读模式
#include <Servo.h>
//左右电机驱动
const int ENAA=14;  
const int IN1A=15;
const int IN2A=16;

const int ENAB=17;
const int IN1B=18;
const int IN2B=19;

unsigned long time;
int startspeed;
int topspeed;
int dir;
int value;

/*边沿检测 检测到边沿返回值高电平*/
const int BY1=28;
const int BY2=29;
const int BY3=30;
const int BY4=31;

/*对手检测 检测到对手返回值低电平*/
const int DS1=41;
const int DS2=42;
const int DS3=43;
const int DS4=44;
const int DS5=45;
const int DS6=46;

Servo myservo1;
Servo myservo2;
int pos = 0;

const int TrigPin = 2;
const int EchoPin = 3;
int cm;
int CM;

void setup()
{
   
    Serial.begin(9600);
    pinMode(TrigPin,OUTPUT);
    pinMode(EchoPin,INPUT);
    pinMode(IN1A,OUTPUT);
    pinMode(IN2A,OUTPUT);
    pinMode(ENAA,OUTPUT);
    pinMode(ENAB,OUTPUT);
    pinMode(IN1B,OUTPUT);
    pinMode(IN2B,OUTPUT);
    pinMode(BY1,INPUT);  //输入模式
    pinMode(BY2,INPUT);
    pinMode(BY3,INPUT);
    pinMode(BY4,INPUT);
    pinMode(DS1,INPUT);
    pinMode(DS2,INPUT);
    pinMode(DS3,INPUT);
    pinMode(DS4,INPUT);
    pinMode(DS5,INPUT);
    pinMode(DS6,INPUT);
    myservo1.attach(53);
    myservo2.attach(52);
}

void loop()
{
  myservo_ready();
  delay(1000);
  digitalWrite(IN1A,HIGH);//正转
  digitalWrite(IN2A,LOW);
  analogWrite(ENAA,50);
  digitalWrite(IN1B,HIGH);
  digitalWrite(IN2B,LOW);
  analogWrite(ENAB,50);
  delay(1000);
  if (CM = 6){
  myservo_first ();
  }
  delay(1000);
  digitalWrite(IN1A,LOW);//停
  digitalWrite(IN2A,LOW);
  analogWrite(ENAA,50);
  digitalWrite(IN1B,LOW);
  digitalWrite(IN2B,LOW);
  analogWrite(ENAB,50);
  digitalWrite(IN1A,HIGH);//正转
  digitalWrite(IN2A,LOW);
  analogWrite(ENAA,50);
  digitalWrite(IN1B,HIGH);
  digitalWrite(IN2B,LOW);
  analogWrite(ENAB,50);
  delay(1500);
  digitalWrite(IN1A,LOW);//停
  digitalWrite(IN2A,LOW);
  analogWrite(ENAA,50);
  digitalWrite(IN1B,LOW);
  digitalWrite(IN2B,LOW);
  analogWrite(ENAB,50);
  myservo_back ();
  delay(1000);
  digitalWrite(IN1A,HIGH);//正转
  digitalWrite(IN2A,LOW);
  analogWrite(ENAA,50);
  digitalWrite(IN1B,HIGH);
  digitalWrite(IN2B,LOW);
  analogWrite(ENAB,50);
  delay(1000);
  myservo_stay ();
  if(digitalRead(BY1)==HIGH && digitalRead(BY2)==LOW && digitalRead(BY3)==LOW && digitalRead(BY4)==LOW)//左前检测到边沿
  {
          digitalWrite(IN1A,LOW);//后退
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(500);
          digitalWrite(IN1A,HIGH);//右转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(510);
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
    }
    else if(digitalRead(BY1)==LOW && digitalRead(BY2)==HIGH && digitalRead(BY3)==LOW && digitalRead(BY4)==LOW)//右前检测到边沿
    {
          digitalWrite(IN1A,LOW);//后退
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(500);
          digitalWrite(IN1A,LOW);//左转
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(510);
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
      }
      else if(digitalRead(BY1)==LOW && digitalRead(BY2)==LOW && digitalRead(BY3)==HIGH && digitalRead(BY4)==LOW)//右后检测到边沿
      {
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
          digitalWrite(IN1A,LOW);//左转
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(510);
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
        }
        else if(digitalRead(BY1)==LOW && digitalRead(BY2)==LOW && digitalRead(BY3)==LOW && digitalRead(BY4)==HIGH)//左后检测到边沿
        {
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
          digitalWrite(IN1A,HIGH);//右转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(510);
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
          }
      else if(digitalRead(BY1)==HIGH && digitalRead(BY2)==HIGH && digitalRead(BY3)==LOW && digitalRead(BY4)==LOW)//前面检测到边沿
      {
          digitalWrite(IN1A,LOW);//后退
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(700);
        }
        else if(digitalRead(BY1)==LOW && digitalRead(BY2)==LOW && digitalRead(BY3)==HIGH && digitalRead(BY4)==HIGH)//后面检测到边沿
        {
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(700);
        }
      else if(digitalRead(BY1)==HIGH && digitalRead(BY2)==LOW && digitalRead(BY3)==LOW && digitalRead(BY4)==HIGH)//左侧检测到边沿
        {
          digitalWrite(IN1A,HIGH);//右转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(255);
          }
      else if(digitalRead(BY1)==LOW && digitalRead(BY2)==HIGH && digitalRead(BY3)==HIGH && digitalRead(BY4)==LOW)//右侧检测到边沿
        {
          digitalWrite(IN1A,LOW);//左转
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(255);
          }
      else if(digitalRead(BY1)==HIGH && digitalRead(BY2)==HIGH && digitalRead(BY3)==LOW && digitalRead(BY4)==HIGH)//左前三角检测到边沿
        {
          digitalWrite(IN1A,HIGH);//右转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(500);
          }
       else if(digitalRead(BY1)==HIGH && digitalRead(BY2)==HIGH && digitalRead(BY3)==HIGH && digitalRead(BY4)==LOW)//右前三角检测到边沿
        {
          digitalWrite(IN1A,LOW);//左转
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
        }
      else if(digitalRead(BY1)==LOW && digitalRead(BY2)==HIGH && digitalRead(BY3)==HIGH && digitalRead(BY4)==LOW)//右后三角检测到边沿
        {
          digitalWrite(IN1A,LOW);//左转
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          delay(500);
         }
       else if(digitalRead(BY1)==LOW && digitalRead(BY2)==HIGH && digitalRead(BY3)==HIGH && digitalRead(BY4)==LOW)//Z左后三角检测到边沿
        {
          digitalWrite(IN1A,HIGH);//右转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          delay(500);
         }
      else if(digitalRead(BY1)==LOW && digitalRead(BY2)==LOW && digitalRead(BY3)==LOW && digitalRead(BY4)==LOW)//在边沿内
        {
          if(digitalRead(DS1)==LOW && digitalRead(DS2)==LOW)
          {
           do{
          digitalWrite(IN1A,HIGH);//正转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
             }while(digitalRead(DS1)==LOW && digitalRead(DS2)==LOW);
          }
      else if(digitalRead(DS3)==LOW && digitalRead(DS4)==LOW)
        {
         do{
          digitalWrite(IN1A,LOW);//后退
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          }while(digitalRead(DS3)==LOW && digitalRead(DS4)==LOW);//在边沿内动作
         }
      else if(digitalRead(DS5)==LOW)
      {
        do{
          digitalWrite(IN1A,LOW);//左转
          digitalWrite(IN2A,HIGH);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,HIGH);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
          }while(digitalRead(DS5)==LOW);//在边沿内动作
        }
       else if(digitalRead(DS6)==LOW)
      {
        do{
          digitalWrite(IN1A,HIGH);//右转
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,HIGH);
          analogWrite(ENAB,50);
          }while(digitalRead(DS6)==LOW);
          }
      else
       {
          digitalWrite(IN1A,LOW);//停
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
       }
    }
    else
    {
          digitalWrite(IN1A,LOW);//停
          digitalWrite(IN2A,LOW);
          analogWrite(ENAA,50);
          digitalWrite(IN1B,LOW);
          digitalWrite(IN2B,LOW);
          analogWrite(ENAB,50);
    }
}

void myservo_ready () {
  myservo1.write(25);
  myservo2.write(25);
}

void myservo_first () {
for(pos = 25 ; pos <= 147 ; pos++) //转动底座舵机
  {
      myservo1.write(pos);
      delay (10);
  }
  myservo1.write(147);
  myservo2.write(25);
}

void myservo_back () {
for(pos = 147 ; pos >= 90 ; pos++) //转动底座舵机
  {
      myservo1.write(pos);
      delay (10);
  }
  for(pos = 25 ; pos <= 147 ; pos++) //转动底座舵机
  {
      myservo2.write(pos);
      delay (10);
  }
  myservo1.write(147);
  myservo2.write(25);
}

void myservo_stay () {
  myservo1.write(120);
  myservo2.write(120);
}

void chaoshengbo() {
  digitalWrite(TrigPin,LOW);  //低高低电平发一个短时间脉冲出去
  delayMicroseconds(2);
  digitalWrite(TrigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(TrigPin,LOW);

  cm = pulseIn(EchoPin,HIGH)/58.0;  //将回波时间换算成cm
  cm = (int(cm * 100.0))/100.0;  //保留两位小数

  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
  delay(500);
  CM = cm;
}
程序上传上去只有舵机运行,并且舵机运行了147度之后会一下打到180度,然后进入过载保护程序从新运行。如何解决?
求支招

该用户从未签到

 楼主| 发表于 2018-11-8 15:16 | 显示全部楼层
视频地址http://tieba.baidu.com/p/0
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

热门推荐

关于switch的问题
关于switch的问题
为什么switch 只能实现第一个case 1:的显示,case 2:的显示不出来,我用蓝牙发一个
原创 drawbot平面关节机械臂 教程直播贴
原创 drawbot平面关节机械
这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
esp8266完美对接机智云与安卓APP开发和远程控制
esp8266完美对接机智云与
在极客工坊和咱们社区混了很久了,也没有发过帖子,第一次哦,不好意思也没有太多的时
Arduino显示所选端口号找不到主板
Arduino显示所选端口号找
请问一下我这个问题是板子坏了,还是什么其他问题
visual studio 2017 下载程序导致串口数据出错
visual studio 2017 下载
想做一个蓝牙通信的功能,程序如下,发现用官方的IDE没有任何问题,但是用visual stud
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
快速回复 返回顶部 返回列表