#include <Servo.h>
// 定义3个舵机
Servo myservo[3];
// 舵机的引脚
int pins[] = {9,10,11};
// 左右摆动的度数
int thresholdAngle = 30;
// 初始/基准位置
int baseAngle = 90;
void setup() {
Serial.begin(9600);
for(int i=0; i<3; i++){
myservo[i].attach(pins[i]);
myservo[i].write(baseAngle);
}
}
// 时间间隔 ms
int lastTime = 0, interval = 1000;
bool flag = false;
void loop() {
// 电位器数值
int dVal = analogRead(A0);
// 当前时间
int currentTime = millis();
if(lastTime == 0 || currentTime - lastTime >= interval)
{ //
lastTime = currentTime;
if(flag){
for(int i=0; i<3; i++){
// random(0,181) [0,181)
myservo[i].write(random(0,181));
// if(myservo[i].read() <= baseAngle-thresholdAngle)
// { // 转动到最左边 60 位置,向右转动
// myservo[i].write(baseAngle+thresholdAngle);
// }
// else if(myservo[i].read() >= baseAngle+thresholdAngle)
// { // 转动到最右边 120 位置,向左转动
// myservo[i].write(baseAngle-thresholdAngle);
// }
// else
// {
// myservo[i].write(baseAngle-thresholdAngle);
// }
}
}
}
// 调用方法/函数
float d = getDistance(4,7);
Serial.println(d);
if(d <= 100){
flag = true;
}else{
flag = false;
}
interval = map(d,2,100,100,1000);
delay(30);
}
// 超声波传感器获取距离 cm
float getDistance(int trig, int echo) {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
float distance = pulseIn(echo, HIGH) * 0.0343 / 2;
delay(10);
return distance;
}