//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);
}