ROBOT OMNIDIRECCIONAL






Conoce el Robot Omnidireccional
- Kit Robot Omnidireccional
Cod. Kit 1510
¿Armar un robot convencional? De verdad es tu objetivo. Hoy en día existen gran cantidad de prototipos qué son capaces de emular un vehículo, sin embargo se ven limitados en cuanto a su capacidad de movimiento, pues para poder desplazarse siguiendo el método tradicional de siempre ir adelante, por eso hemos diseñado un prototipo de vehículo que va más allá de lo común el Robot Omnidireccional presenta la característica de poder desplazarse en varias direcciones, como lo son: adelante, atrás, izquierda, derecha, y de manera oblicua ¿Increíble? Espera verlo a prueba. ¡¿Estas listo?
Movimiento Omnidireccional: Se refiere a la capacidad de un objeto o sistema para moverse en cualquier dirección sin cambiar su orientación. Esto significa que puede moverse hacia adelante, hacia atrás, hacia los lados y girar sin tener que dar la vuelta completa.
Es importante definir el concepto de rueda mecanum debido a que esta presenta características especiales que ayudan al movimiento Omnidireccional. Este tipo de elementos cuentan con rodillos en la superficie exterior de la rueda, cada rodillo cuenta con un ángulo de 45° favoreciendo el movimiento del robot. El contacto entre los rodillos y la superficie del suelo puede causar una fuerza de fricción opuesta a de los rodillos, por lo que la fuerza de fricción que actúa sobre la rueda es en la dirección de 45°. El Robot cuenta con cuatro ruedas mecanum y cada una de estas debe de colocar en un determinado orden para un optimo funcionamiento. Se observa desde la vista superior y en desde su centro se observa como la unión de las cuatro ruedas forman una “X” por el acomodo de los rodillos.
El 4WD Omnidireccional puede desplazarse hacia atras, adelante, a la izquierda o a la derecha, pero tambien se puede mover de manera oblicua o tambien alrededor de su centro geométrico.
Ahora te estarás preguntando ¿Cómo es posible que realice estos movimientos?. En realidad es super fácil, para comprender el desplazamiento detrás del Robot es importante realizar un análisis de fuerza en cada una de las ruedas. Comencemos por uno de los que pueden resultar complejos, el desplazamiento a la derecha.
Este es el Kit visto desde la parte superior, desde esta vista podemos realizar un mayor análisis, debido a la configuración de cada una de las ruedas este es el análisis.
Cuando R1 y R3 rotan generado un movimiento hacia adelante, y R2 y R4 rotan realizando un movimiento hacia atras, se considera que el Robot se va a dirigir a la derecha, para entender esto hay que descomponer cada una de las fuerzas que produce cada rueda, consideremos que cada una de las ruedas produce la misma fuerza. Entonces tenemos lo siguiente:
FR1x + FR2x + FR3x + FR4x = Fx
FR1y + FR2y + FR3y + FR4y = Fy
Realizando un análisis de fuerzas en el eje X, podemos darnos cuenta que cada fuerza producida en cada rueda se suma, por lo tanto tenemos que la fuerza
Ftotalx = FR1x + FR2x + FR3x + FR4x = 4Fx
Ahora analizando las fuerzas en el eje Y temenos:
Ftotaly = FR1y – FR2y + FR3y – FR4y = 0
Al terminar el análisis se observa que la única fuerza resultante es la que va en el eje X, por tanto estas 4 fuerzas se suman consiguiendo asi el desplazamiento hacia la derecha.
De esta manera es como funciona el desplazamiento Omnidireccional del Robot, solo hemos explicado uno de los movimientos. ¿Te atreves a demostrar el resto?
Estos movimientos son considerados básicos debido a que solamente se limitan a un movimiento. Constan de 8 formas de desplazamiento los cuales son:
Se producen gracias a la combinación de dos movimientos básicos, estos son:
Son consideradores errores debido a que en la realidad estos movimientos son físicamente imposibles, estos son:
El Kit cuenta con las siguientes características:
- Altura: Aproximadamente 14 cm.
- Ancho: 16.5 cm
- Largo: 23.5 cm
El robot puede ser programado para diferentes funciones, entre las cuales tenemos:
- Seguidor de Línea Blanca.
- Seguidor de Línea Negra.
- Evasor de Obstáculos.
- Robot Sumo Autónomo sin limite de fondo
- Robot Sumo Autónomo para fondo Blanco.
- Robot Sumo Autónomo para fondo Negro.
- Robot Sumo RC.
Antes de ensamblar el Kit verifica que el material este completo y en buen estado.
Materiales
El Kit incluye.
- 1pza. Chasis superior de acrílico color negro.
- 1pza. Chasis inferior de acrílico color negro.
- 10pzs. Bujes de acrílico negro.
- 4pzs. Soporte para motor de acrílico negro.
- 1pzs. Soporte de sensor ultrasónico de acrílico transparente.
- 1pzs. Pala de acrílico transparente.
- 1pza. Tarjeta Arduino UNO R3 CH340 SMD C/cable USB.
- 1pza. Tarjeta Shield Controladora de Motores con L293D.
- 4pzs. Motorreductor plástico 1:48 de doble eje con cables.
- 4pzs. Ruedas Ruedas Mecanum.
- 2pza. Modulo sensor de líneas TCRT5000.
- 1pza. HC-SR04 Sensor distancia Ultrasónico.
- 1pza. Módulo Bluetooth BT-04 ó HC-06 (depende de disponibilidad).
- 1pza. Portapilas para 6 pilas AA con conector de barril.
- 20pzs. de cable puente 20cm Hembra-Hembra.
- 12 pzs. Tornillo M3 x 8 mm cabeza de gota.
- 2 pzs. Tornillo M3 x 8 mm cabeza de plana con tuerca.
- 7 pzs. Tornillo M3 x 12 mm con tuerca.
- 8 pzs. Tornillo M3 x 30 mm con tuerca.
- 4 pzs. Tornillo M2.3 x 20 mm sin tuerca.
- 2 pzs. Tornillo 1/8″ x 1/2″ mm con tuerca.
- 4pzs. Soportes de plástico para ruedas mecanum.
- 6pzas. Separador Metálico M3x35mm.
Correo: contacto@robodacta.mx
A nuestro numero de WhatsApp: (56) 39661716
¿Cómo se arma?
Ensamble
Para ensamblar del robot observa el siguiente video en donde explicamos paso a paso el armado.
Notas:
Antes de iniciar con el ensamble remueve el plástico protector de las piezas de acrílico.
Es importante no apretar los tornillos de forma excesiva ya que podrías romper alguna de las piezas de acrílico.
No retirar los cinchos que sujetan los cables de los motores ya que estos evitan que se rompan sus terminales con el movimiento.
Diagrama de Conexiones
Una vez completado el ensamble del Robot, realiza las conexiones. A continuación te mostramos los diagramas de conexiones.
Prueba de tu Kit Robot Sumo
Para realizar esta tarea deberás colocar las pilas al Kit y encenderlo. Si el Kit realiza los siguientes movimientos es que tu ensamble esta correcto. El kit ya viene con este programa.
El robot se desplaza:
- Adelante
- Se detiene
- Atras
- Se detiene
- Izquierda
- Se detiene
- Derecha
- Se detiene
- En diagonal hacia adelante por la izquierda
- Se detiene
- En diagonal hacia atrás por la derecha
- Se detiene
- En diagonal hacia adelante por la derecha
- Se detiene
- En diagonal hacia atrás por la izquierda
- Rota a la derecha
- Se detiene
- Rota a la izquierda
- Se detiene
- Repite el proceso
A continuación te dejamos un video donde podrás ver como debe de comportarse tu robot para saber si tu robot esta correctamente armado.
Nota importante
No pases a la siguiente sección hasta que verifiques que tu Kit esta correctamente ensamblado y cableado.
¿Cómo lo vamos a programar?
Instalación Programa Arduino
Antes de cargar el programa de tu elección, instala el entorno de programación con el cual podrás subir los códigos a tu robot.
Para esta sección preparamos un PDF el cual podrás descargar con el siguiente botón con las instrucciones detalladas de cada uno de los pasos con imágenes.
(El siguiente PDF incluye el paso 1, 2 y 3)
En caso de que ya conozcas un poco de este proceso te dejamos a continuación la explicación corta.
Paso 1.- Descargar de driver CH341
Como uno de los pasos para la instalación de nuestro entorno será el de descargar e instalar el driver necesario para que nuestra computadora pueda reconocer el dispositivo Arduino.
Paso 2.- Descarga e instalación de Arduino
Descarga la aplicación de Arduino con el cual podrás editar, subir y abrir los códigos.
Paso 3.- Subir un código
A continuación te dejamos los diferentes códigos con los que se puede programar el Kit 4WD Omnidireccional.
Antes de subir cualquier código, RETIRA EL MODULO BLUETOOTH.
Comportamiento del programa.
El Robot seguirá una serie de de movimientos básicos que ayudaran a comprobar que las conexiones y armado son correctos. Estos son:
- Adelante
- Se detiene
- Atras
- Se detiene
- Izquierda
- Se detiene
- Derecha
- Se detiene
- En diagonal hacia adelante por la izquierda
- Se detiene
- En diagonal hacia atrás por la derecha
- Se detiene
- En diagonal hacia adelante por la derecha
- Se detiene
- En diagonal hacia atrás por la izquierda
- Rota a la derecha
- Se detiene
- Rota a la izquierda
- Se detiene
- Repite el proceso
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Prueba de Motores
#include <SoftwareSerial.h>
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
int vel = 255;
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
}
void loop()
{
adelante();
delay(500);
alto();
delay(500);
atras();
delay(500);
alto();
delay(500);
izq();
delay(500);
alto();
delay(500);
der();
delay(500);
alto();
delay(500);
diu();
delay(500);
alto();
delay(500);
ddd();
delay(500);
alto();
delay(500);
ddu();
delay(500);
alto();
delay(500);
did();
delay(500);
alto();
delay(500);
rizq();
delay(700);
alto();
delay(500);
rder();
delay(700);
alto();
delay(500);
}
void adelante() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Comportamiento del programa.
El Robot deberá seguir una Linea Blanca en un fondo negro a través de los sensores de línea.
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Seguidor de línea blanca
#include <SoftwareSerial.h>
// Declaración de pina RX y TX
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
// Libreria para la tarjeta de expansion de motores
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Declaración de sensores de línea
int sd = A2;
int si = A3;
// Declaración de sensor ultrasonico
int echo = A4;
int triger = A5;
// Velocidad de las ruedas
int vel=200;
// Variables de almacenamiento
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
int l1;
int l2;
int f1;
int f2;
long cont1=0;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
pinMode(sd,INPUT);
pinMode(si,INPUT);
pinMode(echo,INPUT);
pinMode(triger,OUTPUT);
digitalWrite(triger,LOW);
}
void loop()
{
l1 = digitalRead(sd);
l2 = digitalRead(si);
if ((l1 == 1 && l2 == 1)&&cont1>0) //Feedback cuando todos los sensores estan en blanco
{
l1 = f1;
l2 = f2;
cont1=cont1-1;
}
else if(l1 == 1 && l2 == 0){
gizq();
}
else if(l1 == 0 && l2 == 1){
gder();
}
else if(l1 == 0 && l2 == 0){
adelante();
cont1=60000;
}
else if(l1 == 1 && l2 == 1){
alto();
}
f1 = l1;
f2 = l2;
}
long distancia()
{
long t;
long d;
digitalWrite(triger,HIGH);
delayMicroseconds(10);
digitalWrite(triger,LOW);
t=pulseIn(echo,HIGH);
d=t/59;
delay(10);
return d;
}
void adelante()//adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()//atras
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Comportamiento del programa.
El Robot deberá seguir una Linea Negra en un fondo Blanco a través de los sensores de línea.
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Seguidor de Linea Negra
#include <SoftwareSerial.h>
// Declaración de pina RX y TX
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
// Libreria para la tarjeta de expansion de motores
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Declaración de sensores de línea
int sd = A2;
int si = A3;
// Declaración de sensor ultrasonico
int echo = A4;
int triger = A5;
// Velocidad de las ruedas
int vel=200;
// Variables de almacenamiento
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
int l1;
int l2;
int f1;
int f2;
long cont=0;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
pinMode(sd,INPUT);
pinMode(si,INPUT);
pinMode(echo,INPUT);
pinMode(triger,OUTPUT);
digitalWrite(triger,LOW);
}
void loop()
{
l1 = digitalRead(sd);
l2 = digitalRead(si);
if ((l1 == 0 && l2 == 0)&&cont>0) //Feedback cuando todos los sensores estan en blanco
{
l1 = f1;
l2 = f2;
cont=cont-1;
}
else if(l1 == 0 && l2 == 1){
gizq();
}
else if(l1 == 1 && l2 == 0){
gder();
}
else if(l1 == 1 && l2 == 1){
adelante();
cont=60000;
}
else if(l1 == 0 && l2 == 0){
alto();
}
f1 = l1;
f2 = l2;
}
long distancia()
{
long t;
long d;
digitalWrite(triger,HIGH);
delayMicroseconds(10);
digitalWrite(triger,LOW);
t=pulseIn(echo,HIGH);
d=t/59;
delay(10);
return d;
}
void adelante()//adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()//atras
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Comportamiento del programa.
El Robot deberá evadir obstáculos los cuales podrá detectar de frente, haciendo que cambie de dirección.
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Evasor de Obstaculos
#include <SoftwareSerial.h>
// Declaración de pina RX y TX
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
// Libreria para la tarjeta de expansion de motores
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Declaración de sensores de línea
int sd = A2;
int si = A3;
// Declaración de sensor ultrasonico
int echo = A4;
int triger = A5;
// Velocidad de las ruedas
int vel=200;
// Variables de almacenamiento
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
pinMode(sd,INPUT);
pinMode(si,INPUT);
pinMode(echo,INPUT);
pinMode(triger,OUTPUT);
digitalWrite(triger,LOW);
}
void loop()
{
if(distancia()>= 20)
{
adelante();
}
else if(distancia()<= 20){
alto();
delay(500);
der();
delay(1000);
if (distancia()>= 20){
adelante();
}
else if(distancia()<= 20){
rder();
delay(700);
adelante();
}
}
}
long distancia()
{
long t;
long d;
digitalWrite(triger,HIGH);
delayMicroseconds(10);
digitalWrite(triger,LOW);
t=pulseIn(echo,HIGH);
d=t/59;
delay(10);
return d;
}
void adelante()//adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()//atras
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Comportamiento del programa.
El Robot girara en busca de un contrincante, en el momento en que detecte un objetivo, lo embestirá gracias al sensor ultrasónico.
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Sumo Autónomo
#include <SoftwareSerial.h>
// Declaración de pina RX y TX
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
// Libreria para la tarjeta de expansion de motores
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Declaración de sensores de línea
int sd = A2;
int si = A3;
// Declaración de sensor ultrasonico
int echo = A4;
int triger = A5;
// Velocidad de las ruedas
int vel=200;
// Variables de almacenamiento
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
pinMode(sd,INPUT);
pinMode(si,INPUT);
pinMode(echo,INPUT);
pinMode(triger,OUTPUT);
digitalWrite(triger,LOW);
}
void loop()
{
if(distancia()>=20)
{
gder();
}
else
{
adelante();
}
}
long distancia()
{
long t;
long d;
digitalWrite(triger,HIGH);
delayMicroseconds(10);
digitalWrite(triger,LOW);
t=pulseIn(echo,HIGH);
d=t/59;
delay(10);
return d;
}
void adelante()//adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()//atras
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Comportamiento del programa.
El Robot girara en busca de un contrincante, en el momento en que detecte un objetivo, lo embestirá gracias al sensor ultrasónico, siempre y cuando el kit se encuentre en algún área con fondo Blanco, esto es gracias a los sensores de línea.
Si alguno de los sensores de linea se encuentra en alguna área con fondo negro, el robot retrocederá y girara con el fin de evitar salirse del área con fondo Blanco, posteriormente volverá a a buscar algún objetivo.
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Sumo Fondo Blanco
#include <SoftwareSerial.h>
// Declaración de pina RX y TX
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
// Libreria para la tarjeta de expansion de motores
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Declaración de sensores de línea
int sd = A2;
int si = A3;
// Declaración de sensor ultrasonico
int echo = A4;
int triger = A5;
// Velocidad de las ruedas
int vel=200;
// Variables de almacenamiento
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
pinMode(sd,INPUT);
pinMode(si,INPUT);
pinMode(echo,INPUT);
pinMode(triger,OUTPUT);
digitalWrite(triger,LOW);
}
void loop()
{
if(distancia()<=20)
{
if(digitalRead(si)==1 || digitalRead(sd)==1)//
{
//cambiar los 1 por 0 fondo negro
vel=180;
alto();
delay(100);
atras();
delay(400);
alto();
delay(500);
rder();
delay(500);
alto();
delay(500);
adelante();
vel=180;
}
else
{
adelante();
}
}
else {
if(digitalRead(si)==1 || digitalRead(sd)==1)
//cambiar los 1 por 0 fondo negro
{
vel=180;
alto();
delay(100);
atras();
delay(400);
alto();
delay(500);
rder();
delay(700);
alto();
delay(500);
adelante();
}
else
{
adelante();
}
}
}
long distancia()
{
long t;
long d;
digitalWrite(triger,HIGH);
delayMicroseconds(10);
digitalWrite(triger,LOW);
t=pulseIn(echo,HIGH);
d=t/59;
delay(10);
return d;
}
void adelante()//adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()//atras
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
Comportamiento del programa.
El Robot girara en busca de un contrincante, en el momento en que detecte un objetivo, lo embestirá gracias al sensor ultrasónico, siempre y cuando el kit se encuentre en algún área con fondo Negro, esto es gracias a los sensores de línea.
Si alguno de los sensores de linea se encuentra en alguna área con fondo blanco, el robot retrocederá y girara con el fin de evitar salirse del área con fondo Negro, posteriormente volverá a a buscar algún objetivo.
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional Sumo Fondo Negro
#include <SoftwareSerial.h>
// Declaración de pina RX y TX
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
// Libreria para la tarjeta de expansion de motores
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Declaración de sensores de línea
int sd = A2;
int si = A3;
// Declaración de sensor ultrasonico
int echo = A4;
int triger = A5;
// Velocidad de las ruedas
int vel=200;
// Variables de almacenamiento
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
pinMode(sd,INPUT);
pinMode(si,INPUT);
pinMode(echo,INPUT);
pinMode(triger,OUTPUT);
digitalWrite(triger,LOW);
}
void loop()
{
if(distancia()<=20)
{
if(digitalRead(si)==0 || digitalRead(sd)==0)//
{
//cambiar los 0 por 1 fondo blanco
alto();
delay(100);
atras();
delay(400);
alto();
delay(500);
rder();
delay(500);
alto();
delay(500);
adelante();
}
else
{
adelante();
}
}
else {
if(digitalRead(si)==0 || digitalRead(sd)==0)
//cambiar los 0 por 1 fondo blanco
{
alto();
delay(100);
atras();
delay(400);
alto();
delay(500);
rder();
delay(700);
alto();
delay(500);
adelante();
}
else
{
adelante();
}
}
}
long distancia()
{
long t;
long d;
digitalWrite(triger,HIGH);
delayMicroseconds(10);
digitalWrite(triger,LOW);
t=pulseIn(echo,HIGH);
d=t/59;
delay(10);
return d;
}
void adelante()//adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()//atras
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
RETIRA EL MÓDULO BLUETOOTH PARA SUBIR EL CÓDIGO.
Comportamiento del programa.
Podrás controlar el Robot por medio de conexión bluetooth atreves de una aplicación compatible con Android.
Nota: Esta aplicación solo sirve para dispositivos con sistema operativo ANDROID
En esta parte podrás ver el código completo. Pero si quieres solo descargar el archivo de texto puedes hacerlo al presionar el botón descargar.
// 4WD Omnidireccional RC
#include <SoftwareSerial.h>
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
int vel = 255;
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
}
void loop()
{
if (BTSerial.available() > 0)
{
valorBoton = BTSerial.read();
if(antepenultimo== ‘w’ && penultimo== ‘q’ && valorBoton == ‘r’){// wqr
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘w’ && penultimo== ‘a’ && valorBoton == ‘f’){// waf
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘w’ && penultimo== ‘d’ && valorBoton == ‘h’){// wdh
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘w’ && penultimo== ‘e’ && valorBoton == ‘y’){// wey
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;;
}
else if(antepenultimo== ‘q’ && penultimo== ‘w’ && valorBoton == ‘t’){// qwt
v = ‘q’;
diu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘q’ && penultimo== ‘a’ && valorBoton == ‘f’){// qaf
v = ‘q’;
diu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’w’ && valorBoton == ‘t’){//awt
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’q’ && valorBoton == ‘r’){//aqr
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’z’ && valorBoton == ‘v’){//azv
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’x’ && valorBoton == ‘b’){//axb
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘z’ && penultimo==’a’ && valorBoton == ‘f’){//zaf
v = ‘z’;
did();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘z’ && penultimo==’x’ && valorBoton == ‘b’){//zxb
v = ‘z’;
did();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’a’ && valorBoton == ‘f’){//xaf
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’z’ && valorBoton == ‘v’){//xzv
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’c’ && valorBoton == ‘n’){//xcn
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’d’ && valorBoton == ‘h’){//xdh
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘c’ && penultimo==’x’ && valorBoton == ‘b’){//cxb
v = ‘c’;
ddd();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘c’ && penultimo==’d’ && valorBoton == ‘h’){//cdh
v = ‘c’;
ddd();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’x’ && valorBoton == ‘b’){//dxb
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’c’ && valorBoton == ‘n’){//dcn
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’e’ && valorBoton == ‘y’){//dey
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’w’ && valorBoton == ‘t’){//dwt
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘e’ && penultimo==’w’ && valorBoton == ‘t’) {//ewt
v = ‘e’;
ddu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘e’ && penultimo==’d’ && valorBoton == ‘h’){//edh
v = ‘e’;
ddu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(v == ‘w’){//Validacion no se suelta w
adelante();
if(valorBoton == ‘t’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //wq
gizq();
}
else if(valorBoton == ‘a’) { //wa
rizq();
}
else if(valorBoton == ‘z’) { //wz
alto();
}
else if(valorBoton == ‘x’) { //wx
alto();
}
else if(valorBoton == ‘c’) { //wc
alto();
}
else if(valorBoton == ‘d’) { //wd
rder();
}
else if(valorBoton == ‘e’) { //we
gder();
}
}
else if(v == ‘q’){//Validacion no se suelta q
diu();
if(valorBoton == ‘r’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //qw
gder();
}
else if(valorBoton == ‘a’) { //qa
gizq();
}
else if(valorBoton == ‘z’) { //qz
alto();
}
else if(valorBoton == ‘x’) { //qx
alto();
}
else if(valorBoton == ‘c’) { //qc
alto();
}
else if(valorBoton == ‘d’) { //qd
alto();
}
else if(valorBoton == ‘e’) { //qe
alto();
}
}
else if(v == ‘a’){//Validacion no se suelta a
izq();
if(valorBoton == ‘f’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //aq
gder();
}
else if(valorBoton == ‘w’) { //aw
rder();
}
else if(valorBoton == ‘z’) { //az
aizq();
}
else if(valorBoton == ‘x’) { //ax
ader();
}
else if(valorBoton == ‘c’) { //ac
alto();
}
else if(valorBoton == ‘d’) { //ad
alto();
}
else if(valorBoton == ‘e’) { //ae
alto();
}
}
else if(v == ‘z’){//Validacion no se suelta z
did();
if(valorBoton == ‘v’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //zq
alto();
}
else if(valorBoton == ‘a’) { //za
aizq();
}
else if(valorBoton == ‘w’) { //zw
alto();
}
else if(valorBoton == ‘x’) { //zx
ader();
}
else if(valorBoton == ‘c’) { //zc
alto();
}
else if(valorBoton == ‘d’) { //zd
alto();
}
else if(valorBoton == ‘e’) { //ze
alto();
}
}
else if(v == ‘x’){//Validacion no se suelta x
atras();
if(valorBoton == ‘b’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //xq
alto();
}
else if(valorBoton == ‘w’) { //xw
alto();
}
else if(valorBoton == ‘z’) { //xz
aizq();
}
else if(valorBoton == ‘a’) { //xa
rder();
}
else if(valorBoton == ‘c’) { //xc
ader();
}
else if(valorBoton == ‘d’) { //xd
rizq();
}
else if(valorBoton == ‘e’) { //xe
alto();
}
}
else if(v == ‘c’){//Validacion no se suelta c
ddd();
if(valorBoton == ‘n’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //cq
alto();
}
else if(valorBoton == ‘a’) { //ca
alto();
}
else if(valorBoton == ‘w’) { //cw
alto();
}
else if(valorBoton == ‘x’) { //cx
aizq();
}
else if(valorBoton == ‘z’) { //cz
alto();
}
else if(valorBoton == ‘d’) { //cd
ader();
}
else if(valorBoton == ‘e’) { //ce
alto();
}
}
else if(v == ‘d’){//Validacion no se suelta d
der();
if(valorBoton == ‘h’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //dq
alto();
}
else if(valorBoton == ‘a’) { //da
alto();
}
else if(valorBoton == ‘w’) { //dw
rizq();
}
else if(valorBoton == ‘x’) { //dx
rder();
}
else if(valorBoton == ‘z’) { //dz
alto();
}
else if(valorBoton == ‘c’) { //dc
ader();
}
else if(valorBoton == ‘e’) { //de
gizq();
}
}
else if(v == ‘e’){//Validacion no se suelta e
ddu();
if(valorBoton == ‘y’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //eq
alto();
}
else if(valorBoton == ‘a’) { //ea
alto();
}
else if(valorBoton == ‘w’) { //ew
gizq();
}
else if(valorBoton == ‘x’) { //ex
alto();
}
else if(valorBoton == ‘z’) { //ez
alto();
}
else if(valorBoton == ‘d’) { //ed
gder();
}
else if(valorBoton == ‘c’) { //ec
alto();
}
}
else if(penultimo==’w’ && valorBoton == ‘q’){// wq
gizq();
}
else if(penultimo==’w’ && valorBoton == ‘a’){// wa
rizq();
}
else if(penultimo==’w’ && valorBoton == ‘d’){// wd
rder();
}
else if(penultimo==’w’ && valorBoton == ‘e’){// we
gder();
}
else if(penultimo==’w’ && valorBoton == ‘z’){// wz
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’w’ && valorBoton == ‘x’){// wx
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’w’ && valorBoton == ‘c’){// wc
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘w’){// qw
gder();
}
else if(penultimo==’q’ && valorBoton == ‘a’){// qa
gizq();
}
else if(penultimo==’q’ && valorBoton == ‘e’){// qe
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘d’){// qd
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘c’){// qc
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘x’){//qx
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘z’){//qz
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘w’){//aw
rder();
}
else if(penultimo==’a’ && valorBoton == ‘q’){//aq
gder();
}
else if(penultimo==’a’ && valorBoton == ‘z’){//az
aizq();
}
else if(penultimo==’a’ && valorBoton == ‘x’){//ax
rizq();
}
else if(penultimo==’a’ && valorBoton == ‘c’){//ac
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘d’){//ad
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘e’){//ae
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘a’){ //za
aizq();
}
else if(penultimo==’z’ && valorBoton == ‘x’){ //zx
ader();
}
else if(penultimo==’z’ && valorBoton == ‘q’){//zq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘w’){//zw
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘e’){//ze
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘d’){//zd
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘c’){//zc
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘a’){ //xa
rder();
}
else if(penultimo==’x’ && valorBoton == ‘z’){ //xz
aizq();
}
else if(penultimo==’x’ && valorBoton == ‘c’){ //xc
ader();
}
else if(penultimo==’x’ && valorBoton == ‘d’){ //xd
rizq();
}
else if(penultimo==’x’ && valorBoton == ‘q’){//xq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘w’){//xw
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘e’){//xe
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘x’){ //cx
aizq();
}
else if(penultimo==’c’ && valorBoton == ‘d’){ //cd
ader();
}
else if(penultimo==’c’ && valorBoton == ‘z’){//cz
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘a’){//ca
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘q’){//cq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘w’){//cw
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘e’){//ce
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘w’){ //dw
rizq();
}
else if(penultimo==’d’ && valorBoton == ‘e’){ //de
gizq();
}
else if(penultimo==’d’ && valorBoton == ‘c’){ //dc
ader();
}
else if(penultimo==’d’ && valorBoton == ‘x’){ //dx
rder();
}
else if(penultimo==’d’ && valorBoton == ‘q’){//dq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘a’){//da
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘z’){//dz
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘w’){ //ew
gizq();
}
else if(penultimo==’e’ && valorBoton == ‘d’){ //ed
gder();
}
else if(penultimo==’e’ && valorBoton == ‘q’) {//eq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘a’){//ea
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘z’){//ez
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘x’){//ex
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘c’){//ec
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(valorBoton == ‘w’) { // w
adelante();
}
else if(valorBoton == ‘q’) { // q
diu();
}
else if(valorBoton == ‘a’) { // a
izq();
}
else if(valorBoton == ‘z’) { // z
did();
}
else if(valorBoton == ‘x’) { // x
atras();
}
else if(valorBoton == ‘c’) { // c
ddd();
}
else if(valorBoton == ‘d’) { // d
der();
}
else if(valorBoton == ‘e’) { // e
ddu();
}
else if(penultimo==’w’ && valorBoton == ‘t’){// wt
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘r’){// qr
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘f’){//af
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘v’){//zv
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘b’){//xb
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘n’){//cn
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘h’){//dh
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘y’){//ey
penultimo = ‘s’;
alto();
}
antepenultimo = penultimo;
penultimo = valorBoton;
}
}
void adelante() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
// 4WD Omnidireccional RC
#include <SoftwareSerial.h>
#define RX_PIN A0
#define TX_PIN A1
SoftwareSerial BTSerial(RX_PIN, TX_PIN);
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
int vel = 255;
char valorBoton;
char penultimo = ‘s’;
char antepenultimo = ‘s’;
char v=’s’;
void setup()
{
BTSerial.begin(9600);
motor1.setSpeed(vel);
motor2.setSpeed(vel);
motor3.setSpeed(vel);
motor4.setSpeed(vel);
}
void loop()
{
if (BTSerial.available() > 0)
{
valorBoton = BTSerial.read();
if(antepenultimo== ‘w’ && penultimo== ‘q’ && valorBoton == ‘r’){// wqr
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘w’ && penultimo== ‘a’ && valorBoton == ‘f’){// waf
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘w’ && penultimo== ‘d’ && valorBoton == ‘h’){// wdh
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘w’ && penultimo== ‘e’ && valorBoton == ‘y’){// wey
v = ‘w’;
adelante();
penultimo = ‘s’;
antepenultimo== ‘s’;;
}
else if(antepenultimo== ‘q’ && penultimo== ‘w’ && valorBoton == ‘t’){// qwt
v = ‘q’;
diu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘q’ && penultimo== ‘a’ && valorBoton == ‘f’){// qaf
v = ‘q’;
diu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’w’ && valorBoton == ‘t’){//awt
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’q’ && valorBoton == ‘r’){//aqr
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’z’ && valorBoton == ‘v’){//azv
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘a’ && penultimo==’x’ && valorBoton == ‘b’){//axb
v = ‘a’;
izq();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘z’ && penultimo==’a’ && valorBoton == ‘f’){//zaf
v = ‘z’;
did();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘z’ && penultimo==’x’ && valorBoton == ‘b’){//zxb
v = ‘z’;
did();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’a’ && valorBoton == ‘f’){//xaf
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’z’ && valorBoton == ‘v’){//xzv
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’c’ && valorBoton == ‘n’){//xcn
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘x’ && penultimo==’d’ && valorBoton == ‘h’){//xdh
v = ‘x’;
atras();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘c’ && penultimo==’x’ && valorBoton == ‘b’){//cxb
v = ‘c’;
ddd();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘c’ && penultimo==’d’ && valorBoton == ‘h’){//cdh
v = ‘c’;
ddd();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’x’ && valorBoton == ‘b’){//dxb
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’c’ && valorBoton == ‘n’){//dcn
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’e’ && valorBoton == ‘y’){//dey
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘d’ && penultimo==’w’ && valorBoton == ‘t’){//dwt
v = ‘d’;
der();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘e’ && penultimo==’w’ && valorBoton == ‘t’) {//ewt
v = ‘e’;
ddu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(antepenultimo== ‘e’ && penultimo==’d’ && valorBoton == ‘h’){//edh
v = ‘e’;
ddu();
penultimo = ‘s’;
antepenultimo== ‘s’;
}
else if(v == ‘w’){//Validacion no se suelta w
adelante();
if(valorBoton == ‘t’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //wq
gizq();
}
else if(valorBoton == ‘a’) { //wa
rizq();
}
else if(valorBoton == ‘z’) { //wz
alto();
}
else if(valorBoton == ‘x’) { //wx
alto();
}
else if(valorBoton == ‘c’) { //wc
alto();
}
else if(valorBoton == ‘d’) { //wd
rder();
}
else if(valorBoton == ‘e’) { //we
gder();
}
}
else if(v == ‘q’){//Validacion no se suelta q
diu();
if(valorBoton == ‘r’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //qw
gder();
}
else if(valorBoton == ‘a’) { //qa
gizq();
}
else if(valorBoton == ‘z’) { //qz
alto();
}
else if(valorBoton == ‘x’) { //qx
alto();
}
else if(valorBoton == ‘c’) { //qc
alto();
}
else if(valorBoton == ‘d’) { //qd
alto();
}
else if(valorBoton == ‘e’) { //qe
alto();
}
}
else if(v == ‘a’){//Validacion no se suelta a
izq();
if(valorBoton == ‘f’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //aq
gder();
}
else if(valorBoton == ‘w’) { //aw
rder();
}
else if(valorBoton == ‘z’) { //az
aizq();
}
else if(valorBoton == ‘x’) { //ax
ader();
}
else if(valorBoton == ‘c’) { //ac
alto();
}
else if(valorBoton == ‘d’) { //ad
alto();
}
else if(valorBoton == ‘e’) { //ae
alto();
}
}
else if(v == ‘z’){//Validacion no se suelta z
did();
if(valorBoton == ‘v’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //zq
alto();
}
else if(valorBoton == ‘a’) { //za
aizq();
}
else if(valorBoton == ‘w’) { //zw
alto();
}
else if(valorBoton == ‘x’) { //zx
ader();
}
else if(valorBoton == ‘c’) { //zc
alto();
}
else if(valorBoton == ‘d’) { //zd
alto();
}
else if(valorBoton == ‘e’) { //ze
alto();
}
}
else if(v == ‘x’){//Validacion no se suelta x
atras();
if(valorBoton == ‘b’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //xq
alto();
}
else if(valorBoton == ‘w’) { //xw
alto();
}
else if(valorBoton == ‘z’) { //xz
aizq();
}
else if(valorBoton == ‘a’) { //xa
rder();
}
else if(valorBoton == ‘c’) { //xc
ader();
}
else if(valorBoton == ‘d’) { //xd
rizq();
}
else if(valorBoton == ‘e’) { //xe
alto();
}
}
else if(v == ‘c’){//Validacion no se suelta c
ddd();
if(valorBoton == ‘n’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //cq
alto();
}
else if(valorBoton == ‘a’) { //ca
alto();
}
else if(valorBoton == ‘w’) { //cw
alto();
}
else if(valorBoton == ‘x’) { //cx
aizq();
}
else if(valorBoton == ‘z’) { //cz
alto();
}
else if(valorBoton == ‘d’) { //cd
ader();
}
else if(valorBoton == ‘e’) { //ce
alto();
}
}
else if(v == ‘d’){//Validacion no se suelta d
der();
if(valorBoton == ‘h’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //dq
alto();
}
else if(valorBoton == ‘a’) { //da
alto();
}
else if(valorBoton == ‘w’) { //dw
rizq();
}
else if(valorBoton == ‘x’) { //dx
rder();
}
else if(valorBoton == ‘z’) { //dz
alto();
}
else if(valorBoton == ‘c’) { //dc
ader();
}
else if(valorBoton == ‘e’) { //de
gizq();
}
}
else if(v == ‘e’){//Validacion no se suelta e
ddu();
if(valorBoton == ‘y’){
v = ‘s’;
alto();
}
else if(valorBoton == ‘q’) { //eq
alto();
}
else if(valorBoton == ‘a’) { //ea
alto();
}
else if(valorBoton == ‘w’) { //ew
gizq();
}
else if(valorBoton == ‘x’) { //ex
alto();
}
else if(valorBoton == ‘z’) { //ez
alto();
}
else if(valorBoton == ‘d’) { //ed
gder();
}
else if(valorBoton == ‘c’) { //ec
alto();
}
}
else if(penultimo==’w’ && valorBoton == ‘q’){// wq
gizq();
}
else if(penultimo==’w’ && valorBoton == ‘a’){// wa
rizq();
}
else if(penultimo==’w’ && valorBoton == ‘d’){// wd
rder();
}
else if(penultimo==’w’ && valorBoton == ‘e’){// we
gder();
}
else if(penultimo==’w’ && valorBoton == ‘z’){// wz
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’w’ && valorBoton == ‘x’){// wx
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’w’ && valorBoton == ‘c’){// wc
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘w’){// qw
gder();
}
else if(penultimo==’q’ && valorBoton == ‘a’){// qa
gizq();
}
else if(penultimo==’q’ && valorBoton == ‘e’){// qe
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘d’){// qd
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘c’){// qc
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘x’){//qx
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘z’){//qz
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘w’){//aw
rder();
}
else if(penultimo==’a’ && valorBoton == ‘q’){//aq
gder();
}
else if(penultimo==’a’ && valorBoton == ‘z’){//az
aizq();
}
else if(penultimo==’a’ && valorBoton == ‘x’){//ax
rizq();
}
else if(penultimo==’a’ && valorBoton == ‘c’){//ac
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘d’){//ad
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘e’){//ae
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘a’){ //za
aizq();
}
else if(penultimo==’z’ && valorBoton == ‘x’){ //zx
ader();
}
else if(penultimo==’z’ && valorBoton == ‘q’){//zq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘w’){//zw
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘e’){//ze
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘d’){//zd
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘c’){//zc
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘a’){ //xa
rder();
}
else if(penultimo==’x’ && valorBoton == ‘z’){ //xz
aizq();
}
else if(penultimo==’x’ && valorBoton == ‘c’){ //xc
ader();
}
else if(penultimo==’x’ && valorBoton == ‘d’){ //xd
rizq();
}
else if(penultimo==’x’ && valorBoton == ‘q’){//xq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘w’){//xw
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘e’){//xe
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘x’){ //cx
aizq();
}
else if(penultimo==’c’ && valorBoton == ‘d’){ //cd
ader();
}
else if(penultimo==’c’ && valorBoton == ‘z’){//cz
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘a’){//ca
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘q’){//cq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘w’){//cw
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘e’){//ce
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘w’){ //dw
rizq();
}
else if(penultimo==’d’ && valorBoton == ‘e’){ //de
gizq();
}
else if(penultimo==’d’ && valorBoton == ‘c’){ //dc
ader();
}
else if(penultimo==’d’ && valorBoton == ‘x’){ //dx
rder();
}
else if(penultimo==’d’ && valorBoton == ‘q’){//dq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘a’){//da
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘z’){//dz
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘w’){ //ew
gizq();
}
else if(penultimo==’e’ && valorBoton == ‘d’){ //ed
gder();
}
else if(penultimo==’e’ && valorBoton == ‘q’) {//eq
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘a’){//ea
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘z’){//ez
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘x’){//ex
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘c’){//ec
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(valorBoton == ‘w’) { // w
adelante();
}
else if(valorBoton == ‘q’) { // q
diu();
}
else if(valorBoton == ‘a’) { // a
izq();
}
else if(valorBoton == ‘z’) { // z
did();
}
else if(valorBoton == ‘x’) { // x
atras();
}
else if(valorBoton == ‘c’) { // c
ddd();
}
else if(valorBoton == ‘d’) { // d
der();
}
else if(valorBoton == ‘e’) { // e
ddu();
}
else if(penultimo==’w’ && valorBoton == ‘t’){// wt
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’q’ && valorBoton == ‘r’){// qr
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’a’ && valorBoton == ‘f’){//af
penultimo = ‘s’;
antepenultimo== ‘s’;
alto();
}
else if(penultimo==’z’ && valorBoton == ‘v’){//zv
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’x’ && valorBoton == ‘b’){//xb
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’c’ && valorBoton == ‘n’){//cn
antepenultimo== ‘s’;
penultimo = ‘s’;
alto();
}
else if(penultimo==’d’ && valorBoton == ‘h’){//dh
penultimo = ‘s’;
alto();
}
else if(penultimo==’e’ && valorBoton == ‘y’){//ey
penultimo = ‘s’;
alto();
}
antepenultimo = penultimo;
penultimo = valorBoton;
}
}
void adelante() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void atras()
{
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void izq() //Lateral izquierda
{
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(FORWARD);
}
void der() //Lateral derecha
{
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
}
void ddu() { // Diagonal Derecha Superior
motor1.run(FORWARD);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(RELEASE);
}
void ddd() { // Diagonal Derecha Inferior
motor1.run(RELEASE);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(BACKWARD);
}
void diu() { //Diagonal Izquierda Superior
motor1.run(RELEASE);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(FORWARD);
}
void did() { //Diagonal Izquierda Inferior
motor1.run(BACKWARD);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(RELEASE);
}
void gizq() //Giro a la izquierda adelante
{
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void gder() //Giro a la derecha adelante
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void aizq() { //Giro a la derecha atras
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void ader() { //Giro a la derecha atras
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void rder() { //rotacion a la derecha
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
void rizq() { //rotacion a la izquierda
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
void alto() //Paro total
{
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}