// Объявляем константы для пинов датчика расстояния
const byte trig = 4; // пин для подачи сигнала на датчик
const byte echo = 5; // пин для приема отраженного сигнала от датчика
const byte buzzer = 2; // пин для подачи сигнала на пьезоэлемент
void setup() {
// Устанавливаем режимы работы пинов
pinMode(trig, OUTPUT); // пин trig как выход
pinMode(buzzer, OUTPUT); // пин buzzer как выход
pinMode(echo, INPUT); // пин echo как вход
// Устанавливаем режимы работы пинов 12-15 как выходы
for(int i=12;i<16;i++){
pinMode(i, OUTPUT);
}
Serial.begin(9600); // инициализируем последовательный порт со скоростью 9600 бод
}
void loop() {
// Преобразуем значение расстояния в сантиметрах в значение периода от 0 до 4
int period=map(dist(),0,200,0,4);
// Выводим на монитор порта значение расстояния и периода
Serial.print(dist());
Serial.print(" ");
Serial.println(period);
// В зависимости от значения периода включаем или выключаем светодиоды и пьезоэлемент
if(period==3 ||period==4){
// Выключаем светодиоды 12-15
for(int i=12;i<16;i++){
digitalWrite(i,0);
}
// Включаем светодиод 12
digitalWrite(12,1);
// Подаем сигнал на пьезоэлемент с частотой 600 Гц
tone(buzzer,600);
// Ждем 500 мс
delay(500);
// Выключаем сигнал на пьезоэлемент
noTone(buzzer);
// Ждем 500 мс
delay(500);
}else if(period==2){
// Выключаем светодиоды 12-15
for(int i=12;i<16;i++){
digitalWrite(i,0);
}
// Включаем светодиоды 12 и 13
digitalWrite(12,1);
digitalWrite(13,1);
// Подаем сигнал на пьезоэлемент с частотой 600 Гц
tone(buzzer,600);
// Ждем 300 мс
delay(300);
// Выключаем сигнал на пьезоэлемент
noTone(buzzer);
// Ждем 300 мс
delay(300);
}else if(period==1){
// Включаем светодиоды 12-14
for(int i=12;i<15;i++){
digitalWrite(i,HIGH);
}
// Выключаем светодиод 15
digitalWrite(15,0);
// Подаем сигнал на пьезоэлемент с частотой 600 Гц
tone(buzzer,600);
// Ждем 150 мс
delay(150);
// Выключаем сигнал на пьезоэлемент
noTone(buzzer);
// Ждем 150 мс
delay(150);
}else if(period==0){
// Включаем светодиоды 12-15
for(int i=12;i<16;i++){
digitalWrite(i,HIGH);
}
// Подаем сигнал на пьезоэлемент с частотой 600 Гц
tone(buzzer,600);
// Ждем 50 мс
delay(50);
// Выключаем сигнал на пьезоэлемент
noTone(buzzer);
// Ждем 50 мс
delay(50);
}else{
// Выключаем светодиоды 12-15
for(int i=12;i<16;i++){
digitalWrite(i,0);
}
// Выключаем сигнал на пьезоэлемент
noTone(buzzer);
}
}
// Функция для измерения расстояния с помощью датчика
int dist(){
int t,s; // объявляем переменные для времени и расстояния
digitalWrite(trig, HIGH); // подаем высокий уровень на пин trig
delayMicroseconds(10); // ждем 10 микросекунд
digitalWrite(trig, LOW); // подаем низкий уровень на пин trig
t=pulseIn(echo,HIGH); // измеряем длительность импульса на пине echo
s=0.034*t/2; // вычисляем расстояние по формуле s = v*t/2, где v = 0.034 см/мкс
return s; // возвращаем значение расстояния
}