#include <Adafruit_NeoPixel.h>
// === НАСТРОЙКИ ===
#define SIGNAL_PIN A0 // Пин сигнала ультразвукового датчика
#define LED_PIN 4 // Пин светодиодной ленты
#define NUM_LEDS 60 // Количество светодиодов в ленте
// Создаём объект для ленты
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
const int OBJECT_DETECT_DISTANCE = 300; // Расстояние обнаружения объекта (в см)
const int BLINK_DELAY = 200; // Задержка для мигания (миллисекунды)
bool objectDetected = false; // Флаг обнаружения объекта
void setup() {
Serial.begin(9600);
strip.begin();
strip.show(); // все диоды выключены
}
void loop() {
// Получаем расстояние
int distance = getDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Проверяем, есть ли объект в зоне обнаружения
if (distance > 0 && distance < OBJECT_DETECT_DISTANCE) {
// Объект обнаружен
if (!objectDetected) {
Serial.println("Object detected! Blinking RED...");
objectDetected = true;
}
// Мигаем красным
blinkRed();
}
else {
// Объекта нет
if (objectDetected) {
Serial.println("No object. GREEN light");
objectDetected = false;
}
// Горим зелёным
setColor(strip.Color(0, 255, 0));
}
delay(50); // небольшая задержка между измерениями
}
// Функция мигания красным
void blinkRed() {
// Включаем красный
setColor(strip.Color(255, 0, 0));
delay(BLINK_DELAY);
// Выключаем
setColor(strip.Color(0, 0, 0));
delay(BLINK_DELAY);
}
// Функция для установки цвета на всей ленте
void setColor(uint32_t color) {
for (int i = 0; i < NUM_LEDS; i++) {
strip.setPixelColor(i, color);
}
strip.show();
}
// Функция для получения расстояния с помощью 3-пинового датчика
int getDistance() {
// Отправляем триггер
pinMode(SIGNAL_PIN, OUTPUT);
digitalWrite(SIGNAL_PIN, LOW);
delayMicroseconds(2);
digitalWrite(SIGNAL_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(SIGNAL_PIN, LOW);
// Принимаем эхо
pinMode(SIGNAL_PIN, INPUT);
long duration = pulseIn(SIGNAL_PIN, HIGH, 30000);
// Расчёт расстояния
int distance = duration * 0.0343 / 2;
if (duration == 0) {
return 999; // нет объекта
}
return distance;
}