Paso 4: código
https://sites.Google.com/site/arduinorobotics/Arduino-Robotics/free_project
Bluetooth-bot v1
Robótica de Arduino no oficial capítulo 14
utilizar adaptador serial Bluetooth Mate para recibir comandos desde el PC
Arduino descodifica comandos en movimientos motores
Crea enlace serie inalámbrica alta velocidad para control de robots con teclado
Utiliza las teclas "i" =, "j" = izquierda, "k" = retroceso y "l" = a la derecha
control de velocidad también es implementado usando ","= velocidad hacia abajo,"" = la velocidad, y "/" = velocidad máxima.
Variables de control del motor L298
int M1_A = 12; Si utiliza Ardumoto, cambiar al pin 13
int M1_PWM = 11;
int M1_B = 10; Si utiliza Ardumoto, retire esta variable
int M2_A = 4; Si utiliza Ardumoto, cambiar al pin 12
int M2_PWM = 3;
int M2_B = 2; Si utiliza Ardumoto, retire esta variable
Pin del LED conectado a Arduino D13
int LED = 13;
variable para almacenar los datos en serie
int incomingByte = 0;
variable para almacenar el valor de la velocidad
int speed_val = 255;
//////////////////////////////
void setup() {}
TCCR2B = TCCR2B & 0b11111000 | 0 x 01; cambiar frecuencia PWM para los pines 3 y 11 a 32kHz, así que no habrá ningún motor lloriquear
Inicio monitor serie a 115.200 bps
Serial.Begin(115200);
declarar salidas
pinMode (LED, salida);
pinMode (M1_A, salida);
pinMode (M1_PWM, salida);
pinMode (M1_B, salida);
pinMode (M2_A, salida);
pinMode (M2_PWM, salida);
pinMode (M2_B, salida);
Apague los motores por defecto
M1_stop();
M2_stop();
Delay(500);
}
////////////////////////////////////
void loop() {}
verificación de datos en serie
Si (Serial.available() > 0) {}
leer el byte entrante:
incomingByte = Serial.read();
Si está disponible, parpadea LED e imprimir datos serie recibidos.
digitalWrite (LED, alta);
decir lo que tienes:
Serial.Print ("recibido:");
Serial.println(incomingByte);
retardo de 10 milisegundos para permitir actualización serial
Delay(10);
Ver byte entrante para la dirección
Si el byte es igual a "46" o "," - aumentar velocidad
Si (incomingByte == 46) {}
speed_val = speed_val + 5;
test_speed();
Serial.println(speed_val);
}
Si el byte es igual a "44" o "."-reducir velocidad
else if (incomingByte == 44) {}
speed_val = speed_val - 5;
test_speed();
Serial.println(speed_val);
}
Si el byte es igual a "47" o "/" - velocidad máxima
else if (incomingByte == 47) {}
speed_val = 255;
test_speed();
}
Si el byte es igual a "105" o "yo", salir adelante
else if (incomingByte == 105) {}
M1_forward(speed_val);
M2_forward(speed_val);
Delay(25);
}
Si el byte es igual a "106" o "j", a la izquierda
else if (incomingByte == 106) {}
M1_reverse(speed_val);
M2_forward(speed_val);
Delay(25);
}
Si el byte es igual a "108" o "l", a la derecha
else if (incomingByte == 108) {}
M1_forward(speed_val);
M2_reverse(speed_val);
Delay(25);
}
Si el byte es igual a "107" o "k", ir atrás
else if (incomingByte == 107) {}
M1_reverse(speed_val);
M2_reverse(speed_val);
Delay(25);
}
de lo contrario, dejar ambos motores
Else {}
M1_stop();
M2_stop();
}
}
Else {}
M1_stop();
M2_stop();
digitalWrite (LED, baja);
}
}
void test_speed() {}
restringir el valor de la velocidad a entre 0 y 255
Si {} (speed_val > 250)
speed_val = 255;
Serial.println ("MAX");
}
Si (speed_val < 0) {}
speed_val = 0;
Serial.println ("MIN");
}
}
motricidad / / /
void M1_reverse(int x) {}
digitalWrite (M1_B, bajo);
digitalWrite (M1_A, alto);
analogWrite (M1_PWM, x);
}
void M1_forward(int x) {}
digitalWrite (M1_A, LOW);
digitalWrite (M1_B, alto);
analogWrite (M1_PWM, x);
}
void M1_stop() {}
digitalWrite (M1_B, bajo);
digitalWrite (M1_A, LOW);
digitalWrite (M1_PWM, bajo);
}
void M2_forward(int y) {}
digitalWrite (M2_B, bajo);
digitalWrite (M2_A, alto);
analogWrite (M2_PWM, y);
}
void M2_reverse(int y) {}
digitalWrite (M2_A, bajo);
digitalWrite (M2_B, alto);
analogWrite (M2_PWM, y);
}
void M2_stop() {}
digitalWrite (M2_B, bajo);
digitalWrite (M2_A, bajo);
digitalWrite (M2_PWM, bajo);
}