anexo ii programación arduino y processing

53
ANEXO II – Programación Arduino y Processing Instalación audiovisual interactiva NOMBRE DEL ESTUDIANTE: Oriol Elié Joan NOMBRE DEL DIRECTOR: Jorge Martín Giménez NOMBRE DEL CODIRECTOR: Rafael Weyler Perez ESTUDIOS: Grado en ingeniería electrónica industrial y automática ESCUELA: Escuela Técnica Superior de Ingenierías Industrial y Aeronáutica de Terrassa FECHA: 09/05/2019 CONVOCATORIA: Convocatoria Extraordinaria de Primavera 2019

Upload: others

Post on 28-Nov-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ANEXO II Programación Arduino y Processing

ANEXO II – Programación Arduino y Processing

Instalación audiovisual interactiva

NOMBRE DEL ESTUDIANTE: Oriol Elié Joan

NOMBRE DEL DIRECTOR: Jorge Martín Giménez

NOMBRE DEL CODIRECTOR: Rafael Weyler Perez

ESTUDIOS: Grado en ingeniería electrónica industrial y automática

ESCUELA: Escuela Técnica Superior de Ingenierías Industrial y Aeronáutica de Terrassa

FECHA: 09/05/2019

CONVOCATORIA: Convocatoria Extraordinaria de Primavera 2019

Page 2: ANEXO II Programación Arduino y Processing

1 ESEIAAT

Página 1

Índice

Anexo II.1: Codigo Arduino .................................................................................................................. 2

Anexo II.2: Codigo Processing ............................................................................................................ 12

Page 3: ANEXO II Programación Arduino y Processing

2 ESEIAAT

Página 2

Anexo II.1: Codigo Arduino #include <LiquidCrystal.h>

#include <timer.h>

LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);// creamos una variable liquidCrystal y

lo asociamos que los pin 7,8,9,10,11,12

int PinSensorHall = 3;// variable para indicar que el sensor de efecto hall va

conectado al pin3

int PinGiroIzq = 5;

int PinGiroDer = 2;

int PulsadorLCD = 6;

int PulsadorReset = 13;

const int Analogpin = A1;

int EstadoActualSensor1 = 0;// variables para comparar el estado del sensor Hall

int EstadoActualSensor2 = 0;

int EstadoUltimoSensor = 0;

int Gir = 0;//la variable que utilizaremos para hacer los giros, si Gir=0 la bici

seguirá recta, si Gir=1 la bici giro izquierda y si Gir=2 giro derecha

int ContadorVueltas = 0;// contador vueltas bicicleta

int Screen = 1;// variable que se usara para cambiar la información que se

muestra en la pantalla LCD

int State;// variable donde almacenaremos el valor enviado desde processing para

poder cambiar la información del lcd

int Tiempo1 = 0;

int Tiempo2 = 0;

int Tiempo3 = 0;

int PosicionPote;

int GiroAnterior = 0;

int ValorGiroAnterior = 0;

int TensionPote;

int ContadorParo1 = 0;//variables que se usaran para contar el tiempo que ha

estado parada la bicicleta para así poner a 0 la velocidad.

int ContadorParo2 = 0;

int Reset = 0;// variable que servirá para resetear el recorrido de processing.

static float radioEnCm = 30.0; //INGRESAR radio de la rueda en cm

static float pi = 3.1416;

static float PerimetroRueda = 2*pi*(radioEnCm/100); //Calcula Perimetro en

metros

float DistRecorrida=0;

float DistKM=0;

float Tiempo4=0;

float Velocidad=0;

float VelocidadMedia=0;

String StringGiro;// variable String que nos servirá para pasar un valor Int a

String

Page 4: ANEXO II Programación Arduino y Processing

3 ESEIAAT

Página 3

boolean esValorDistancia=false;// variables booleanas que se usaran para evitar

conflictos a la hora de enviar por puerto serie los valores de distancia y

velocidad

boolean esValorVelocitat=false;

boolean TimerAcabado2 = false;

bool PulsacionAnterior = HIGH;

bool PulsacioResetAnterior = HIGH;

unsigned long TiempoTranscurrido,TiempoTranscurridoMin=0;// temporizador donde

se almacenara el tiempo transcurrido desde que se ha iniciado el programa

Timer<1> Temporizador;// creamos una variable timer que usaremos para contar el

tiempo que esta parada la bicicleta.

void setup(){

pinMode(PinGiroIzq,OUTPUT);// este es un pin digital que usaremos para

encender un led en caso de que se gire a la izquierda,Pin2.

pinMode(PinGiroDer,OUTPUT);// este es un pin digital que usaremos para

encender un led en caso de que se gire a la derecha,Pin5.

pinMode(PinSensorHall,INPUT);// el pin que se usa para el detector magnético,

el que se usa para calcular la velocidad.

pinMode(4,OUTPUT);// pin que indica si el sensor de efecto hall está

detectando o no mediante un led.

pinMode(PulsadorLCD,INPUT_PULLUP);//Pin 6, usamos las resistencias de PULL-UP

internar del Microcontrolador ARDUINO UNO R3, para tener un pulsador que se

activa por flanco de bajada.

pinMode(PulsadorReset, INPUT);// pin 13.

Serial.begin(9600);

lcd.begin(16,2);//Inicializa la interfaz en la pantalla LCD y especifica las

cotas (anchura y altura) de la visualización. begin () debe llamarse antes que

cualquier otro comando de la librería LCD.

DistRecorrida = 0;//Inicias estas variables con valor 0

Velocidad=0;

PantallaLCD();//llamas al metodo PantallaLCD()

}

Page 5: ANEXO II Programación Arduino y Processing

4 ESEIAAT

Página 4

Inicio Loop

