thank you good day everyone
The code does not generate an error. It compiles an runs. Maybe your library for the 8833 is wrong and I got lucky picking the right library. Where did you find the library?
It operates exactly as you have programmed it.
You need to identify which motor pins are LEFT and which motor pins are RIGHT. Then, you must identify which motor pin is DIRECTION and which is SPEED.
Your steering logic is not correct. I picked 11, 3 as LEFT and 5, 6 as RIGHT. When "no line is sensed" your motors are enabled (good), but moving. When one line sensor is HIGH, the motors stop. When both line sensors are HIGH, the motors stop.
Learn to format your code correctly by using the < CODE > button in the text box and pasting your code where you see '''type or paste your code here'''
#include "DRV8833.h"
DRV8833 driver = DRV8833();
int sensorIzquierdo = 10;
int sensorDerecho = 2;
int valorIzquierdo;
int valorDerecho;
int motorA1 = 5;
int motorA2 = 6;
int motorB1 = 11;
int motorB2 = 3;
int velocidadMotorA = 110;
int velocidadMotorB = 110;
bool buscandoLinea = false; // Variable para controlar si el robot está buscando la línea
bool lineaEncontrada = false; // Variable para controlar si la línea ha sido encontrada
bool avanzando = false; // Variable para controlar si el robot está avanzando
void setup() {
pinMode(sensorIzquierdo, INPUT);
pinMode(sensorDerecho, INPUT);
driver.attachMotorA(motorA1, motorA2);
driver.attachMotorB(motorB1, motorB2);
Serial.begin(9600);
}
void loop() {
valorIzquierdo = digitalRead(sensorIzquierdo);
valorDerecho = digitalRead(sensorDerecho);
if (!buscandoLinea) {
// Si no estamos buscando la línea, seguimos el camino normalmente
if (valorIzquierdo == HIGH && valorDerecho == HIGH) {
robotAdelante();
avanzando = true;
}
else if (valorIzquierdo == LOW && valorDerecho == LOW) {
if (avanzando) {
robotFrena();
avanzando = false;
} else {
robotRetrocede();
}
}
else if (valorIzquierdo == LOW && valorDerecho == HIGH) {
robotIzquierda();
}
else if (valorIzquierdo == HIGH && valorDerecho == LOW) {
robotDerecha();
}
} else {
// Si estamos buscando la línea y no se ha encontrado
if (!lineaEncontrada) {
robotFrena(); // Detener el robot
if (valorIzquierdo == HIGH || valorDerecho == HIGH) {
lineaEncontrada = true; // Marcar la línea como encontrada
delay(50); // Esperar un corto tiempo
} else {
robotGirar(); // Girar hasta encontrar la línea
}
} else {
// Si la línea ha sido encontrada, reanudar el movimiento hacia adelante
buscandoLinea = false;
lineaEncontrada = false;
}
}
// Si ambos sensores están fuera de la línea, comenzamos a buscar la línea
if (valorIzquierdo == LOW && valorDerecho == LOW) {
buscandoLinea = true;
}
Serial.print("Sensor izquierdo: ");
Serial.print(valorIzquierdo);
Serial.print("\t");
Serial.print("Sensor derecho: ");
Serial.println(valorDerecho);
}
void robotAdelante() {
driver.motorAForward(velocidadMotorA);
driver.motorBForward(velocidadMotorB);
}
void robotFrena() {
driver.motorAStop();
driver.motorBStop();
}
void robotRetrocede() {
driver.motorAReverse(velocidadMotorA);
driver.motorBReverse(velocidadMotorB);
}
void robotIzquierda() {
driver.motorAForward(velocidadMotorA / 2);
driver.motorBForward(velocidadMotorB);
}
void robotDerecha() {
driver.motorAForward(velocidadMotorA);
driver.motorBForward(velocidadMotorB / 2);
}
void robotGirar() {
driver.motorAForward(velocidadMotorA);
driver.motorBReverse(velocidadMotorB); // Girar en el lugar, un motor hacia adelante y el otro hacia atrás
}