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


#define TRIG_PIN   9
#define ECHO_PIN   10
#define RED_PIN    11

#define IN1  4
#define IN2  5
#define IN3  7
#define IN4  8

const float THRESHOLD_OFF = 50.0;
const float THRESHOLD_ON  = 55.0;

float distance_cm = 0;

void setup() {
  Serial.begin(9600);
  
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(RED_PIN, OUTPUT);
  
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  
  stopMotors();
  
  Serial.println("=== ВСЁ ПОДКЛЮЧЕНО ===");
}

void loop() {
  distance_cm = measureDistance();
  
  Serial.print("Расстояние: ");
  Serial.print(distance_cm, 1);
  Serial.print(" см  ");

  if (distance_cm > THRESHOLD_ON) {
    digitalWrite(RED_PIN, HIGH);
    Serial.println("→ КРАСНЫЙ + КРУГ");
    moveInCircle();
  } 
  else if (distance_cm <= THRESHOLD_OFF) {
    digitalWrite(RED_PIN, LOW);
    stopMotors();
    Serial.println("→ ВЫКЛ + СТОП");
  }

  delay(120);
}

void moveInCircle() {
  digitalWrite(IN1, HIGH);   // левый вперёд
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);   // правый вперёд
  digitalWrite(IN4, LOW);
}

void stopMotors() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

float measureDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(4);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000);
  if (duration == 0) return 999.9;

  float dist = duration * 0.0343 / 2.0;
  if (dist < 2 || dist > 400) return 999.9;
  return dist;
}