void loop(){

TiempoTranscurrido = millis()/1000;// calculamos el tiempo que ha trancurrido

desde que se ha iniciado el programa en segundos

if(TiempoTranscurrido >= 60){

TiempoTranscurridoMin = millis()/60000;// pasamos de segundo a minutos

}

if(digitalRead(PulsadorReset) == LOW && PulsacioResetAnterior == HIGH ){//

comparación para que solo entre al if cuando se detecte un flanco descendente

Reset = 1;

Serial.print(Reset);

Serial.print('\b');

}

PulsacioResetAnterior = digitalRead(PulsadorReset);

EstadoActualSensor1=digitalRead(3);//la variable estadoActualSensor1 recoge el

valor que hay en el pin digital 3

delay(10);

EstadoActualSensor2=digitalRead(3);//la variable estadoActualSensor2 recoge el

valor que hay en el pin digital 3 al cabo de 10ms

TensionPote=analogRead(Analogpin);// coges el valor que hay en el pin analogico

A1.

PosicionPote= map(TensionPote,0,1023,0,100);// esto sirve para pasar a % el

valor de voltaje del potenciómetro, ya que al ser una

//salida analógica el valor que obtienes al leer el pin viene dado en una

resolución de 10bits, 0V=0 y 5V = 1023, por lo tanto el 0V=0% y 5V=100%

if(PosicionPote != GiroAnterior){// con esta condición se consigue que solo

entre en el método Giro() en el caso de que la posición del potenciómetro se

mueva, en caso de que el potenciómetro se mantenga en la misma posición no

entrara en el if

GiroAnterior = PosicionPote;// guardo el valor de PosicionPote en la

variable de giro anterior para así asegurarme que solo entra en el método giro()

solo cuando el potenciómetro se mueva.

Giro();// llama al método giro()

}

//Si los estados no son iguales, el sketch no hace gran cosa, ya que significa

que las lecturas del sensor Hall son producidas por el ruido.

Page 6: ANEXO II Programación Arduino y Processing

5 ESEIAAT

Página 5

if (EstadoActualSensor1 == EstadoActualSensor2) { // se compara el

estado del sensor hall con su estado al cabo de 10ms, para así evitar el efecto

bounce que es un efecto producido al ejecutar un conteo de vueltas, el sensor no

reacciona o a veces cuenta más de una vuelta. Esto se produce durante el primer

milisegundo de cada conteo produciendo pequeñas variaciones de la señal de

entrada que hacen que los valores HIGH y LOW obtenidos alternen rápidamente

if (EstadoActualSensor1!= EstadoUltimoSensor){// se hace esta

comparación para comprobar que realmente la rueda está girando.

if (EstadoActualSensor1 == LOW) {// Debido al efecto de la

resistencia Pull-up que se ha puesto en serie con el sensor( para evitar lecturas

erróneas por factores externos como el ruido eléctrico) hace que en estado de

reposo el PIN 3 tenga el estado HIGH,

ContadorVueltas = ContadorVueltas + 1;// el contador

sirve para contar el número de vueltas que ha hecho la rueda, cada vez que el

sensor detecta el imán, aumentamos el contador en 1

VEL();// llamada al método

Distancia();// llamada al método

}

}

}

Temporizador.tick();//inicias el timer

EstadoUltimoSensor = EstadoActualSensor1; // guardas el valor de estado

actual en estado último.

if (ContadorVueltas%2 == 0 ) {// hace la comparación del resultado del

resto(%)del contador de vueltas de la rueda, en caso de que el número de vueltas

sea múltiple de 2 el resto siempre será 0 por lo tanto entrara en este if

digitalWrite(4, LOW);//apaga el led que nos servirá como indicador

de que el sensor hall funciona correctamente

ContadorParo1=0;//se resetea el contador que indica

Cuánto tiempo lleva la bicicleta parada cuando el led esta encendido

Temporizador.every(1000,Funcion2);// con esta función se

Llama, cada 1000ms, a la interrupción funcion2.

}

else {

digitalWrite(4, HIGH);//Enciende el led que nos servirá como

indicador de que el sensor hall funciona correctamente

ContadorParo2=0;//se resetea el contador que indica cuánto tiempo

lleva la bicicleta parada cuando el led esta apagado

Page 7: ANEXO II Programación Arduino y Processing

6 ESEIAAT

Página 6

Temporizador.every(1000, Funcion2);//con esta función se llama,

cada 1000ms, a la interrupción funcion2.

}

PantallaLCD();// llamamos al método PantallaLCD() para actualizar los

valores que salen por pantalla

}

Fin método Loop()

bool Funcion2(){// método que retorna una variable booleana TimerAcabado2

ContadorParo2 = ContadorParo2 + 1;//cada vez que se entra en este metodo( cada

1000ms) incrementamos en 1 el contadorParo2

ContadorParo1 = ContadorParo1 + 1;// cada vez que se entra en este metodo( cada

1000ms) incrementamos en 1 el contadorParo1

if(ContadorParo2 == 3 or ContadorParo1 == 3){// entra en el if cuando

cualquiera de los 2 contadores llegue a 3( significa que han pasado 3s desde que

no se detecta un cambio en el contador de vueltas de la rueda, es decir que el

sensor de efecto hall no detecta el imán, por lo tanto no hay movimiento.)

ContadorParo2=0;// se resetean los contadores

ContadorParo1=0;

TimerAcabado2 = true;// retornamos un true para indicar que han pasado 3s des

de que la bicicleta se ha parado, para poner la velocidad a 0.

VEL();//llamamos al método VEL() para actualizar su valor.

}

TimerAcabado2 = false;// en caso de que los contadores no lleguen a 3 se

retorna un falso para indicar que la bicicleta sigue en marcha.

}

Inicio método Distancia

void Distancia(){ //método donde se calculará la distancia recorrida

DistRecorrida = PerimetroRueda*ContadorVueltas;//calculas la distancia

recorrida en metros a partir del perímetro de la rueda y a partir del número de

vueltas que detecta el sensor magnético(de efecto hall) con el imán

DistKM = DistRecorrida/1000;//pasas los metros a Km

esValorDistancia = true;// ponemos la variable a true para indicar que el

valor que se quiere enviar por puerto serie es el de la distancia.

esValorVelocitat=false;// ponemos la variable a false.

if(DistRecorrida <= 999){

Page 8: ANEXO II Programación Arduino y Processing

7 ESEIAAT

Página 7

floatToString(DistRecorrida,6,2);//llamada al metodo floatToString(el valor

en float, longitud del numero,numero de decimales)

}

else {

floatToString(DistKM,6,2);//llamada al metodo floatToString(valor en float,

longitud del número, número de decimales)

}

} Fin del método Distancia

Inicio metodo VEL()

void VEL(){

if (ContadorVueltas%2 == 0 ) {// comparas el resultado del módulo del

operador con 0, esta comparación será cierta en el caso de que el número de

vueltas de la rueda corresponda a un número múltiple de 2

Tiempo1 = millis();//obtienes el tiempo en ms cuando el número de

vueltas de la rueda sea par

}

else {

Tiempo2 = millis();// obtienes el tiempo en ms cuando el número de

vueltas de la rueda sea impar,

Con estos dos valores podrás saber el tiempo que pasa entre cada vuelta de rueda

para así calcular la velocidad.

}

Tiempo3 = abs(Tiempo2-Tiempo1); //obtienes el valor absoluto en ms de la

resta del tiempo2 - tiempo1, esto se hace para saber el tiempo que ha

transcurrido cada vez que el sensor a detectado el imán para así poder calcular

luego la velocidad

Tiempo4 = (((Tiempo3/1000.0)/60)/60);//pasas el resultado de ms a horas

Velocidad = ((PerimetroRueda/1000)/Tiempo4);//calculas la velocidad en

Km/h a a partir del perímetro de la rueda y con el tiempo4

if(Velocidad < 0){// se hace esta comparación para evitar posibles

velocidades negativas en caso de que haya algún error

Velocidad = 0;

}

if(Velocidad >= 100){// se acota la velocidad máxima que se puede

alcanzar en 100Km/h

Velocidad = 100;

}

if(TimerAcabado2 == true){// con este if pondremos la velocidad a 0 a

partir del booleano que nos retorna la interrupción funcion2.

Page 9: ANEXO II Programación Arduino y Processing

8 ESEIAAT

Página 8

Velocidad = 0;

ContadorParo1 = 0;// reseteamos los contadores

ContadorParo2 = 0;

}

esValorDistancia = false;

esValorVelocitat = true;

floatToString(Velocidad,6,2); // llamada al metodo floatToString(valor

en float, longitud del numero,numero de decimales)

delay(10);

}Fin Metodo VEL()

Inicio método FloatToString()

