Загрузка данных


#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;
}