Robodacta Steam

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?

 

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.
 
Si detectas que el kit llego incompleto o algún componente dañado, puedes mandarnos un mensaje 

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

En esta parte podrás subir nuestros programas al Kit 4WD Omnidireccional, asi como ver su funcionamiento.

A continuación te dejamos los diferentes códigos con los que se puede programar el Kit 4WD Omnidireccional

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);
}

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);
}