void floatToString(float n,int i,int d){// Con este método pasaremos lo valores

de velocidad y distancia de float a string, ya que para enviar datos por puerto

serie no se acepta en formato float, pero si en string

if(esValorVelocitat == true){// en caso de que lo que se envíe sea la velocidad

char z[i+1];// cadena donde almacenaremos el número convertido, será un array

con una longitud de i + 1.

String VelReal;

dtostrf(n,i,d,z);// n: es el número en formato float a convertir/ i: Tamaño

del número en caracteres/ d: precisión, el número de decimales que queremos

obtener.

VelReal = String(z);

Serial.print(VelReal);// enviamos la velocidad, a Processing, vía puerto

serie en formato String.

Serial.print("\t");// enviamos este carácter para indicar el final de la

transmisión de los datos de la velocidad.

delay(10);// retardo de 10ms

}

if(esValorDistancia == true){

char c[i+1];

String Distancia;

dtostrf(n,i,d,c);

Distancia=String(c);

Serial.print(Distancia

Serial.print("\n

delay(10);

}

} Fin de FloatToString()

Page 10: ANEXO II Programación Arduino y Processing

9 ESEIAAT

Página 9

Inicio método Giro()

void Giro(){// método para enviar el valor de giro a partir del valor del

potenciómetro, en este método la idea es que el pin 3 lea la tensión que deja

pasar el potenciómetro(0 a 5V) en caso de que la tensión leída sea de 0 a 1,66V

corresponde al 0-33% si la tensión es 1,67 a 3,32(33-66%) i si es de 3,33-5V(66-

100%)

if(PosicionPote >= 0 & PosicionPote <= 33){//en caso de que la tensión del

potenciómetro leída sea de 0-33% se girara a la izquierda

digitalWrite(PinGiroIzq,HIGH);//encendemos el led izquierdo

digitalWrite(PinGiroDer,LOW);//apagamos el led derecho

Gir=1;

if(Gir != ValorGiroAnterior){// haciendo este se consigue que el valor

de giro solo se envie una vez entra la posición del potenciometro del 0-33% para

evitar que se envie constantemente el valor de giro cuando el poteciometro se

gire entre el rango 0-33%

ValorGiroAnterior = Gir;

Serial.print(Gir);// enviamos el valor via puerto serie

Serial.print("\r");

delay(10);

}

}

if(PosicionPote > 33 & PosicionPote <= 66){

digitalWrite(PinGiroIzq,LOW);

digitalWrite(PinGiroDer,LOW);

Gir=0;

if(Gir != ValorGiroAnterior){

ValorGiroAnterior = Gir;

Serial.print(Gir);

Serial.print("\r");

delay(10);

}

}

if(PosicionPote > 66 & PosicionPote <= 100){

digitalWrite(PinGiroIzq,LOW);

digitalWrite(PinGiroDer,HIGH);

Gir=2;

if(Gir != ValorGiroAnterior){

ValorGiroAnterior = Gir;

Serial.print(Gir);

Serial.print("\r");

delay(10);

}

}

} Fin Giro()

Page 11: ANEXO II Programación Arduino y Processing

10 ESEIAAT

Página 10

Inicio método PantallaLCD()

void PantallaLCD(){

if(digitalRead(PulsadorLCD)== LOW && PulsacionAnterior == HIGH){// activara

cada vez que se detecte un flanco de bajada, así en el caso de que mantengamos

apretado el pulsador la pantalla del LCD no cambiará constantemente

lcd.clear();

Screen=Screen+1;

}

PulsacionAnterior = digitalRead(PulsadorLCD);

if (Serial.available() > 0) {//compruebas que en el puerto serie hay un dato

disponible

State = Serial.read();// lees el valor que se ha enviado de processing a

arduino mediante puerto serie

if (State == '1') {// Se entra en el if en caso de el valor del puerto serie

sea 1 o en caso de que se haya pulsado el pulsador

lcd.clear();// limpias la pantalla del lcd

Screen = Screen+1;//incrementas en 1 el valor de la variable screen, para

así poder cambiar la información de la pantalla LCD

}

}

if(Screen == 4){//En el caso de que la variable screen sea igual a 3

Screen = 1;// se resetea su valor a 1 debido a que solo hay tres pantallas

con información distinta en el LCD

}

if(Screen == 1){// si el valor de la pantalla es 1

lcd.clear();// se limpia la pantalla LCD

lcd.write("V=");// escribes en la pantalla el caracter V=

lcd.print(Velocidad);// imprimes por pantalla el valor de la velocidad

lcd.write("Km/h");// escribes en la pantalla el caracter Km/h

lcd.setCursor(0,1);// mueves el cursor de la pantalla una linea para poder

escribir por debajo de lo escrito anteriormente, per defecto el cursor empieza en

el(0,0)

if(DistRecorrida<=999){//en caso que el valor de la distanciaRecorrida sea

menor a 999 se mostrara la distancia recorrida en metros

lcd.write("D=");// escribes en la

pantalla el caracter D=

lcd.print(DistRecorrida);// imprimes

por pantalla el valor de la distReco.

lcd.write("m");// escribes en la

pantalla el caracter m

}

Page 12: ANEXO II Programación Arduino y Processing

11 ESEIAAT

Página 11

else{// en el caso de que el valor de la

distanciaRecorrida sea mayor a 999 se imprimira por pantalla la distanci en Km

lcd.write("D=");

lcd.print(DistKM);

lcd.write("Km"); }

}

if(Screen == 2){// si el valor de la pantalla es 2

lcd.clear();//se limpia la pantalla LCD

if(TiempoTranscurrido <= 60){

lcd.write("Tiempo=");

lcd.print(TiempoTranscurrido);

lcd.write("s"); }

else{

lcd.write("Tiempo=");

lcd.print(TiempoTranscurridoMin);

lcd.write("min");

}

lcd.setCursor(0,1);

lcd.write("V.media=");

lcd.print(VelocidadMedia);

lcd.write("Km/h");

}

if(Screen == 3){// si el valor de la pantalla es 1

lcd.clear();

lcd.write("Contador=");

lcd.print(ContadorVueltas);

lcd.write("vueltas");

}

return;

}Fin PantallaLCD()

Page 13: ANEXO II Programación Arduino y Processing

12 ESEIAAT

Página 12

Anexo II.2: Codigo Processing import processing.video.*;

import processing.video.Movie;

import org.gstreamer.elements.PlayBin2;

import processing.serial.*;

import cc.arduino.*;// librería que permite la comunicación vía puerto serie

entre Processing y Arduino

import interfascia.*;// librería para crear el pulsador que servirá para cambiar

la información( velocidad, distancia etc.) que salga por pantalla

final PlayBin2.ABOUT_TO_FINISH FINISHING = new PlayBin2.ABOUT_TO_FINISH() {//

Evento que se acciona cada vez que un video termina

@ Override void aboutToFinish(PlayBin2 elt) {

VideoTerminado = true;//Variable booleana que sirve para indicar que un video

se ha terminado.

print("Finishing...", elt.get("uri"));// cuando se termina el video se

muestra por consolar el mensaje de Finishing mas la localización y el nombre del

video terminado.

}

};

static final String[] FILMS = {//Se crea un array de strings donde se llenara con

todos los video que se usaran en este proyecto.

"F:\\1carrermerce.mov",

"F:\\2Carme_DretaMagatzem.mov",

"F:\\3Carme_IzqRafael.mov",

"F:\\4MerceRecta.mov",

"F:\\5SantRafael_IzqMerce.mov",

"F:\\6SantRafael_DretaMerce.mov",

"F:\\7Rafael_DretaCarme.mov",

"F:\\8girDretasantrafael.mov",

"F:\\9girIZQrafel.mov",

"F:\\10Domenecdreta.mov",

"F:\\11magatzem_DretaDomenec.mov",

"F:\\12Merce_Venintde_DretaMagatzem.mov",

"F:\\13Domenecizq_venintde_izqrafael.mov",

"F:\\14santpere_venintde_izqsantdoemnec.mov",

"F:\\15santpere_vennintde_santpereRecta.mov",

"F:\\16Carme_venintde_izqPere.mov",

"F:\\17SantRafael_venintde_izqCarme.mov",

"F:\\18Carme_recta_anantcapalaRambla.mov",

"F:\\19Magatzem_izqCarme.mov",

"F:\\20Merce_venintde_DretaSantRafael.mov",

"F:\\21Merce_venintde_IzqSantRafael.mov",

"F:\\22SantRafael_seguintrecta_Cap_a_Doemenec.mov",

"F:\\23Merce_venintde_izqSantpere.mov",

"F:\\24Merce_venintde_izqMagatzem.mov",

"F:\\25Magatzem_seguintrecta.mov",

"F:\\26SantDomenec_venintde_izqMagatzem.mov",

"F:\\27SantRafael_venintde_izqMerce.mov",

"F:\\28SantRafael_venintde_dretaMerce.mov",

"F:\\29Merce_seguintrecta_direccioRambla.mov",

"F:\\30Magatzem_venintde_IzqMerce.mov",

"F:\\31Magatzem_venintde_dretaMerce.mov",

"F:\\32Carme_Venintde_DretaRafael.mov",

"F:\\33SantPere_venintde_dretaCarme.mov",

Page 14: ANEXO II Programación Arduino y Processing

13 ESEIAAT

Página 13

"F:\\34Santpera_seguintrecta_capaCarme.mov",

"F:\\35Domenec_venintde_DretaSantpera.mov",

"F:\\36SantRafel_venintde_DretaDomenec.mov",

"F:\\37Domenec_seguintRectaRambla.mov",

"F:\\38Magatzem_venintde_DretaDomenec.mov",

"F:\\39Merce_venintde_DretaMagatzem.mov",

"F:\\40Magatzem_venintde_DretaMerce.mov",

"F:\\41Domenec_dretaRafael.mov",

"F:\\42Magatzem_venintde_DretaDomenec.mov",

"F:\\43SantPere_venintde_izqMerce.mov",

"F:\\44SantPere_venintde_DerMerce.mov",

"F:\\45Domenc_IzqMagatzem.mov",

"F:\\46Carme_DretaRafael.mov",

"F:\\47Rafael_IzqDomenec.mov",

"F:\\48Magatzem_RectacapaCarme.mov",

"F:\\49Carme_RectacapaPere.mov",

"F:\\50Rafael_DretaDomenec.mov",

"F:\\51Rafael_RectaCapaCarme.mov",

"F:\\52SantPere_RectaCapaDomenec.mov",

"F:\\53Domenec_RectaCapaPere.mov",

"F:\\54Merce_DretaPere.mov",

"F:\\55Merce_DretaRafael.mov",

"F:\\56Merce_IzqRafaelRambla.mov",

};

static final float FPS = 30.0;// creamos la variable FPS como un float y estática

para fijar su valor y que no se pueda modificar .

final Movie[] movies = new Movie[FILMS.length];// creas una array de peliculas

con la

//longitud de films es decir cras una array con la cantidad de videos que contien

e films, pero lo haces como variable final

//para que asi no se modificar su valor(longitud) en el programa.

Serial myPort;

Movie m;// crea una variable película

int idx,x,y;// creas variables enteras.

int Giro;// la uso para pasar el valor de giro de string a int ya que despues en

el if(valorgir==1) la comparación se ha de hacer con enteros, Si valorgir=0

seguir recto, valorgir=1 izquierda, valorgir=2 derecha

int screen = 0;// variable per cambiar la información de la pantalla.

int Reset;

boolean

carrermerce,mercerecta,rafaelizq,rafaeldreta,carme_izqrafael,santrafaeldreta,dome

nec_dretapera,carme_izqpere,magatzem_izqcarme,domenecrectarambla,carmerectarambla

,santrafael_izqcarme,magatzem_rectadesdecarme,isPaused=false;

boolean

merce_izqmagatzem,magatzem_dretadomenec,santrafael_rectacapadomenec,merce_izqrafa

el,merce_dretarafael,domenec_izqmagatzem,merce_dretamagatzem,domenec_izqrafael,do

menec_dretarafael,magatzem_izqmerce=false;

boolean

magatzem_dretamerce,domenecrecta,santrafael_izqdomenec,santpere_izqdomenec,santpe

re_izqmerce,santpere_dretamerce,carme_dretamagatzem,santRafael_RectacapaCarme,car

me_dretarafael,santrafael_dretadomenec,santpere_rectacapacarme,merce_izqpere,merc

Page 15: ANEXO II Programación Arduino y Processing

14 ESEIAAT

Página 14

e_rectarambla,santrafael_izqmerce,santrafael_dretamerce,domenec_dretapere,carme_r

ectacapapere,santpere_dretacarme,merce_dretapere,santpere_rectacapadomenec,domene

c_rectarambla,rafael_dretacarme,magatzem_rectacapacarme=false;

String TransmisionVelocidad;// esta variable es la que se comunica con el

arduinop para obtener los valors de la velocidad que envia el arduino

String TransmisionGiro;//esta variable es la que se comunica con el arduinop para

obtener los valors del giro que envia el arduino

String TransmisionDistancia;// Variable donde guardaremos el valor de la

distancia que se ha enviado mediante puerto serie de Arduino a Processing

String TransmisionReset;

String ValorVelocidad;// esta variable sirve para recoger el valor de la

velociadad a partir de transmisionvelocidad pero filtrando los valores donde la

velocidad es null

String ValorGiro;// esta variable sirve para recoger el valor de giro a partir de

transmisiongiro pero filtrando los valores donde el giro es null

String ValorVelMedia;

String ValorDistancia;

String ValorReset;

Float FloatVelocidad;// para pasar de string a float ya que para el

m.speed(float) necesito un float

float FloatDistancia;

Float FloatvelMedia;

float VelocidaddeRepoduccion;

float TiempoTranscurridoSeg;

float TiempoTranscurridoMin;

PFont Texto;// PFont es la clase de fuente para Processing, que nos servira para

crear un tipo de letra a partir del método createFont();

boolean VideoTerminado=false;// esta variable la creo pasa usarla en el movie

event para que asi cuando se termine el video se ponga a true.

GUIController informacion;// variable GuiController donde se controlara las

variables b1 y L

IFButton b1;//Se crea una variable IFButton que sirve para crear un pulsador.

PGraphics j2;

void setup() {

size(1280, 800, P2D);// creas la ventana donde se reproducen los videos con un

tamaño de 1280 pixeles en el eje x y 800 pixeles en el eje y, la variable P2D es

un Procesador de gráficos 2D que hace uso de hardware de gráficos compatible con

OpenGL.

noSmooth();// el smooths se usa para suavizar la imagen, por defecto siempre se

aplica, por eso tienes que poner el noSmooths.

loop();//

frameRate(FPS);//FPS=30

background(0);// es el color de fondo de la venta, en este caso el 0 = negro

j2 = createGraphics(width/4, height/10, P2D);//creas y retornas un nuevo objeto

PGraphics, se usa esta variable para dibujar un bufer de gràficos fuera de

pantalla. los 2 primeros parámetros son para definir la altura i la anchura, en

pixeles, del objeto y el tercer parámetro es para especificar el renderizador en

este caso el P2D.Nos servirá de pantalla por donde saldrá toda la

información(velocidad,Distancia etc.)

Page 16: ANEXO II Programación Arduino y Processing

15 ESEIAAT

Página 15

informacion = new GUIController(this);//El objeto GUIController realiza un

seguimiento de todos los componentes de la GUI y maneja el reenvío de eventos

desde el applet de procesamiento a los componentes de la GUI individuales.

b1 = new IFButton("Informacíon",100,600,width/4, height/20); //Creas un nuevo

componente GUI de botón, el primer parámetro es el texto mostrado en el botón,

los dos siguientes parámetros son para seleccionar en que posición se muestra en

la pantalla, y los 2 últimos són para crear el tamaño y forma del botón

b1.addActionListener(this);//asocias la variable botón b1 a un ActionListener

para manejar los eventos en caso de que pulse el botón.

informacion.add(b1);// añades al objeto GUIController información el botón b1

mediante el metodo add() para así controlar el botón

Texto = createFont("Arial",22,true);// Apartar de las variables Pfont creada

anteriormente, especificas el tipo de letra que se usará y el tamaño de las

letras.

String portName = Serial.list()[1];//Asocias tu puerto a la entrada USB

correspondient, en el caso de mi ordenador es la 1.

myPort = new Serial(this, portName, 9600);// Creas una nuevo puerto serie

asociado al puerto de entrada 1 y con un BaudRate de 9600

for (String s : FILMS) (movies[idx++] = new Movie(this,

s)).playbin.connect(FINISHING);//recorres todo la longitud de la variable films

para rellenar la variable movies.El idx se usa de puntero.Ademas llamas al evento

playbin.connect(FINISHING).

CarrerMerce();// llamas al método para empezar el recorrido

}

void draw() {

set(x, y, m);//Al configurar una imagen(m), los parámetros x e y definen las

coordenadas para la esquina superior izquierda de la imagen, independientemente

del modo de imagen actual ().

drawRect(j2);//dibujas un rectángulo con los parámetro de la variable PGraphics

j2

image(j2, 100, 650);// el método image sirve para dibujar en la pantalla el

rectángulo creado a partir de la variable j2.Los otros dos parámetros son para

indicar la posición donde se dibujara el rectángulo en la ventana principal

if(myPort.available() > 0){ // si hay algún dato disponible en el puerto

TransmisionVelocidad=myPort.readStringUntil('\t');// leemos el string que

enviamos por arduino, y especificamos que solo lea los valores hasta que detecta

el carácter '\t', así conseguimos identificar qué valor se está enviando y evitar

conflictos

delay(10);

if(TransmisionVelocidad!=null){//en caso de que el valor enviado no se null

ValorVelocidad=TransmisionVelocidad;// guardamos el valor de

transmisionVelocidad con los nulls ya filtrados en la variable String

ValorVelocidad

FloatVelocidad= float(trim(ValorVelocidad));// convertimos a Float el

valor de velocidad.

}

TransmisionGiro=myPort.readStringUntil('\r');

Page 17: ANEXO II Programación Arduino y Processing

16 ESEIAAT

Página 16

if(TransmisionGiro != null){

ValorGiro = TransmisionGiro;

Giro = Integer.parseInt(ValorGiro.trim());// convertimos a Int el valor

de giro

println(Giro);

}

TransmisionDistancia=myPort.readStringUntil('\n');

if(TransmisionDistancia!=null){

ValorDistancia=TransmisionDistancia;

FloatDistancia= float(trim(ValorDistancia));//convertimos a Float el

valor de a distancia.

}

TransmisionReset = myPort.readStringUntil('\b');

if(TransmisionReset != null){

ValorReset = TransmisionReset;

Reset = Integer.parseInt(ValorReset.trim());

println(Reset);

}

}

if(Reset == 1){// en el caso de que el pulsador de reset sea presionado,

reiniciamos el recorrido.

CarrerMerce();

}

TiempoTranscurridoSeg = millis()/1000;// tiempo transcurrido en segundos desde

que se inicia el programa.

if(TiempoTranscurridoSeg>=60){//cuando el TiempoTranscurridoSeg sea mas grande

o igual a 60

TiempoTranscurridoMin = millis()/60000;//Pasamos el tiempo a de segundos a

minutos

}

FloatvelMedia=FloatDistancia/(millis()/1000)*3600;// calculamos la velocidad

media a partir de la distancia recorrida(valor que se obtiene por puerto serie)

con el tiempo transcurrido

surface.setTitle(round(m.time()) + "\t " + round(m.duration())+ "\t " +

FILMS[idx]);

if(carrermerce==true){//A partir de las variables booleanas con el nombre de

las calles, lo que se quiere conseguir, es que mientras el video aún se esté

ejecutando se sigua entrando en el método de la calle correspondiente.

CarrerMerce();

}

else if(mercerecta==true){

Mercerecta();

}

else if(rafaelizq==true){

SantRafaelizq();

}

else if(santrafaeldreta==true){

Page 18: ANEXO II Programación Arduino y Processing

17 ESEIAAT

Página 17

SantRafaeldreta();

}

else if(carme_izqrafael==true){

Carme_IzqRafael();

}

else if(domenec_dretapera==true){

Domenec_DretaPera();

}

else if(carme_izqpere==true){

Carme_IzqPere();

}

else if(magatzem_izqcarme==true){

Magatzem_IzqCarme();

}

else if(carmerectarambla==true){

CarmeRectaRambla();

}

else if(santrafael_izqcarme==true){

SantRafael_IzqCarme();

}

else if(magatzem_rectadesdecarme==true){

Magatzem_rectadesdeCarme();

}

else if(merce_izqmagatzem==true){

Merce_IzqMagatzem();

}

else if(magatzem_dretadomenec==true){

Magatzem_DretaDomenec();

}

else if(santrafael_rectacapadomenec==true){

SantRafael_RectacapaDomenec();

}

else if(merce_izqrafael==true){

Merce_IzqRafael();

}

else if(merce_dretarafael==true){

Merce_DretaRafael();

}

else if(domenec_izqmagatzem==true){

Domenec_IzqMagatzem();

}

else if(merce_dretamagatzem==true){

Merce_DretaMagatzem();

}

Page 19: ANEXO II Programación Arduino y Processing

18 ESEIAAT

Página 18

else if(domenec_izqrafael==true){

Domenec_IzqRafael();

}

else if(domenec_dretarafael==true){

Domenec_DretaRafael();

}

else if(magatzem_izqmerce==true){

Magatzem_IzqMerce();

}

else if(magatzem_dretamerce==true){

Magatzem_DretaMerce();

}

else if(domenecrecta==true){

DomenecRecta();

}

else if(santrafael_izqdomenec==true){

SantRafael_IzqDomenec();

}

else if(santpere_izqdomenec==true){

SantPere_IzqDomenec();

}

else if(santpere_izqmerce==true){

SantPere_IzqMerce();

}

else if(santpere_dretamerce==true){

SantPere_DretaMerce();

}

else if(carme_dretamagatzem==true){

Carme_DretaMagatzem();

}

else if(santRafael_RectacapaCarme==true){

SantRafael_RectacapaCarme();

}

else if(carme_dretarafael==true){

Carme_DretaRafael();

}

else if(santrafael_dretadomenec==true){

SantRafael_DretaDomenec();

}

else if(santpere_rectacapacarme==true){

SantPere_RectacapaCarme();

}

else if(merce_izqpere==true){

Page 20: ANEXO II Programación Arduino y Processing

19 ESEIAAT

Página 19

Merce_IzqPere();

}

else if(merce_rectarambla==true){

Merce_RectaRambla();

}

else if(santrafael_izqmerce==true){

SantRafael_IzqMerce();

}

else if(santrafael_dretamerce==true){

SantRafael_DretaMerce();

}

else if(domenec_dretapere==true){

Domenec_DretaPere();

}

else if(carme_rectacapapere==true){

Carme_RectacapaPere();

}

else if(santpere_dretacarme==true){

SantPere_DretaCarme();

}

else if(merce_dretapere==true){

Merce_DretaPere();

}

else if(santpere_rectacapadomenec==true){

SantPere_rectacapaDomenec();

}

else if(domenec_rectarambla==true){

Domenec_RectaRambla();

}

else if(rafael_dretacarme==true){

Rafael_DretaCarme();

}

else if(magatzem_rectacapacarme==true){

Magatzem_RectacapaCarme();

}

}

void CarrerMerce(){

Reset = 0;// Ponemos la variable a 0 para que no entre en bucle

carrermerce=true;// Ponemos esta variable a true para indicar de que aun se

esta ejecutando el video

(m = movies[idx = 0]).play();// ejecutamos el video que esta en la posición 0

del array de videos.

while (m.width == 0) delay(100);

Page 21: ANEXO II Programación Arduino y Processing

20 ESEIAAT

Página 20

centralizeMovie();

if(FloatVelocidad==null || FloatVelocidad<= 0 ){// En el caso de que la

velocidad sea null, mas pequeña o igual a 0

VelocidaddeRepoduccion=0.1;//Fijamos la velocidad a 0.1 para asi evitar

errores

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.89;// La velocidad de reproduccion

sera igual a la velocidad obtenida por puerto serie divida por la velocidad en la

que iba cuando se grabo el video.

}

m.speed(VelocidaddeRepoduccion);//Fijamos que la velocidad de reproducción del

video sea igual al dato calculado anteriormente

if(VideoTerminado == true){// cuando el video haya terminado, mediante el final

PlayBin2.ABOUT_TO_FINISH FINISHING que retorna VideoTerminado==true

carrermerce=false;// indicamos que el video ya se ha finalizado

VideoTerminado=false;// Reseteamos la variable.

switch(Giro){

case 0:// En caso de que el valor de giro = 0,(si valorgir==0 es para

indicar que se quiere seguir recto)

m.stop();// paramos el video

delay(100);// retraso de 100ms

Mercerecta();// saltamos a este metodo para ejecutar el siguiente

video

break;

case 1:// En caso de que el valor de giro = 1,(si valorgir==1 es para

indicar que se quiere girar a la izquierda)

m.stop();// paramos el video

delay(100);// retraso de 100ms

SantRafaelizq(); // saltamos a este metodo para ejecutar el siguiente

video

break;

case 2: // En caso de que el valor de giro = 1,(si valorgir==1 es para

indicar que se quiere girar a la izquierda)

m.stop();// paramos el video

delay(100);// retraso de 100ms

SantRafaeldreta();// saltamos a este metodo para ejecutar el

siguiente video

break;

}

}

}

