const byte potPin = A5;
const byte dirA = 12;
const byte dirB = 11;
// Motor A
int ENGINEA = 10;
int IN1 = 9;
int IN2 = 8;
// dirección MotorA
bool ENGINEAFW = false;
// Motor B
int ENGINEB = 5;
int IN3 = 7;
int IN4 = 6;
// dirección MotorB
bool ENGINEBFW = false;
const byte out1 = A0, out2 = A1, out3 = A2, out4 = A3;
int performance = 0;
void setup ()
{
// Declaramos todos los pines como salidas
pinMode (ENGINEA, OUTPUT);
pinMode (ENGINEB, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (dirA, INPUT_PULLUP);
pinMode (dirB, INPUT_PULLUP);
EngineAFW(true);
EngineBFW(true);
Serial.begin(115200);
}
//Mover los motores a pleno rendimiento (255), si quieres bajar la velocidad puedes reducir el valor hasta la mínima que son 0 (parados)</pre>
//Para mover los motores en sentido de giro contrario, cambia IN1 a LOW e IN2 a HIGH
int pot = -1;
void loop ()
{
static int lastPot = -1;
pot = analogRead(potPin);
if (pot != lastPot) {
lastPot = pot;
Serial.print(" p:");
Serial.print(pot);
analogWrite (ENGINEA, pot/4); //Ajusta la velocidad del motor A con aux y del motor B con performance.
analogWrite (ENGINEB, (1023-pot)/4); //Velocidad motor B
}
EngineAFW(digitalRead(dirA));
EngineBFW(digitalRead(dirB));
imprimirValores();
}
void imprimirValores() {
static unsigned long last = 0;
unsigned long now = millis();
const unsigned long interval = 777;
if(now - last < interval ) return;
last = now;
Serial.print(" EN1:");
Serial.print(pot/4);
Serial.print(" EN2:");
Serial.print((1023-pot)/4);
Serial.print(" in:");
Serial.print(digitalRead(IN1));
Serial.print(digitalRead(IN2));
Serial.print(digitalRead(IN3));
Serial.print(digitalRead(IN4));
Serial.print(" out1:");
Serial.print(analogRead(out1));
Serial.print(" out2:");
Serial.print(analogRead(out2));
Serial.print(" out3:");
Serial.print(analogRead(out3));
Serial.print(" out4:");
Serial.print(analogRead(out4));
Serial.println();
}
bool randomBool() {
// Genera un valor booleano aleatorio.
return random(2) == 0;
}
//Cambian la dirección de los motores A y B respectivamente.
void EngineAFW(bool forward) {
if (forward) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
} else {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
}
ENGINEAFW = forward;
}
void EngineBFW(bool forward) {
if (forward) {
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
} else {
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
ENGINEBFW = forward;
}
//Devuelve una cadena de texto que indica la dirección general
//del robot basada en la dirección de los motores.
String obtenerDireccion() {
if (ENGINEAFW && ENGINEBFW) {
return "Adelante";
} else if (!ENGINEAFW && !ENGINEBFW) {
return "Atras";
} else if (ENGINEAFW && !ENGINEBFW) {
return "Izquierda";
} else {
return "Derecha";
}
}