// Постоянное движение по БОЛЬШОМУ кругу
// Красный горит всегда, когда расстояние > 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;
}