Ir al contenido principal

Código final.

 


//VERSION 2023 PROFRE. ALFREDO MARTINEZ ESCUDERO

int sensorIzq=A0; //SENSOR INFRARROJO IZQUIERDO
int lecturaIzq=0; //VARIABLE PARA GUARDAR LECTURA DE SENSOR IZQUIERDO      
int sensorDer=A1; //SENSOR INFRARROJO DERECHO
int lecturaDer=0; //VARIABLE PARA GUARDAR LECTURA DE SENSOR DERECHO
int trig = 2;  // SENSOR ULTRASONICO TRIGER Y ECHO      
int echo = 7;
int duracion, distancia;  // VARIABLES PARA FÓRMULA DE SENSOR ULTRASONICO
const int IN1 = 11; //MOTOR DERECHO
const int IN2 = 10;
const int IN3 = 9;//MOTOR IZQUIERDO
const int IN4 = 6;
int vel= 50;
int led=3;

void setup() {
  //Serial.begin(9600);
  pinMode(IN1, OUTPUT);  //PINES DE MOTORES COMO SALIDAS
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(echo, INPUT);  //SENSOR ULTRASONICO COMO ENTRADA Y SALIDA
  pinMode(trig, OUTPUT);
  pinMode(led, OUTPUT);
  delay(5000);  //TIEMPO DE SEGURIDAD REGLAMENTARIO
  digitalWrite(led, HIGH);
  avanzar();
  delay(1000);
}

void loop() {
  sonar();
  lecturaIzq = digitalRead(sensorIzq);
  lecturaDer = digitalRead(sensorDer);

  if (distancia <= 18 && lecturaIzq == 1 && lecturaDer == 1) {
    atacar();
  }


  if (distancia >= 19 && lecturaIzq == 1 && lecturaDer == 1) {
    giroIzq();
  }

  if (lecturaIzq == 0)  ///DETECTA OPONENTE PERO DETECTA FINAL DE RING
  {
    reversa();
    delay(1000);
  }
  if (lecturaDer == 0)  ///DETECTA OPONENTE PERO DETECTA FINAL DE RING ADELANTE
  {
    reversa();
    delay(1000);
  }

  delay(1000);
}
}

void avanzar() {
  analogWrite(IN1, 0);
  analogWrite(IN2, vel);
  analogWrite(IN3, 0);
  analogWrite(IN4, vel);
}

void reversa() {
  analogWrite(IN1, vel);
  analogWrite(IN2, 0);
  analogWrite(IN3, vel);
  analogWrite(IN4, 0);
}
void giroIzq() {
  analogWrite(IN1, vel);
  analogWrite(IN2, 0);
  analogWrite(IN3, 0);
  analogWrite(IN4, vel);
}
void giroDer() {
  analogWrite(IN1, 0);
  analogWrite(IN2, vel);
  analogWrite(IN3, vel);
  analogWrite(IN4, 0);
}
void detener() {
  analogWrite(IN1, 0);
  analogWrite(IN2, 0);
  analogWrite(IN3, 0);
  analogWrite(IN4, 0);
}
void sonar() {
  digitalWrite(trig, LOW);
  digitalWrite(trig, HIGH);
  delay(0.01);
  digitalWrite(trig, LOW);
  duracion = pulseIn(echo, HIGH);
  distancia = (duracion / 2) / 29;
}
void atacar() {
  analogWrite(IN1, 0);
  analogWrite(IN2, 150);
  analogWrite(IN3, 0);
  analogWrite(IN4, 150);
}