void SantRafaelizq(){

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

Page 22: ANEXO II Programación Arduino y Processing

21 ESEIAAT

Página 21

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.097;

}

rafaelizq=true;

(m = movies[idx = 4]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

rafaelizq=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Carme_IzqRafael();

break;

case 2:

m.stop();

Carme_DretaRafael();

break;

}

}

}

void Mercerecta(){

mercerecta=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/9.76;

}

(m = movies[idx = 3]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

mercerecta=false;

VideoTerminado=false;

switch(Giro){

Page 23: ANEXO II Programación Arduino y Processing

22 ESEIAAT

Página 22

case 0:

m.stop();

break;

case 1:

m.stop();

SantPere_IzqMerce();

break;

case 2:

m.stop();

SantPere_DretaMerce();

break;

}

}

}

void SantRafaeldreta(){

santrafaeldreta=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){// En el caso de que la

velocidad sea null, mas pequeña o igual a 0

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.678;

}

(m = movies[idx = 5]).play();// ejecutamos el video de la 5 posición

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true) {

santrafaeldreta = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Domenec_IzqRafael();

break;

case 2:

m.stop();

Domenec_DretaRafael();

break;

}

}

Page 24: ANEXO II Programación Arduino y Processing

23 ESEIAAT

Página 23

}

