#define ultrasonic_trig1_PIN 9
#define ultrasonic_echo1_PIN 10
#define ultrasonic_trig2_PIN 7
#define ultrasonic_echo2_PIN 8
#define ultrasonic_trig3_PIN 5
#define ultrasonic_echo3_PIN 6
#define photosensitive_PIN A0 //光敏
#define led_PIN 2 //led灯
#define buzz_PIN 3 //蜂鸣器
#define gps_rx_PIN 12 //gps接受引脚
#define mp3_tx_PIN 11 //mp3控制引脚
#define vibration_PIN 4 //振动马达引脚
void setup() {
Serial.begin(9600);
pinMode(ultrasonic_trig1_PIN, OUTPUT);
pinMode(ultrasonic_echo1_PIN, INPUT);
pinMode(ultrasonic_trig2_PIN, OUTPUT);
pinMode(ultrasonic_echo2_PIN, INPUT);
pinMode(ultrasonic_trig3_PIN, OUTPUT);
pinMode(ultrasonic_echo3_PIN, INPUT);
pinMode(led_PIN, OUTPUT);
pinMode(buzz_PIN, OUTPUT);
pinMode(vibration_PIN, OUTPUT);
pinMode(photosensitive_PIN, INPUT);
digitalWrite(led_PIN,HIGH);
digitalWrite(buzz_PIN,HIGH);
digitalWrite(vibration_PIN,LOW);
}
uint32_t old_time = 0;
double lat=0,lng=0;
void loop() {
float d1 = readDistanceCM(ultrasonic_trig1_PIN, ultrasonic_echo1_PIN); //获取距离1
float d2 = readDistanceCM(ultrasonic_trig2_PIN, ultrasonic_echo2_PIN); //获取距离2
float d3 = readDistanceCM(ultrasonic_trig3_PIN, ultrasonic_echo3_PIN); //获取距离3
int lux = 1024-analogRead(photosensitive_PIN); //获取照度
float d_min = min(d1,min(d2,d3)); //得到3个距离中的最小距离
if(lux<=80){ //天黑亮灯
digitalWrite(led_PIN,LOW);
}else if(lux>=100){
digitalWrite(led_PIN,HIGH);
}
if(d_min<=30){ //距离过近振动
digitalWrite(vibration_PIN,HIGH);
}else if(d_min>=50){
digitalWrite(vibration_PIN,LOW);
}
Serial.print("最小距离:"+String(d1) + ",照度"+String(lux)+",纬度"+String(lng)+",经度"+String(lat)+"迭代一次时间");
Serial.println(millis() - old_time); //测试程序性能
old_time = millis();
}
float readDistanceCM(byte _trig_pin, byte _echo_pin) {
digitalWrite(_trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(_trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(_trig_pin, LOW);
int duration = pulseIn(_echo_pin, HIGH);
return duration * 0.034 / 2;
}