舵机旋转找出可以通行的方向

目的: 如果测距传感器前面有阻挡物,则左右旋转舵机,探测出左右距离,然后输出距离较大的一边。

 

舵机接线:

一根是红色,连到+5V上。一根棕色(有些是黑的),连到GND。还有一根是黄色或者橘色,连到数字引脚9。

超声波传感器接线:

VCC    -- 供5V电源

TRIG   -- 触发控制信号输入

ECHO -- 回响信号输出等四个接口端

GND   -- 为地线

 

#define Trig 2 //引脚Tring 连接 IO D2
#define Echo 3 //引脚Echo 连接 IO D3 
float cm; //距离变量
float temp; 

#include <Servo.h> // 声明调用Servo.h库
Servo myservo; // 创建一个舵机对象
void setup() 
{
  myservo.attach(9);  // 舵机信号线连接D9
  pinMode(Trig, OUTPUT); 
  pinMode(Echo, INPUT);
  myservo.write(90); //通电时,舵机朝向为90方向
  Serial.begin(9600);
  }
void loop() 

  int jvli = distance();
  if(jvli<10)  //如果距离小于10厘米,舵机开始旋转
  {
    myservo.write(150);  
    delay(1000); 
    int a = distance();
    Serial.println(a); //输出左侧距离
    delay(100);
    myservo.write(30); 
    delay(1000); 
    int b = distance();
    Serial.println(b); //输出右侧距离
    delay(100);
    if(a<=b)
    {
      Serial.println("右侧可以通行");
      }else
      {
        Serial.println("左侧可以通行");
        }
    myservo.write(90);
    delay(100);
    }

  }

int distance()
 {
  //给Trig发送一个低高低的短时间脉冲,触发测距
  digitalWrite(Trig, LOW); //给Trig发送一个低电平
  delayMicroseconds(2);    //等待 2微妙
  digitalWrite(Trig,HIGH); //给Trig发送一个高电平
  delayMicroseconds(10);    //等待 10微妙
  digitalWrite(Trig, LOW); //给Trig发送一个低电平
  temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
  cm = (temp * 17 )/1000; //把回波时间换算成cm
  return cm;
  delay (100);
  }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值