void Carme_IzqRafael(){

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/8.77;

}

carme_izqrafael=true;

(m = movies[idx = 2]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

carme_izqrafael=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Magatzem_IzqCarme();

break;

case 2:

m.stop();

break;

}

}

}

void Domenec_DretaPera(){

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/11.27;

}

domenec_dretapera=true;

(m = movies[idx = 34]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

Page 25: ANEXO II Programación Arduino y Processing

24 ESEIAAT

Página 24

if(VideoTerminado==true){

domenec_dretapera=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Domenec_RectaRambla();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

SantRafael_DretaDomenec();

break;

}

}

}

void Carme_IzqPere(){

carme_izqpere=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){ VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/9.26;

}

(m = movies[idx = 15]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

carme_izqpere=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

CarmeRectaRambla();

break;

case 1:

m.stop();

SantRafael_IzqCarme();

break;

case 2:

m.stop();

break;

Page 26: ANEXO II Programación Arduino y Processing

25 ESEIAAT

Página 25

}

}

}

void Magatzem_IzqCarme(){

magatzem_izqcarme=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){// En el caso de que la

velocidad sea null, mas pequeña o igual a 0

VelocidaddeRepoduccion=0.1;//Fijamos la velocidad a 0.1 para así evitar

errores

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.377;// La velocidad de reproduccion

sera igual a la velocidad obtenida por puerto serie divida por la velocidad en la

que iba cuando se grabó el video.

}

