蜂鸣器、超声波学习


/** 超声波雷达引脚 **/

#define DH1 523
#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
#define ULTRASONIC_IN_PIN          2  // 超声波接收脚 E
#define ULTRASONIC_OUT_PIN         3  // 超声波发射脚 T
#define LED 4 //指示灯引脚
int tune[] = {DH1,DH1,DH1,DH1};
float duration[] = {1,0.5,0.5,1};
int length;
int beep = 12;
//距离
float distance = 0;

void setup() {
    Serial.begin(9600);
    pinMode(ULTRASONIC_IN_PIN, INPUT); //
    pinMode(ULTRASONIC_OUT_PIN, OUTPUT); //
    pinMode(beep,OUTPUT);
    length = sizeof(tune)/sizeof(tune[0]);
    Serial.println("-------------- start -----------------");
}

void loop() {
    digitalWrite(ULTRASONIC_OUT_PIN, LOW); //
    delayMicroseconds(2);
    digitalWrite(ULTRASONIC_OUT_PIN, HIGH); //超声波发送一个不小于10us的高脉冲
    delayMicroseconds(10);
    digitalWrite(ULTRASONIC_OUT_PIN, LOW); //
    float Fdistance = pulseIn(ULTRASONIC_IN_PIN, HIGH); // 读取返回脉冲宽度(即高电平持续的时间长短),单位为ms

    distance = Fdistance / 5.8 / 10; // 时间转成距离 (单位:公分)
    if(distance<=5){
      digitalWrite(LED,HIGH);
      for(int x=0;x<length;x++){
        tone(beep,tune[x]);
        delay(500*duration[x]);
        noTone(beep);
        delay(100);
      }
    }else{
      digitalWrite(LED,LOW);
    }
}