// Большой круг + правильная логика
// L298N без ENA/ENB + HE-US4 + RGB
#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; // ≤ 50 см → стоп
const float THRESHOLD_ON = 55.0; // > 55 см → едет + красный
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(" → КРАСНЫЙ + БОЛЬШОЙ КРУГ");
moveBigCircle();
}
else if (distance_cm <= THRESHOLD_OFF) {
digitalWrite(RED_PIN, LOW);
stopMotors();
Serial.println(" → СТОП + СВЕТ ВЫКЛ");
}
delay(100);
}
// ====================== БОЛЬШОЙ КРУГ ======================
void moveBigCircle() {
// Левый мотор — чуть медленнее
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;
}