(m = movies[idx = 18]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

magatzem_izqcarme=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Magatzem_rectadesdeCarme();

break;

case 1:

m.stop();

Merce_IzqMagatzem();

break;

case 2:

m.stop();

break;

}

}

}

void CarmeRectaRambla(){

carmerectarambla=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){// En el caso de que la

velocidad sea null, más pequeña o igual a 0

VelocidaddeRepoduccion=0.1;//Fijamos la velocidad a 0.1 para asi evitar

errores

}

Page 27: ANEXO II Programación Arduino y Processing

26 ESEIAAT

Página 26

else{

VelocidaddeRepoduccion=FloatVelocidad/9.94;// La velocidad de reproducción

será igual a la velocidad obtenida por puerto serie divida por la velocidad en la

que iba cuando se grabó el video.

}

(m = movies[idx = 17]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

carmerectarambla=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Magatzem_IzqCarme();

break;

case 2:

m.stop();

break;

}

}

}

void SantRafael_IzqCarme(){

santrafael_izqcarme=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){// En el caso de que la

velocidad sea null, mas pequeña o igual a 0

VelocidaddeRepoduccion=0.1;//Fijamos la velocidad a 0.1 para asi evitar

errores

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.34;// La velocidad de reproduccion

sera igual a la velocidad obtenida por puerto serie divida por la velocidad en la

que iba cuando se grabo el video.

}

(m = movies[idx = 16]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santrafael_izqcarme=false;

VideoTerminado=false;

switch(Giro){

Page 28: ANEXO II Programación Arduino y Processing

27 ESEIAAT

Página 27

case 0:

m.stop();

SantRafael_RectacapaDomenec();

break;

case 1:

m.stop();

Merce_IzqRafael();

break;

case 2:

m.stop();

Merce_DretaRafael();

break;

}

}

}

void Magatzem_rectadesdeCarme(){

magatzem_rectadesdecarme=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/11.16;

}

(m = movies[idx = 24]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

magatzem_rectadesdecarme=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Domenec_IzqMagatzem();

break;

case 2:

m.stop();

break;

}

}

}

Page 29: ANEXO II Programación Arduino y Processing

28 ESEIAAT

Página 28

void Merce_IzqMagatzem(){

merce_izqmagatzem=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/9.53;

}

(m = movies[idx = 23]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

merce_izqmagatzem=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Mercerecta();

break;

case 1:

m.stop();

SantRafaelizq();

break;

case 2:

m.stop();

SantRafaeldreta();

break;

}

}

}

void Magatzem_DretaDomenec(){

magatzem_dretadomenec = true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.377;

}

