Was this page helpful?

Arduino code

內容表格
沒有標頭
#include <Servo.h>    //舵机控制库
#include <DistanceSRF04.h>
DistanceSRF04 Dist;
int distance;
int EN2 = 2; 
int EN3 = 3;
int EN4 = 4;
int EN5 = 5;
int LED1 = 6;
int LED2 = 7;
int val,kkl,lkf;
int lx=90;
//2路舵机
Servo servoX; //云台X轴舵机 左右
Servo servoY; //云台Y轴舵机 上下
int mkk;
///////////////////////////////////////
void ting(void)
        {
          digitalWrite(EN2,LOW);  
          digitalWrite(EN3,LOW);
          digitalWrite(EN4,LOW);  
          digitalWrite(EN5,LOW);      
        }
       
void qian(void)
        {       
          digitalWrite(EN2,LOW);
          digitalWrite(EN3,HIGH);
          digitalWrite(EN4,LOW);
          digitalWrite(EN5,HIGH);
        }
void hou(void)
        {       
          digitalWrite(EN2,HIGH);
          digitalWrite(EN3,LOW);
          digitalWrite(EN4,HIGH);
          digitalWrite(EN5,LOW);           
        }
void zuo(void)
        {       
          digitalWrite(EN2,LOW);
          digitalWrite(EN3,HIGH);
          digitalWrite(EN4,HIGH);
          digitalWrite(EN5,LOW);    
        }       
void you(void)
        {       
          digitalWrite(EN2,HIGH);
          digitalWrite(EN3,LOW);
          digitalWrite(EN4,LOW);
          digitalWrite(EN5,HIGH);
         
        } 
//舵机左转
void servo_left()
{
  int servotemp=servoX.read();//获取舵机目前的角度值
  servotemp-=2;//舵机运动1度
  if(servotemp<170&&servotemp>10) //我定义的舵机旋转角度为10度到170度
  servoX.write(servotemp);
  else if (servotemp<=10)  servoX.write(10);
  else servoX.write(170);
}


//舵机右转
void servo_right()
{
  int servotemp=servoX.read();//获取舵机目前的角度值
  servotemp+=2;//舵机运动1度
  if(servotemp<170&&servotemp>10)//我定义的舵机旋转角度为10度到170度
  servoX.write(servotemp);
  else if (servotemp<=10)  servoX.write(10);
  else servoX.write(170);
}


//舵机上转
void servo_up()
{
  int servotemp1=servoY.read();//获取舵机目前的角度值
  servotemp1+=2;//舵机运动1度
  if(servotemp1<170&&servotemp1>10)//我定义的舵机旋转角度为10度到170度
  servoY.write(servotemp1);
  else if (servotemp1<=10)  servoY.write(10);
  else servoY.write(170);
}


//舵机下转
void servo_down()
{
  int servotemp1=servoY.read();//获取舵机目前的角度值
  servotemp1-=2;//舵机运动1度
  if(servotemp1<170&&servotemp1>10)//我定义的舵机旋转角度为10度到170度
  servoY.write(servotemp1);
  else if (servotemp1<=10)  servoY.write(10);
  else servoY.write(170);
}
void setup()
{
  Dist.begin(8,9);
  servoX.attach(10);//水平舵机接10脚
  servoY.attach(11);//上下舵机接11脚
  servoX.write(90);//输出舵机初始位置为90度
  servoY.write(90);//输出舵机初始位置为90度
  Serial.begin(9600);//设置波特率为9600bps
  pinMode(EN2,OUTPUT);
  pinMode(EN3,OUTPUT);
  pinMode(EN4,OUTPUT);
  pinMode(EN5,OUTPUT);
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
   for(kkl=0;kkl<60;kkl++)
  {
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,HIGH);
    delay(500);//延时500M秒,避免WF171路由器启动时产生干扰字符从串口发出
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    delay(500);
  }
  lkf=0;
}


void loop()
{
  distance = Dist.getDistanceCentimeter();
  if(distance<=5 & distance>1)
  {
    hou();
    delay(100);
    ting();
    distance=0;
  }
  if(Serial.available())
  {
    lkf = Serial.read();
  switch(lkf)
  {
  case 'a':
     qian();
     break;
     lkf=0;    
   case 'b':
     hou();
     lkf=0;
     break;    
   case 'c':
     zuo();
     lkf=0;
     break;
   case 'd':
    you();
    lkf=0;
     break;
   case 'e':
    ting();
    lkf=0;
     break; 
   case 'j':
     servo_left();
     lkf=0;
     break;
   case 'l':
     servo_right();
     lkf=0;
     break;
   case 'k':
    servo_up();
    lkf=0;
    break;
   case 'i':
     servo_down();
     lkf=0;
     break;
  case 'n':
     digitalWrite(LED1,HIGH);
     digitalWrite(LED2,HIGH);
     lkf=0;
     break;
  case 'm':
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    lkf=0;
    break;
}
}
}

Was this page helpful?
標籤 (Edit tags)
  • No tags
您必須 登入 才能發佈評論。
Powered by MindTouch Core