// Definir pines para los sensores infrarrojos

int sensorIzquierdo = 2;

int sensorIzquierdoCentro = 3;

int sensorDerechoCentro = 4;

int sensorDerecho = 5;


// Definir pines para los motores del carrito

int motorIzquierdoA = 6;

int motorIzquierdoB = 7;

int motorDerechoA = 8;

int motorDerechoB = 9;


void setup() {

  // Configurar pines como entrada o salida

  pinMode(sensorIzquierdo, INPUT);

  pinMode(sensorIzquierdoCentro, INPUT);

  pinMode(sensorDerechoCentro, INPUT);

  pinMode(sensorDerecho, INPUT);


  pinMode(motorIzquierdoA, OUTPUT);

  pinMode(motorIzquierdoB, OUTPUT);

  pinMode(motorDerechoA, OUTPUT);

  pinMode(motorDerechoB, OUTPUT);

}


void loop() {

  // Leer valores de los sensores

  int izquierdo = digitalRead(sensorIzquierdo);

  int izquierdoCentro = digitalRead(sensorIzquierdoCentro);

  int derechoCentro = digitalRead(sensorDerechoCentro);

  int derecho = digitalRead(sensorDerecho);


  // Lógica de seguimiento de línea

  if (izquierdo == LOW && izquierdoCentro == LOW && derechoCentro == LOW && derecho == LOW) {

    // El carrito está sobre la línea

    avanzar();

  } else if (izquierdo == HIGH && izquierdoCentro == LOW && derechoCentro == LOW && derecho == LOW) {

    // Giro a la izquierda

    girarIzquierda();

  } else if (izquierdo == LOW && izquierdoCentro == LOW && derechoCentro == LOW && derecho == HIGH) {

    // Giro a la derecha

    girarDerecha();

  } else {

    // Otros casos, ajustes necesarios

    detener();

  }

}


// Funciones de control de motores

void avanzar() {

  digitalWrite(motorIzquierdoA, HIGH);

  digitalWrite(motorIzquierdoB, LOW);

  digitalWrite(motorDerechoA, HIGH);

  digitalWrite(motorDerechoB, LOW);

}


void girarIzquierda() {

  digitalWrite(motorIzquierdoA, LOW);

  digitalWrite(motorIzquierdoB, HIGH);

  digitalWrite(motorDerechoA, HIGH);

  digitalWrite(motorDerechoB, LOW);

}


void girarDerecha() {

  digitalWrite(motorIzquierdoA, HIGH);

  digitalWrite(motorIzquierdoB, LOW);

  digitalWrite(motorDerechoA, LOW);

  digitalWrite(motorDerechoB, HIGH);

}


void detener() {

  digitalWrite(motorIzquierdoA, LOW);

  digitalWrite(motorIzquierdoB, LOW);

  digitalWrite(motorDerechoA, LOW);

  digitalWrite(motorDerechoB, LOW);

}


Comentarios

Entradas populares