(m = movies[idx = 37]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

Page 30: ANEXO II Programación Arduino y Processing

29 ESEIAAT

Página 29

if(VideoTerminado==true){

magatzem_dretadomenec=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Magatzem_RectacapaCarme();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Merce_DretaMagatzem();

break;

}

}

}

void Magatzem_RectacapaCarme(){

magatzem_rectacapacarme=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.377;

}

(m = movies[idx = 47]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

magatzem_rectacapacarme=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Carme_DretaMagatzem();

Page 31: ANEXO II Programación Arduino y Processing

30 ESEIAAT

Página 30

break;

}

}

}

void SantRafael_RectacapaDomenec(){

santrafael_rectacapadomenec=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/10.678;

}

(m = movies[idx = 21]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

santrafael_rectacapadomenec = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Domenec_IzqRafael();

case 2:

m.stop();

Domenec_DretaRafael();// video 40

break;

}

}

}

void Merce_IzqRafael(){

merce_izqrafael=true;

if(FloatVelocidad==null || FloatVelocidad<= 0 ){

VelocidaddeRepoduccion=0.1;

}

else{

VelocidaddeRepoduccion=FloatVelocidad/9.76;

}

(m = movies[idx = 20]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

Page 32: ANEXO II Programación Arduino y Processing

31 ESEIAAT

Página 31

centralizeMovie();

if(VideoTerminado == true){

merce_izqrafael = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

SantPere_IzqMerce();

break;

case 2:

m.stop();

SantPere_DretaMerce();

break;

}

}

}

void Merce_DretaRafael(){

merce_dretarafael = true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.18;

}

(m = movies[idx = 19]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

merce_dretarafael = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Magatzem_IzqMerce();

break;

Page 33: ANEXO II Programación Arduino y Processing

32 ESEIAAT

Página 32

case 2:

m.stop();

Magatzem_DretaMerce();// video 30

break;

}

}

}

void Domenec_IzqMagatzem(){

domenec_izqmagatzem = true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.379;

}

(m = movies[idx = 25]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

domenec_izqmagatzem = false;

VideoTerminado = true;

switch(Giro){

case 0:

m.stop();

DomenecRecta();

break;

case 1:

m.stop();

SantRafael_IzqDomenec();

break;

case 2:

m.stop();

break;

}

}

}

void Merce_DretaMagatzem(){

merce_dretamagatzem=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

Page 34: ANEXO II Programación Arduino y Processing

33 ESEIAAT

Página 33

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.89;

}

(m = movies[idx = 11]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

merce_dretamagatzem=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Mercerecta();

break;

case 1:

m.stop();

SantRafaelizq();

break;

case 2:

m.stop();

SantRafaeldreta();

break;

}

}

}

void Domenec_IzqRafael(){

domenec_izqrafael=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.4;

}

(m = movies[idx = 12]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

domenec_izqrafael = false;

VideoTerminado = false;

switch(Giro){

Page 35: ANEXO II Programación Arduino y Processing

34 ESEIAAT

Página 34

case 0:

m.stop();

break;

case 1:

m.stop();

SantPere_IzqDomenec();

break;

case 2:

m.stop();

break;

}

}

}

void Domenec_DretaRafael(){

domenec_dretarafael=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.96;

}

(m = movies[idx = 40]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

domenec_dretarafael = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Magatzem_DretaDomenec();

break;

}

}

}

void Magatzem_IzqMerce (){

Page 36: ANEXO II Programación Arduino y Processing

35 ESEIAAT

Página 35

magatzem_izqmerce=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.377;

}

(m = movies[idx = 29]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

magatzem_izqmerce=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Domenec_IzqMagatzem();

break;

case 2:

m.stop();

}

}

}

void Magatzem_DretaMerce(){

magatzem_dretamerce=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.377;

}

(m = movies[idx = 30]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

magatzem_dretamerce = false;

VideoTerminado = false;

switch(Giro){

Page 37: ANEXO II Programación Arduino y Processing

36 ESEIAAT

Página 36

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Carme_DretaMagatzem();

break;

}

}

}

void DomenecRecta(){// Domenec Recta cap a Pere

domenecrecta=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.95;

}

(m = movies[idx = 52]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

domenecrecta = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

SantPere_IzqDomenec();

break;

case 2:

m.stop();

break;

}

}

}

void SantRafael_IzqDomenec(){

santrafael_izqdomenec=true;

Page 38: ANEXO II Programación Arduino y Processing

37 ESEIAAT

Página 37

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/11.47;

}

(m = movies[idx = 46]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

santrafael_izqdomenec = false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

SantRafael_RectacapaCarme();

break;

case 1:

m.stop();

Merce_IzqRafael();

break;

case 2:

m.stop();

Merce_DretaRafael();

break;

}

}

}

void SantPere_IzqDomenec(){

santpere_izqdomenec=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/11.225;

}

(m = movies[idx = 13]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

santpere_izqdomenec = false;

Page 39: ANEXO II Programación Arduino y Processing

38 ESEIAAT

Página 38

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

SantPere_RectacapaCarme();

break;

case 1:

m.stop();

Merce_IzqPere();

break;

case 2:

m.stop();

break;

}

}

}

void SantPere_IzqMerce(){

santpere_izqmerce=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.89;

}

(m = movies[idx = 42]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santpere_izqmerce=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Carme_IzqPere();

break;

case 2:

m.stop();

break;

}

}

Page 40: ANEXO II Programación Arduino y Processing

39 ESEIAAT

Página 39

}

void SantPere_DretaMerce(){

santpere_dretamerce=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.6;

}

(m = movies[idx = 43]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santpere_dretamerce=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Domenec_DretaPere();

break;

}

}

}

void Carme_DretaMagatzem(){

carme_dretamagatzem=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/8.77;

}

(m = movies[idx = 1]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

Page 41: ANEXO II Programación Arduino y Processing

40 ESEIAAT

Página 40

carme_dretamagatzem=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Carme_RectacapaPere();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Rafael_DretaCarme();

break;

}

}

}

void SantRafael_RectacapaCarme(){

santRafael_RectacapaCarme=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/11.93;

}

(m = movies[idx = 50]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

santRafael_RectacapaCarme = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Carme_IzqRafael();

break;

case 2:

m.stop();

Carme_DretaRafael();

Page 42: ANEXO II Programación Arduino y Processing

41 ESEIAAT

Página 41

break;

}

}

}

void Carme_DretaRafael(){

carme_dretarafael=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/8.23;

}

(m = movies[idx = 45]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

carme_dretarafael = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

SantPere_DretaCarme();

break;

}

}

}

void SantRafael_DretaDomenec(){

santrafael_dretadomenec=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/12.19;

}

(m = movies[idx = 49]).play();

Page 43: ANEXO II Programación Arduino y Processing

42 ESEIAAT

Página 42

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado == true){

santrafael_dretadomenec = false;

VideoTerminado = false;

switch(Giro){

case 0:

m.stop();

SantRafael_RectacapaCarme();

break;

case 1:

m.stop();

Merce_IzqRafael();

case 2:

m.stop();

Merce_DretaRafael();

}

}

}

void SantPere_RectacapaCarme(){

santpere_rectacapacarme=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.3;

}

(m = movies[idx = 14]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santpere_rectacapacarme=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Carme_IzqPere();

break;

Page 44: ANEXO II Programación Arduino y Processing

43 ESEIAAT

Página 43

case 2:

m.stop();

break;

}

}

}

void Merce_IzqPere(){

merce_izqpere=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.76;

}

(m = movies[idx = 22]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

merce_izqpere=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Merce_RectaRambla();

break;

case 1:

m.stop();

SantRafael_IzqMerce();

break;

case 2:

m.stop();

SantRafael_DretaMerce();

break;

}

}

}

