Proyecto coche por bluetooth por joaquin berrocal piris marzo 2017

Page 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






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



POSICIONES DEL JOYSTICK DEL MANDO DEL TFNO.











/*"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 posicion 1 : posicion 7 : posición 2 : posición 8 : posición 4 : posición 6 : posición 3 : posición 7 :

Joystick Android y actuación---Activa leds los apaga. Marcha adelante. Marcha Atrás Marcha a Izquierda; girará aprox 90º y continuará de frente. Marcha a derecha; girará aprox 90º y continuará de frente. Gira sobre sí mismo a Dcha 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


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 4 - 6 volts in.procedente de ------------------------conector MT1; es el LH Motor conector MT2; es el LR Motor

la pila de 9V las 4 pilas de 1.5V (motor de la izqda) (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


const int

MT1L_GiroAdelante=5; //unido al pin 3 de la placa driver MT1 hacia adelante

const int const int

MT2R_GiroAtras=6; //unido al pin 2 de la placa driver MT2 hacia atrás 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 así RX: En En */

todos los pines de las placas Leonardo y Micro soportan interrupciones de cambio de nivel, que solamente los siguientes se pueden utilizar para 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). Arduino o Genuino 101 la velocidad máxima actual de RX es de 57600bps Arduino o Genuino 101 RX no funciona en el pin 13

SoftwareSerial

//si utilizo la PRO MICRO El pin 10 de arduino pro micro hace de RX y 16 de TX 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);


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); Serial .println (" cm");

//Sensor Trasero

//----- 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); bt.print (" cm"); bt.print ("/");

//index 3

Sensor Trasero

//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 { dato = datoprueba; }

(datoprueba!=10))

// 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


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 {


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" )) {


digitalWrite (MT2R_GiroAdelante, HIGH );// pin 3 digitalWrite (MT1L_GiroAdelante, HIGH );// pin 5 }

analogWrite(MT2R_GiroAdelante,255);// pin 3 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 }

"


}//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() //-----------------------------------------


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











Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.