Control de coche por bluetooth con ayuda del mando para el móvil realizado por D. Andrés Lasry y complementado por mí para la captación de los datos que debe enviar desde el arduino al móvil como son la dirección, y la distancia a los objetos frontales y traseros al vehículo.
Cuando se aproxime sobre unos 28 cm a un objeto debe parar y retroceder durante un segundo para salir de la zona de peligro de choque. Al llegar a los 28 cm será señalado por la intermitencia de los leds y paro del vehículo. luego invertirá la marcha para salir de la zona de peligro de choque.
Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017
1. Coche por bluetooth controlado por la aplicación en appinventor 2 de Andrés Lasry “mando.apk” y
complementada por Joaquín Berrocal, para la recepción de datos desde la placa Arduino Uno del coche hacia
el teléfono. Marzo-2017
Carcasa utilizada; Coche CYBOT 950 del 2001
Información circuitería de la placa driver: http://www.lpilsley.co.uk/cybot/driver.htm
2.
3.
4.
5.
6. Como se puede ver en el display marca 15 cm ------ 150 mm
De distancia al sensor frontal bluetooh. Prueba realizada OK ver imágenes de abajo.
También se ve que la distancia a objeto frontal que ha de pararse cuando va caminado de frente es a
unos 28 cm. OK
18. /*"COCHE_POR_BT_Joaquin_Berrocal.ino"
realizado por:
JOAQUÍN BERROCAL PIRIS para "curso 17S1AR001 de Andrés Lasry"
Nov16-Feb17
Se trata de utilizar una aplicación bluetooth por él realizada
para enviar datos desde el telefono móvil a la placa Arduino.
La aplicación la tiene realizada en ANDROID por APPINVENTOR2.
es configurable los valores que envía.
por defecto tiene los siguientes;
1 2 3
4 5 6
7 8 9
- Lo utilizaré para manejar mi coche CYBOT950 Eaglesmoss del 2001.
Dirección web sobre el coche http://www.lpilsley.co.uk/cybot/driver.htm
el cual dispone;
+ de una placa driver par activar los motores
Le incorporo:
+ Una placa BT HC05 para la recepción bluetooth
+ Dos sensores de distancia HC-SR04, que pueden medir
distancias entre 2 cm a 4mts con una precisión de 3mm
+ Dos leds que podrán ser activados desde el bluetooch
+ Programa "mando_mio_V1.aia" que realizo basado en el "mando.aia" de Andrés lasry.
Le tengo hecho las siguientes modificaciones:
+ Permitirá la recepción de datos del arduino al móvil. es decir:
+ Permitirá ver en el tfno sobre el LCD, los valores de distancia al objeto de forma contínua
+ Se podrán encender o apagar los leds desde el tfno.
+ Todas las posiciones del Joystick ejecutan una función
----posición Joystick Android y actuación----
posicion 1 : Activa leds
posicion 7 : los apaga.
posición 2 : Marcha adelante.
posición 8 : Marcha Atrás
posición 4 : Marcha a Izquierda; girará aprox 90º y continuará de frente.
posición 6 : Marcha a derecha; girará aprox 90º y continuará de frente.
posición 3 : Gira sobre sí mismo a Dcha
posición 7 : gira sobre sí mismo a Izqda.
Todas estas posiciones se verán reflejadas sobre la LCD del móvil, así como el valor en centímetros
de la distancia a los objetos de la parte frontal y trasera del coche.
Claramente estos datos serán enviados de la placa arduino al móvil de forma constante.
La dificultad del proyecto ha estado en el envío, no de uno, si no de tres datos diferentes al móvil
tratando siempre de conseguir rapida respuesta del tfno móvil con la placa arduino del coche en el envío y re
------------- Para activar los 2 motores;----------------
- Giro hacia adelante: pines arduino 3 y 5 a nivel HIGH (con 1-3 de la placa driver)
- Giro hacia atrás: pines arduino 6 y 9 a nivel HIGH (con 2-4 de la placa driver)
- Giro a Dcha: pines arduino 3 en LOW y pin 5 en HIGH
- Giro a izqda: pines arduino 3 en HIGH y pin 5 en LOW
- Giro sobre sí mismo a Dcha : analogWrite(3,0); analogWrite (5,125);
- Giro sobre sí mismo a Izqda : analogWrite(3,125); analogWrite (5,0);
-----------------------------------------------------------
OBSERVACIONES:
La velocidad se irá reduciendo a medida que se vaya acercando a cualquier obstáculo que se encuentre
por delante o detrás del vehículo.
Si se sobrepasa la distancia mínima, se producirá una intermitencia de los leds durante 4 segundos, y acto
seguido, invertirá la marcha durante 1 sg para salir de esa posición, quedandosé en posición de "Parado"
a la espera de recibir ordenes desde el joystick del mando.
------------Conexionado de la placa driver.-------
Conector de 7 pines
Nota RH y LH significan motor Righ (motor dcho, motor Left (motor izqdo)
---Motores hacia adelante, poner los pines 1-3 en high de la placa driver---
(que corresponden con el pin 3 y 5 de arduino en HIGH)
1 - RH motor
3 - LH motor
---Motor hacia Atrás, poner los pines 2-4 en high de la placa driver---
(que corresponden con el pin 6 y 9 de arduino en HIGH)
2 - RH motor
19. 4 - LH motor
5 - 5 volts ,se puede usar como alimentación a otros elementos
6 - 6 volts , " " " " " " "
7 - ground.
Conector de 4 pines
1 - ground.
2 - ground.
3 - 9 volts in procedente de la pila de 9V
4 - 6 volts in.procedente de las 4 pilas de 1.5V
-------------------------
conector MT1; es el LH Motor (motor de la izqda)
conector MT2; es el LR Motor (motor de la dcha)
++++++Conexionado ARDUINO PLACA DRIVER ++++++
ARDUINO PLACA DRIVER
MT2R_GiroAdelante pin 3PWM --------- 1
MT1L_GiroAdelante pin 5PWM --------- 3
MT2R_GiroAtras pin 6PWM ------------ 2
MT2L_GiroAtras pin 9PWM ------------ 4
GND -------------------------------- 7 GND para unificar masas.
5 salida de la placa driver a + 5V
6 salida a +6V de la placa driver
----Conexionado Arduino sensor de distancia HC-SR04------
ARDUINO HC-SR04
2 como salida ----- TriggerDtero
4 como entrada ---- echoDtero.
7 como salida ----- TriggerTrasero
8 como entrada ---- echoTrasero.
--------Conexionado Arduino sensor BlueTooth HC05---------
ARDUINO Sensor blueTooth HC05
10RX -------- Con pin Tx Bluetooth
11TX -------- Con pin Rx Bluetooth
OBSERVACIONES: El bluetooth HC05 (que es maestro/esclavo)debemos siempre mandarle
al final de cada comando r,n .Para ello configurar el monitor/terminal serial de arduino,
para que envíe: "ambos NL & CR"
Y lo mismo si lo hacemos de cualquier aplicación android como en este caso.
----------------------------------------------------------
ARDUINO
12 ----- activa dos leds azules que ya llevan R de 68ohm
-----------------------------------------------------------
*/
#include < SoftwareSerial .h> //Para manejo bluetooth HC05
//permite asignar otros puertos distinto al serial para poder utilizarlo en conjunto
//Para utilizar a la par la comunicación con el Serial Monitor que utiliza los pines 0 RX y 1 Tx
//y la comunicación BLUETOOH pines que le asigno el pin 10RX y 11Tx intercambiarlos con los de
//la placa bluetooth 10Rx con el Tx y el 11Tx con el Rx de la placa bluetooth HC05
//---variables globales-------
const int nLecturas=10; //para hacer 1/2 de 10 lecturas BT
int lecturas[nLecturas]; //array para guardar últimas lecturas BT
int indice = 0;
int total = 0;
unsigned int media = 0; //media de las lecturas
unsigned int media1=0; //media del sensor frontal
unsigned int media2=0; //media del sensor trasero
String direccion = "";
unsigned long tiempo = 0;
unsigned long distancia = 0;
int distanciaMinima= 25; //valor inicial 25cm
int tiempoGirar = 100; //tiempo para hacer girar corresponde aprox a 90º
int tiempoParada = 100; //tiempo para que paren motores
int dato = '5'; //inicia posición reposo joystick ""Ponerlo entre comillas"" o se verá mal en lcd.
const int MT2R_GiroAdelante=3; //unido al pin 1 de la placa driver MT2 hacia adelante
20. const int MT1L_GiroAdelante=5; //unido al pin 3 de la placa driver MT1 hacia adelante
const int MT2R_GiroAtras=6; //unido al pin 2 de la placa driver MT2 hacia atrás
const int MT1L_GiroAtras=9; //unido al pin 4 de la placa driver MT1 hacia atrás
const int leds = 12;//para activar leds en la pro micro el 20
const int triggerF = 2;// para activar el trigger del sensor distancia HC-SR04 Frontal
const int echoF = 4;// por donde recibe señal del sensor frontal
const int triggerT = 7;// para activar el trigger del sensor distancia HC-SR04 Trasero
const int echoT = 8;// por donde recibe señal del sensor Trasero
//--------------------PROGRAMA-----------------
/* OBSERVACIÓN MUY IMPORTANTE: sobre las limitaciones de la librería "SoftwareSerial (Rx,Tx);"
http://manueldelgadocrespo.blogspot.com.es/p/biblioteca.html
No todos los pines en la Mega y Mega 2.560 soportan interrupciones de cambio de nivel,
por lo que solamente la siguiente puede ser utilizado para
RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63),
A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
No todos los pines de las placas Leonardo y Micro soportan interrupciones de cambio de nivel,
así que solamente los siguientes se pueden utilizar para
RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
En Arduino o Genuino 101 la velocidad máxima actual de RX es de 57600bps
En Arduino o Genuino 101 RX no funciona en el pin 13
*/
//si utilizo la PRO MICRO El pin 10 de arduino pro micro hace de RX y 16 de TX
SoftwareSerial bt(10,11); //en la uno 10RX Y 11TX ; intercambiarlos con la placa
//bluetooth HC05, es decir,
// unir pin10(RX)con ------> TX placa bluetooth HC05
//y el pin 11 (TX)con ------> RX placa bluetooth HC05
String posicJoystickGiroMot[]= {"ADELANTE" ,"ATRAS ","IZQUIERDA" ,"DERECHA " ,"PARADO " ,"LEDS ON
void setup()
{
//--configuracion pines de salida y entrada---
//OUTPUT 2-3-5-6-7-9 y el 20 INPUT 4-8 conectados al pin "echo" del sensor ultrasónico Frontal - Trasero
//los pines 10Rx y 11Tx para el bluetooth no hace falta configurarlos
for (int i=2;i<=9;i++)
{
if ((i == 4)or (i==8))
{
pinMode (i,INPUT); //configura como entrada el 4 y 8
continue ; // salta de nuevo al for sin hacer lo de más abajo
}//
pinMode (i,OUTPUT );
digitalWrite (i,LOW); //los inicializa a cero
} //fin for
pinMode (leds, OUTPUT ); //pin 12 activar leds como salida
digitalWrite (leds, LOW); //inicia a nivel 0
//---------------------------------
// MI PLAQUITA bluetooh va a "9600".
//la comunicación con la placa bluetooth HC05 sólo acepta 9600 baudios.
bt.begin(9600); //serial bluetooth
Serial .begin(9600); //Serial arduino; acepta todas las velocidades
//----------------------------------------------------------------
}// fin setup ();
//----------------------------------------------------------------
void loop()
{
//-------------MENSAJES DISTANCIA AL MÓVIL---------
//int medidorDistancias (byte pinTrigger,byte pinEcho,int distancia)
medidorDistancias (2,4,distanciaMinima);
21. media1= media; //"Distancia Frontal: "
medidorDistancias (7,8,distanciaMinima);
media2= media; //"Distancia Trasera: "
// sprintf(buffer,"%d,%d",media1,media2);//no acepta el sprintf(buffer,"%s,%d,%d",direccion,media1,media2);
//----ENVÍO AL SERIAL se puede suprimir------------
Serial .println (direccion); //variable global con la dirección que toma el vehículo
Serial .print(media1); //Sensor Delantero
Serial .println (" cm");
Serial .print(media2); //Sensor Trasero
Serial .println (" cm");
//----- SENSORES DE DISTANCIA SR-HC04------------
//----------ENVÍO DE DATOS AL MÓVIL---------------
bt.print(direccion); //index 1 variable global con la dirección que toma el vehículo.
//sensor ultrasonico Frontal
bt.print("/"); //separador
bt.print(media1); //index 2 Sensor Delantero
bt.print(" cm");
bt.print("/");//separador para lectura del siguiente sensor ultrasónico
//sensor ultrasonico Trasero
bt.print(media2); //index 3 Sensor Trasero
bt.print(" cm");
bt.print("/"); //separador para lectura del siguiente sensor ultrasónico
//---------------------------------------------------
} // fin loop()
//++++++++++++++++FUNCIONES UTILIZADAS++++++++++++++++
// ----FUNCIÓN DE LECTURA PUERTO BLUETOOTH----
// lo pongo aquí para que lea de forma constante y se pueda tener
//respuesta más inmediata a los botones del Joystick móvil
void lecturaPuertoBT()
{
while(bt.available ()>0)
{
int datoprueba = bt.read();//variable entera global
if ((datoprueba!=13)and (datoprueba!=10))
{
dato = datoprueba;
}
// En la función "switch" el valor a comparar "case X: " X sólo puede ser de tipo entero.
//otros lenguajes sí lo aceptan pero arduino NO: No obstante, he probado que si pongo
//en los "case" el valor entero a comprobar entre comillas; ej case '2' todo ok SI LO ACEPTA
//es decir el valor enviado por el mando bluetooth es el entero 2. Si lo pongo sin comillas no lo acepta
switch (dato) //comprobamos el caracter que nos llega
{
//---para activar o desactivar los leds pin 12 ---
case '1':
{
Serial .println (posicJoystickGiroMot[5]); //GIRO HACIA ADELANTE
direccion = "LEDS ON "; //ajustado a 11 caracteres+espacios en el appinventor
digitalWrite (leds, HIGH);// pin 12
break;
}
case '9':
{
Serial .println (posicJoystickGiroMot[6]); //GIRO HACIA ADELANTE
22. direccion = "LEDS OFF " ;//ajustado a 10 11
digitalWrite (leds, LOW);// pin 12
break;
}
//-------------------------------------------------
case '2':
{
Serial .println (posicJoystickGiroMot[0]); //GIRO HACIA ADELANTE
direccion = "ADELANTE" ; //ajustado a 8
apagarTodos();
giroAdelante(); //pin 1 y 3 en HIGH
break;
}
case'8':
{
Serial .println (posicJoystickGiroMot[1]); //GIRO HACIA ATRÁS
direccion = "ATRAS "; //ajustado a 13
apagarTodos();
giroAtras(); //pines 6 y 9 en HIGH
break;
}
case'4':
{
Serial .println (posicJoystickGiroMot[2]); //GIRO A IZQDA
direccion = "IZQUIERDA" ;//ajustado a 9
apagarTodos();
//luego activa el nuevo giro
digitalWrite (MT2R_GiroAdelante, HIGH);// pin 3
digitalWrite (MT1L_GiroAdelante, LOW);// pin 5
delay(tiempoGirar); //tiempo para girar
apagarTodos();
giroAdelante(); //pin 1 y 3 en HIGH
break;
}
case'6':
{
Serial .println (posicJoystickGiroMot[3]); //GIRO A DCHA
direccion = "DERECHA " ; //ajustado a 9
//primero desactiva TODOS los MOTORES
apagarTodos();
//luego activa el nuevo giro
digitalWrite (MT2R_GiroAdelante, LOW);// pin 3
digitalWrite (MT1L_GiroAdelante, HIGH);// pin 5
delay(tiempoGirar); //tiempo para girar
apagarTodos();
giroAdelante(); //pin 1 y 3 en HIGH
break;
}
case'5':
{
Serial .println (posicJoystickGiroMot[4]); //VEHÍCULO PARADO
direccion = "PARADO " ; //ajustado a 11
apagarTodos();
break;
}
// -----hacer rotar de forma continua a Dcha o a Izqda------
case'3': //giro a DCHA continuo
{
Serial .println (posicJoystickGiroMot[2]); //GIRO A DCHA
direccion = "GIRO >>>>" ;//ajustado a 9
apagarTodos();
//luego activa el nuevo giro
analogWrite (MT2R_GiroAdelante,0); // pin 3
analogWrite (MT1L_GiroAdelante,125); // pin 5
break;
}
case'7': //giro a IZQDA continuo
{
23. Serial .println (posicJoystickGiroMot[2]); //GIRO A IZQDA
direccion = "<<<< GIRO" ;//ajustado a 9
apagarTodos();
//luego activa el nuevo giro
analogWrite (MT2R_GiroAdelante,125); // pin 3
analogWrite (MT1L_GiroAdelante,0); // pin 5
break;
}
//----------------------------------------------------------
} //fin del switch(dato)
} //fin if bt.available()>0
}//fin void lecturaPuertoBT
//--------------------------------------------
//++++FUNCIÓN medidorDistancias ()++++
//------------instrucciones para el control de la distancia ----
//--si es menor a una distancia que especifiquemos se parara----
// se hace una media de 10 lecturas para dar un valor más estbilizado
int medidorDistancias (byte pinTrigger,byte pinEcho,int distMinima)
{
total = 0; // Sí lo necesito al no utilizar el array int lecturas[nLecturas];
indice = 0; //reiniciamos el indice.
while (indice < nLecturas)
{
digitalWrite (pinTrigger, LOW); //activación pinTrigger 2 - 7 sensores frontal-trasero
delayMicroseconds (5); //para estabilizar otros le dan sólo 2 us
digitalWrite (pinTrigger, HIGH);
delayMicroseconds (10); //ha de ser 10 us para el sensor HC-SR04 otros sensores le dan sólo 5 us.
digitalWrite (pinTrigger, LOW); //paro la activación y comienza el envío de la señal ultrasónica
//por el pin "echo" se empieza a recibir una señal HIGH la función pulsein(), pausa el sketc
//para contar el tiempo transcurrido hasta recibir el rebote, momento en el cual por el pi
//"echo" pasa a detectarse una señal LOW y pulseIn() devuelve su resultado en microsegundos
// http://manueldelgadocrespo.blogspot.com.es/p/pulsin.html
tiempo = pulseIn (pinEcho, HIGH);//receptor pinEcho 4 - 8 sensores frontal-trasero
distancia = 0.01717*tiempo; // considero la velocidad del sonido como 343,2m/s según la wiki a 20
//dando un resultado de 0.01717cm por cada microsegundo considerando
total= total + distancia;
indice = indice + 1;
lecturaPuertoBT(); // si lo dejo me sube el contaje de la distancia
delayMicroseconds (25); //tiempo mínimo entre lecturas es de 20 us.
}//fin while indice <= nlecturas
media = total / nLecturas; //en cm
//Según donde mires dicen que el sensor de distancia mide desde
//los 2cm a 4 ó 5 o incluso 7 metros con una precision de 3 mm.
//para evitar posibles problemas limito su lectura en 400
if (media > 400){media = 400;}
controlDistMinima();
}//fin función medidorDistancias (...)
//--------------------------------------------------------------
//++++++++++++FUNCIÓN controlDistMinima()++++++++++
//Evita se pase, y si lo hace para,parpadean los leds y retrocede-avanza un tiempo
void controlDistMinima()
{
// if (dirección != direccionPrevia)
///// { direccionPrevia = direccion; //evita que
//---------------------al 100% máxima velociad--------
if ((media >= distanciaMinima + 75)and (direccion == "ADELANTE" ))
{
24. digitalWrite (MT2R_GiroAdelante, HIGH);// pin 3 analogWrite(MT2R_GiroAdelante,255);// pin 3
digitalWrite (MT1L_GiroAdelante, HIGH);// pin 5 analogWrite(MT1L_GiroAdelante,255);// pin 5
}
if ((media >= distanciaMinima + 75)and (direccion == "ATRAS ")) // ajustado a 13
{
digitalWrite (MT2R_GiroAtras, HIGH);// pin 6 analogWrite(MT2R_GiroAtras,255);// pin 6
digitalWrite (MT1L_GiroAtras, HIGH);// pin 9 analogWrite(MT1L_GiroAtras,255);// pin 9
}
//------------------------al 50% velocidad-----------
if ((media >= distanciaMinima + 50)and (media < distanciaMinima + 75)and (direccion == "ADELANTE" ))
{
analogWrite (MT2R_GiroAdelante,125); // pin 3 digitalWrite(MT2R_GiroAdelante,HIGH);// pin 3
analogWrite (MT1L_GiroAdelante,125); // pin 5 digitalWrite(MT1L_GiroAdelante,HIGH);// pin 5
}
if ((media >= distanciaMinima + 50)and (media < distanciaMinima + 75)and(direccion == "ATRAS ")
{
analogWrite (MT2R_GiroAtras,125); // pin 6 digitalWrite(MT2R_GiroAtras,HIGH);// pin 6
analogWrite (MT1L_GiroAtras,125); // pin 9 digitalWrite(MT1L_GiroAtras,HIGH);// pin 9
}
//------------------------al 28% velocidad-----------
if ((media >= distanciaMinima + 25)and (media < distanciaMinima + 50)and (direccion == "ADELANTE" ))
{
analogWrite (MT2R_GiroAdelante,70); // pin 3 digitalWrite(MT2R_GiroAdelante,HIGH);// pin 3
analogWrite (MT1L_GiroAdelante,70); // pin 5 digitalWrite(MT1L_GiroAdelante,HIGH);// pin 5
}
if ((media >= distanciaMinima + 25)and (media < distanciaMinima + 50) and(direccion == "ATRAS "
{
analogWrite (MT2R_GiroAtras,70); // pin 6 digitalWrite(MT2R_GiroAtras,HIGH);// pin 6
analogWrite (MT1L_GiroAtras,70); // pin 9 digitalWrite(MT1L_GiroAtras,HIGH);// pin 9
}
//------------------------al 20% velocidad-----------
if ((media >= distanciaMinima + 10)and (media < distanciaMinima + 25)and (direccion == "ADELANTE" ))
{
analogWrite (MT2R_GiroAdelante,50); // pin 3 digitalWrite(MT2R_GiroAdelante,HIGH);// pin 3
analogWrite (MT1L_GiroAdelante,50); // pin 5 digitalWrite(MT1L_GiroAdelante,HIGH);// pin 5
}
if ((media >= distanciaMinima + 10)and (media < distanciaMinima + 25) and(direccion == "ATRAS "
{
analogWrite (MT2R_GiroAtras,50); // pin 6 digitalWrite(MT2R_GiroAtras,HIGH);// pin 6
analogWrite (MT1L_GiroAtras,50); // pin 9 digitalWrite(MT1L_GiroAtras,HIGH);// pin 9
}
//------Parar + intermit Leds + invertir sentido giro durante 1sg a 1/2 velocidad -------
// ----y poner dato ='5' para parar motor a espera orden de joystick del móvil-----------
//A (media < distanciaMinima +10) parar 100ms + intermit leds ( 4 sgdos)+ invertir trayectoria para salir
//de esa posición. Se evita que choque con objetos que pueda encontrar de frente o por la parte trasera
if ((media < distanciaMinima +10 )and (direccion == "ADELANTE" ))
{
apagarTodos(); //detenerlo + intermit leds + salida direccion inversa
intermitenciaLeds(); //intermitencia 10ms + tiempoParada
digitalWrite (MT2R_GiroAtras, HIGH);
digitalWrite (MT1L_GiroAtras, HIGH);
delay(1000); //para que salga
dato = '5'; // para que se pare el motor
}
if ((media < distanciaMinima + 10) and(direccion == "ATRAS "))
{
apagarTodos(); //detenerlo + intermit leds + salida direccion inversa
intermitenciaLeds(); //intermitencia 10ms + tiempoParada
digitalWrite (MT2R_GiroAdelante, HIGH);
digitalWrite (MT1L_GiroAdelante, HIGH);
delay(1000); //para que salga
dato = '5'; // para que se pare el motor
}
25. }//fin función controlDistMinima()
//-----------------------------------------------------------
//++++FUNCIÓN giroAdelante()++++
void giroAdelante()
{
digitalWrite (MT2R_GiroAdelante, HIGH);// pin 3
digitalWrite (MT1L_GiroAdelante, HIGH);// pin 5
}//fin función void giroAdelante()
//-----------------------------------------------------------
//++++FUNCIÓN void giroAtras()++++
void giroAtras()
{
digitalWrite (MT2R_GiroAtras, HIGH);// pin 6
digitalWrite (MT1L_GiroAtras, HIGH);// pin 9
}//fin función void giroAtras()
//-----------------------------------------------------------
// se pondrán a nivel 0 la activación a los motores cuando se cambie
// de posición el Joystick o bien cuando esté en posición neutra
//y se le dará un pequeño tiempo(tiempoParada = 100) para hacer suaves los cambios
//++++FUNCIÓN apagarTodos()++++
void apagarTodos()
{
for (int i=2;i<=9;i++)
{
if ((i == 4)or (i==8))//el 4 y el 8 son entradas de los "echo" sensor distacia HC-SR04
{
continue ; // salta de nuevo al for sin hacer lo de más abajo
}//
digitalWrite (i,LOW); //pone a nivel 0 las salidas
} //fin for
delay(tiempoParada); //tiempo para que se paren todos los motores
}//fin función void apagarTodos()
//-----------------------------------------------------------
//-----------FUNCIÓN intermitenciaLeds()------
void intermitenciaLeds()
{
for (int i = 0; i<27; i++) // 4 sgdos de parpadeo, paro motor y salida en dirección inversa
{
digitalWrite (leds, HIGH);
delay(100);
digitalWrite (leds, LOW);
delay(50);
}//fin for
} //fin intermitenciaLeds()
//-----------------------------------------
26. PROGRAMA EN APPINVENTOR 2
Para el control del coche por bluetooth de Andrés Lasry “mando.apk” y complementado por Joaquín
Berrocal, para la recepción de datos desde la placa Arduino Uno del coche hacia el teléfono. Marzo-2017