void Merce_RectaRambla(){

merce_rectarambla=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

Page 45: ANEXO II Programación Arduino y Processing

44 ESEIAAT

Página 44

else{

VelocidaddeRepoduccion = FloatVelocidad/11.73;

}

(m = movies[idx = 28]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

merce_rectarambla=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Magatzem_IzqMerce();

case 2:

m.stop();

Magatzem_DretaMerce();

}

}

}

void SantRafael_IzqMerce(){

santrafael_izqmerce=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.84;

}

(m = movies[idx = 26]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santrafael_izqmerce=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Page 46: ANEXO II Programación Arduino y Processing

45 ESEIAAT

Página 45

break;

case 1:

m.stop();

Carme_IzqRafael();

break;

case 2:

m.stop();

Carme_DretaRafael();

break;

}

}

}

void SantRafael_DretaMerce(){

santrafael_dretamerce=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.84;

}

(m = movies[idx = 27]).play();

VelocidaddeRepoduccion=FloatVelocidad/10.84;

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santrafael_dretamerce=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

Carme_IzqRafael();

break;

case 2:

m.stop();

Carme_DretaRafael();

break;

}

}

}

Page 47: ANEXO II Programación Arduino y Processing

46 ESEIAAT

Página 46

void Domenec_DretaPere(){

domenec_dretapera=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/11.27;

}

(m = movies[idx = 34]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

domenec_dretapera=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Domenec_RectaRambla();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

SantRafael_DretaDomenec();

}

}

}

void Carme_RectacapaPere(){

carme_rectacapapere=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/10.25;

}

(m = movies[idx = 48]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

Page 48: ANEXO II Programación Arduino y Processing

47 ESEIAAT

Página 47

carme_rectacapapere=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

SantPere_DretaCarme();

break;

}

}

}

void SantPere_DretaCarme(){

santpere_dretacarme=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/8.33;

}

(m = movies[idx = 32]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santpere_dretacarme=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

SantPere_rectacapaDomenec();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Merce_DretaPere();

Page 49: ANEXO II Programación Arduino y Processing

48 ESEIAAT

Página 48

break;

}

}

}

void Merce_DretaPere(){

merce_dretapere=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.18;

}

(m = movies[idx = 53]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

merce_dretapere=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

Merce_RectaRambla();

break;

case 1:

m.stop();

SantRafael_IzqMerce();

break;

case 2:

m.stop();

SantRafael_DretaMerce();

break;

}

}

}

void SantPere_rectacapaDomenec(){

santpere_rectacapadomenec=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

Page 50: ANEXO II Programación Arduino y Processing

49 ESEIAAT

Página 49

VelocidaddeRepoduccion = FloatVelocidad/11.225;

}

(m = movies[idx = 51]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

santpere_rectacapadomenec=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

case 1:

m.stop();

break;

case 2:

m.stop();

Domenec_DretaPera();

break;

}

}

}

void Domenec_RectaRambla(){

domenec_rectarambla=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/9.379;

}

(m = movies[idx = 36]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

domenec_rectarambla=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

break;

Page 51: ANEXO II Programación Arduino y Processing

50 ESEIAAT

Página 50

case 1:

m.stop();

break;

case 2:

m.stop();

Magatzem_DretaDomenec();

break;

}

}

}

void Rafael_DretaCarme(){

rafael_dretacarme=true;

if(FloatVelocidad == null || FloatVelocidad <= 0 ){

VelocidaddeRepoduccion = 0.1;

}

else{

VelocidaddeRepoduccion = FloatVelocidad/11.916;

}

(m = movies[idx = 6]).play();

m.speed(VelocidaddeRepoduccion);

while (m.width == 0) delay(100);

centralizeMovie();

if(VideoTerminado==true){

rafael_dretacarme=false;

VideoTerminado=false;

switch(Giro){

case 0:

m.stop();

SantRafael_RectacapaDomenec();

break;

case 1:

m.stop();

Merce_IzqRafael();

break;

case 2:

m.stop();

Merce_DretaRafael();

}

}

}

Page 52: ANEXO II Programación Arduino y Processing

51 ESEIAAT

Página 51

void actionPerformed(GUIEvent e){// se llama a este método cada vez que un

componente GUI genera un evento, nos servirá para detectar si se ha pulsado el

botón b1.

if(e.getSource()==b1){// en caso de que el evento detectado corresponda a la

pulsación del botón b1

screen= screen+1;// se incrementa en uno esta variable para cambiar la

informacón que sale por el recuadro creado j2

myPort.write('1');// envías por puerto serie el valor de uno para así poder

combiar también la información que sale por el lcd

if(screen == 3){// en el caso de que screen = 3

screen=1;// reseteamos a 1 el valor de la variable screen

}

}

}

void drawRect(PGraphics pg){// con este método creas el rectángulo a partir de la

variable PGraphics j2

pg.beginDraw();//Establece las propiedades predeterminadas para un objeto

PGraphics. Debe llamarse antes de que algo se dibuje en el objeto.

pg.clear();// limpias la información que sale por pantalla

pg.stroke(128);//Establece el color utilizado para dibujar líneas y bordes

alrededor de las formas. Este color se especifica en términos del color RGB o HSB

según el modo de color actual (). El espacio de color predeterminado es RGB, con

cada valor en el rango de 0

pg.strokeWeight(10);//Establece la anchura que tendrá el borde del rectángulo

pg.fill(128, 55, 0, 128);// Estableces el color del rectángulo y su opacidad,

los tres primeros parámetros son para indicar el color según RGB y el útilmo

parametro para la opacidad.

pg.rect(0, 0, pg.width, pg.height);// indicas el tamaño del rectangulo

if(screen == 1){//en caso de que el valor de la variable screen sea 1

pg.textFont(Texto); // indicas el tipo de letra que se usara para escribir

la información

pg.fill(0,102,0);// con este método controlas el color de las letras en

RGB.

pg.textAlign(CENTER);// alineas el texto en el centro del recuadro

pg.text("Velocidad = "+FloatVelocidad+"Km/h",pg.width/2,pg.height/2.25);//

escribes en el recuadro la información que quieres mostrar así como donde estará

situado el texto en el rectángulo

if(FloatDistancia<=999){

pg.text("Distancia = "+FloatDistancia+"m",pg.width/2,pg.height/1.5);

}

else{

pg.text("Distancia =

"+FloatDistancia+"Km",pg.width/2,pg.height/1.5);

}

}

if(screen == 2){

Page 53: ANEXO II Programación Arduino y Processing

52 ESEIAAT

Página 52

pg.textFont(Texto);

pg.fill(0,102,0);

pg.textAlign(CENTER);

pg.text("Vel.Media= "+ FloatvelMedia+"Km/h",pg.width/2,pg.height/2.25);

if(TiempoTranscurridoSeg<=60){

pg.text("Tiempo transcurrido = "+

TiempoTranscurridoSeg+"s",pg.width/2,pg.height/1.5);

}

else pg.text("Tiempo transcurrido = "+

TiempoTranscurridoMin+"min",pg.width/2,pg.height/1.5);

}

pg.endDraw();// Finalizes the rendering of a PGraphics object so that it can be

shown on screen. Editar

}

void movieEvent(Movie m) {// Evento que se ejecuta cada vez que se reproduce un

video

m.read();// lee el video que se quiere ejecutar

redraw();// Esta función permite que el programa actualice la ventana de

visualización sólo cuando sea necesario,

}

void centralizeMovie() {// método para hacer que el video salga centrado respecto

a la ventana

x = width - m.width >> 1;

y = height - m.height >> 1;

}