miércoles, 11 de febrero de 2026

SET POINT CODE

 #include <ESP32Servo.h>


// --- CONFIGURACIÓN DE PINES ---
const int PIN_TRIG   = 5;    
const int PIN_ECHO   = 18;  
const int PIN_SERVO  = 19;  
const int PIN_BUZZER = 4;    

Servo miServo;

// ==========================================================
// 🚩 SECCIÓN DE HACKEO
// ==========================================================
int setPointCm = 100;      // DISTANCIA DE ACTIVACIÓN (Umbral)
int velocidadServo = 30;   // VELOCIDAD: Cuánto avanza el servo en cada ciclo
int tiempoSonido = 50;    // DURACIÓN: Qué tan largo es cada "pitido"
// ==========================================================

// Variables de control interno (No tocar para el hackeo básico)
int posicionActual = 0;  
int direccion = 1;        // 1 para derecha, -1 para izquierda

void setup() {
  Serial.begin(115200);
 
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  pinMode(PIN_BUZZER, OUTPUT);
 
  miServo.attach(PIN_SERVO);
  miServo.write(posicionActual);
 
  Serial.println(">>> SISTEMA DE MOVIMIENTO CONSTANTE LISTO <<<");
}

void loop() {
  // 1. MEDICIÓN DE DISTANCIA
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
  long duracion = pulseIn(PIN_ECHO, HIGH);
  int distancia = duracion * 0.034 / 2;

  // 2. LÓGICA DE ACTIVACIÓN CONSTANTE
  if (distancia > 0 && distancia < setPointCm) {
   
    Serial.print("OBJETO DETECTADO A: ");
    Serial.println(distancia);

    // --- MOVIMIENTO CONSTANTE ---
    // Actualizamos la posición sumando o restando según la dirección
    posicionActual += (direccion * velocidadServo);
   
    // Si llegamos a los límites (0 o 180), rebotamos
    if (posicionActual >= 180) {
      posicionActual = 180;
      direccion = -1; // Cambia a la izquierda
    }
    if (posicionActual <= 0) {
      posicionActual = 0;
      direccion = 1;  // Cambia a la derecha
    }

    miServo.write(posicionActual);

    // --- SONIDO PROGRESIVO ---
    // El sonido suena más rápido conforme te acercas
    digitalWrite(PIN_BUZZER, HIGH);
    delay(tiempoSonido);
    digitalWrite(PIN_BUZZER, LOW);
   
    // El silencio se acorta según la distancia (más velocidad de pitido)
    delay(distancia * 5);
  }
  else {
    // --- ESTADO DE REPOSO ---
    digitalWrite(PIN_BUZZER, LOW);
    // Opcional: El servo puede quedarse quieto o volver a 0
    // miServo.write(0);
    delay(50);
  }
}

No hay comentarios:

Publicar un comentario