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


// Постоянное движение по БОЛЬШОМУ кругу
// Красный горит всегда, когда расстояние > 55 см
// Робот едет ВСЕГДА, никогда не останавливается

#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 = 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);
  
  Serial.println("=== РОБОТ ПОСТОЯННО ЕДЕТ ПО БОЛЬШОМУ КРУГУ ===");
  Serial.println("Никогда не останавливается!");
}

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

  if (distance_cm > THRESHOLD) {
    digitalWrite(RED_PIN, HIGH);      // Красный горит
    Serial.println("  → КРАСНЫЙ + БОЛЬШОЙ КРУГ");
  } else {
    digitalWrite(RED_PIN, LOW);       // Красный выключается когда очень близко
    Serial.println("  → Красный выкл (очень близко)");
  }

  moveBigCircle();   // ВСЕГДА едет по кругу, независимо от расстояния

  delay(80);
}

// ====================== БОЛЬШОЙ КРУГ (мягкий поворот) ======================
void moveBigCircle() {
  digitalWrite(IN1, HIGH);   // Левый мотор — чуть медленнее
  digitalWrite(IN2, LOW);
  
  digitalWrite(IN3, HIGH);   // Правый мотор — быстрее
  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;
}