punteros_parteiii

Upload: gustavo-circelli

Post on 26-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Punteros_ParteIII

    1/25

    Cadenas y Arrays, Serial Arduino Parte II

    enero 12, 2016enero 12, 2016 Gustavo Circelli Arduino, Arduino paraprincipiantes , Programacin

    !isto 1" veces, # visitas $oy%

    Serial Arduino parte II, tratar& las diversas 'unciones para el tratamiento de

    Cadenas, y (ue ya $emos introducido el la primera parte Arduino Serial ParteI !eremos la manipulacin de cadenas , y arreglos o arrays)*, y si vamos unpoco mas pro'undo, el uso de punteros+ n esta entrada vamos a cu-rir la'uncin Serial+read % de lectura de datos y su relacin con las cadenas+

    .o primero (ue vamos a ver es la 'uncin Serial+read % , luego lo (ue son losarrays)*, como se de/nen e iniciali an+ eniendo un conocimiento de losarrays)*, despu s podemos introducirnos en el mundo de las Cadenas (ue sonun caso especial de los arrays)*, y mas tarde con los punteros dada su similitudcon las cadenas (ue conceptualmente est&n muy ligados dado (ue el elementode la cadena es un puntero inde3ado+

    Serial+read %

    sta 'uncin lee de a un 4yte 5nicamente, y al $acerlo lo e3trae del -u er+7ecordemos (ue un dato (ue enviado desde el 8onitor Serial es primerointerpretado como ASCII y el monitor lo (ue $ace es enviar los 4ytesconvertidos+ Por e9emplo si enviamos un 1, el monitor interpretar& (ue es unASCII, as:, enviar& el entero "; (ue es el ASCII 1%+

  • 7/25/2019 Punteros_ParteIII

    2/25

    Para nuestro an&lisis carguemos el siguiente cdigo donde Arduino lo (ue $acees renviar como loop todo lo mismo (ue reci-e

    .oop

    Am-os >. ? C7 = sta opcin agrega un car&cter de C7 o carriage 7eturn 1@% 0ueva .:nea= nv:a solo .D al /nal de lo (ue enviemos+

    nviamos un E1F y 7eci-imos";10 .D >.

    7etorno de Carro= sta opcin env:a C7 al /nal de lo (ue enviemos

    7eci-imos";1@ C7

    Por

  • 7/25/2019 Punteros_ParteIII

    3/25

    .a pregunta del millon= KPor(ue si enviamos el E1F no volvemos a ver el E1FL+

    .a respuesta est& en Arduino Serial Parte I + 7ecordar (ue al reci-ir el "; , loreci-e como un entero y luego cuando lo reenv:a lo $ace con ASCII "%MASCII ;%+

    Serial+availa-le % sta 'uncin retorna 1 si e3isten -ytes disponi-les para serle:dos , caso contrario devuelve M1 y $ay (ue tener muc$o cuidado cuando se lausa con N$ile % de-ido a (ue la velocidad de e9ecucin del micro es muysuperior a la velocidad con (ue se reci-en o transmiten los datos por el SerialPort+ Supongamos el siguiente programa=

    Serial+availa-le %

    n primera instancia de9emos delay 100% comentada, para (ue no se e9ecute+

    Al e9ecutar , a-rimos el monitor y enviemos nuevamente el E1F+";Ciclo=01@Ciclo=110Ciclo=2

    http://panamahitek.com/serial-arduino-introduccionhttp://panamahitek.com/serial-arduino-introduccion
  • 7/25/2019 Punteros_ParteIII

    4/25

    >o estar:a reali ando lo (ue ped:amos, ya (ue saldr:amos de N$ile si no $aym&s datos, como vienen ";M1@M10, esperar:amos (ue el ciclo 1 se e9ecutedespu s de reci-ir estos caracteres+ sto se produce de-ido a las di'erenciasde velocidad con (ue e9ecuta Arduino y la velocidad con (ue se reci-en losdatos+ l clocO del Arduino 168$ , supongamos (ue 1 ciclo de instruccin

    como en la mayor:a de los micros sea de Q DcloO "8$ , esto implica (ue unciclo de instruccin dura 0+2J microsegundos+ 1 a ;600demora en llegar T1%U1 ;600 ;@# us+ >i -ien se reci-a el "; , se imprime yel V$ile % vuelve a e9ecutarse ,pero no $a-r& datos disponi-les $asta ;@#us , eneste caso el C7 y, por lo tanto el Wu9o del programa sale del N$ile dado (ue elavaila-le M1, y as: e9ecuta el ciclo 1 del 'or, pero como los datos todav:a noest&n disponi-les (uedan en el primer N$ile esperando+ Si sumamos unpe(ueXo retardo dentro del V$ile , descomentando la l:nea delay 100% con unpar de milisegundos -astar:a%Y o-ligamos a no seguir la e9ecucin para dartiempo a (ue llegue el segundo car&cter + 9ecutamos a$ora veremos lo (ue(ueremos ver

    ";1@10Ciclo=0

    As: (ue $a tener cuidado con estas pe(ueXas cosas (ue son grandes doloresde ca-e a+

    Arrays)*.os arrays)* son arreglos de datos , tam-i n llamados vectores, en este caso deuna dimensin+ l compilador reserva una cierta cantidad de -ytesconsecutivos en la memoria para este tipo de datos, por lo tanto $ay (ueespeci/carle una dimensin, es decir la longitud m&3ima del mismo+ .os arrayspueden contener cual(uier tipo de dato, inclusive -9etos+ .os datos (uecontiene el array)* se llaman elementos del arreglo y se numeran como0,1,2,@,",ZZ+ >M1%, donde > es la dimensin+ Puede verse al array)* como unedi/cio de > pisos, cada piso tiene un departamento , 1 elemento donde viveuna persona, entonces podemos $acer la analog:a de la siguiente manera paraun edi/cio de 10 pisos=

    di/cio)10*, (uiere decir (ue > 10, (ue es su longitud, y sus elementos ser&10 o-viamente, uno en cada piso numerados del 0 al ; >M1%

    di/cio)0* vive [uandi/cio)1* vive Anadi/cio)2* vive Antonio

  • 7/25/2019 Punteros_ParteIII

    5/25

    + + + +di/cio);* vive 8irta

    Array)*

  • 7/25/2019 Punteros_ParteIII

    6/25

    3 es un puntero :ndice dentro del array+ ntonces podemos recorrer un array)*desde 3 0 $asta 3

  • 7/25/2019 Punteros_ParteIII

    7/25

    Cadenas

    .as cadenas, como 'ue introducido, son con9unto de caracteres con lacaracter:stica (ue poseen un car&cter especial de terminacin de cadena B0 ollamado car&cter >ull de /n de cadena o ASCII 0%+ 3isten varias maneras dede/nir cadenas+

    .o (ue distingue simplemente un array de caracteres y una cadena , es (ue lacadena es un array de caracteres T el 5ltimo elemento >ull o B0 +

    String datosCadena Fsoy cadena tam-i nFY

    c$ar arreglo)* ^ n , o , M , s , o , y , M , c , a , d , e , n , a _Y

    c$ar cadena)* ^ s , o , y , M , c , a , d , e , n , a , B0`_Y

    c$ar otracadena)* FSoy otra CadenaFY

    arreglo es simplemente un vector de caracteres > una cadena+ Cadena si esuna cadena+ datosCadena y otracadena tam-i n son cadenas+

    .a di'erencia es (ue en caso de de/nirlas con arrays)* $ay (ue inclu:r el B0/nal de cadena+

    sto es $a-lando e3trictamente del Ansi ECF o standard ECF+ ste car&cter nose visi-le y tampoco se puede imprimir ya (ue se usa como /n de cadena+ .as'unciones print y println est&n compliladas en sus li-rer:as de manera -uscanese car&cter para sa-er cuando /nali a la impresin, o la unin de cadenas, las'unciones (ue manipulan cadenas en general+ Cuando de-en mandar algo alpuerto Serie , previamente le agregan en >ull antes de llamar a la li-rer:a, en elsistema Arduino 9o esto es solo en las 'unciones print println% ya (ue tratanal argumento como cadenas, no ocurre as: con otras 'unciones (ue manipulancadenas pues suponen (ue lo son+

    !eamos este e9emplo y nos (ueda mas claro=

    enemos un arreglo de caracters sin /n de cadena y datos (ue es una cadena

    c$ar arreglo)* ^ n , o , M , s , o , y , M , c , a , d , e , n , a _Y

  • 7/25/2019 Punteros_ParteIII

    8/25

    c$ar otroarreglo)* ^ n , o , B0 , s , o , y , M , c , a , d , e , n , a _Y

    A$ora $agamos lo siguiente=

    Cadenas

    -servamos como la 'uncin print 7 C 7 la impresin de otroarreglo)* dado(ue encontr el car&cter >ull antes de donde de-er:a ir+

    noMsoyMcadenano

    Pro-emos a$ora recorrer e imprimir otroarreglo , elemento por elemento ya(ue es un vector tam-i n+

    7ecorrido de Cadenas como Arrays)*

  • 7/25/2019 Punteros_ParteIII

    9/25

    Se o-serva=

    no soyMcadena

    ull B0 en el /n de la varia-le cadena y e9ecutemosnuevamente=

  • 7/25/2019 Punteros_ParteIII

    10/25

    Se o-serva= soy [uansoyMcadenasoy [uan , K (ue pas a(u:L

    Sucede (ue a$ora cadena no es mas una cadena ya (ue perdi su >ull y por lotanto la li-rer:a de la 'uncin concat concatena pero solo encuentra >ull al/nal de ESoy [uanF (ue si es cadena y por lo tanto la vuelve a unir+ s muyimportante este car&cter >ull , ya (ue el grado de pro-lemas (ue pueden darsepor este simple elemento puede ser un tremendo dolor de ca-e as, as: (ue ano olvidarse+ n 'orma similar se puede usar el operador ETF, deconcatenacin+

    perador ETF

    Conclusin Importante= Si tra-a9amos los arreglos c$ar)* como cadenas noolvidar el car&cter >ull ya (ue si se pretende usar las 'unciones cadena va a$a-er pro-lemas Ee3traXosF+ Si (ueremos usar cadenas sin arreglos puedenusar el -9eto String (ue permite de/nir varia-les cadena y automaticamentegenera el >ull+ .as 'unciones print println son 'unciones (ue tratan a lasvaria-les como cadenas de te3to

    Duncines de cadena

    unacadena+lengt$ %= devuelve la longitud de EunacadenaF es decir, el n5merode caracteres%+ >o se cuenta el car&cter nulo (ue marca los /nales de cadena+>o tiene par&metros+

    unacadena+compare o otracadena%= compara EunacadenaF con otracadena (uese pase como par&metro -ien de 'orma literal, -ien mediante un o-9etoString%+ Comparar signi/ca detectar (u cadena se ordena antes (ue la otra+.as cadenas se comparan desde su principio car&cter a car&cter utili ando elorden de sus cdigos ASCII+ sto (uiere decir, por e9emplo, (ue a va antes (ue

    - pero despu s (ue A , y las ci'ras van antes de las letras+ Su valor de retornoser& un n5mero negativo si EunacadenaF va antes (ue la cadena pasada comopar&metro, 0 si las dos cadenas son iguales o un n5mero positivo siEunacadenaF va despu s (ue la cadena pasada como par&metro+

  • 7/25/2019 Punteros_ParteIII

    11/25

    Si se (uisiera reali ar una comparacin similar pero entre arrays de caracteres,se puede utili ar la instruccin strcmp %, la cual tiene dos par&metros (uecorresponden con los dos arrays a comparar%, y cuyo valor de retorno esid ntico a unacadena+compare o %+

    unacadena+e(uals otracadena%= compara si EunacadenaF es igual a otracadena,pasada como par&metro+ .a comparacin es EcaseMsensitiveF= esto (uiere decir(ue la cadena E$olaF no es igual a EH .AF+ sta instruccin es e(uivalente aloperador E F para o-9etos String + Su valor de retorno es EtrueF siEunacadenaF es igual a la cadena especi/cada como par&metro, o E'alseF encaso contrario+

    unacadena+e(ualsIgnoreCase otracadena%= compara si EunacadenaF es iguala otracadena, pasada como par&metro+ .a comparacin es EcaseMinsensitiveF=esto (uiere decir (ue la cadena E$olaF es igual a EH .AF+ Su valor de retornoes EtrueF si EunacadenaF es igual a la cadena especi/cada como par&metro, o

    E'alseF en caso contrario+unacadena+inde3 ' otradacena o car&cter,pos%= devuelve la posicin unn5mero entero% dentro de EunacadenaF donde se encuentra el car&cter o elprincipio de la otracadena especi/cada como par&metro+ Si no se encuentranada, devuelve M1+ -servar (ue las posiciones se numeran empe ando por 0+Por de'ecto, la -5s(ueda comien a desde el principio de EunacadenaF, peromediante un segundo par&metro pos opcional se puede indicar la posicin apartir de la cual se (uiere empe ar a -uscar+

  • 7/25/2019 Punteros_ParteIII

    12/25

    ocupa esa posicin es incluido en la su-cadena%, pero la posicin /nal opcional es e3clusiva es decir, el car&cter (ue ocupa esa posicin es elprimero en no incluirse en la su-cadena%+ Si dic$a posicin /nal no seespeci/ca, la su-cadena contin5a $asta el /nal de EunacadenaF+ -servar (uelas posiciones se numeran empe ando por 0+

    unacadena+replace su-cadena car&cter , su-cadenareplace%= sustituyeuna su-cadena e3istente dentro de EunacadenaF especi/cada como primerpar&metro% por otra su-cadenarepace especi/cada como segundo%, todas lasveces (ue apare ca+ am-i n sirve para sustituir caracteres individuales+ .asustitucin se reali a so-re EunacadenaF, so-rescri-iendo su valor original+

    unacadena+to.oVerCase %= convierte todos los caracteres de EunacadenaF enmin5sculas+ .a conversin se reali a so-re EunacadenaF, so-rescri-iendo suvalor original+

    unacadena+toRpperCase %= convierte todos los caracteres de EunacadenaF enmay5sculas+ .a conversin se reali a so-re EunacadenaF, so-rescri-iendo suvalor original+

    unacadena+trim %= elimina todos los espacios en -lanco y ta-ulacionese3istentes al principio y al /nal de EunacadenaF+ .a conversin se reali a so-reEunacadenaF, so-rescri-iendo su valor original+

    unacadena+concat otracadena% = aXade EconcatenaF% al /nal de la cadenaEunacadenaF otracadena, pasada como par&metro+ Como resultadoo-tendremos un nuevo valor en EunacadenaF= su valor original seguido de esevalor pasado por par&metros, unidos+ s e(uivalente al operador ETF parao-9etos String+

    unacadena+endsNit$ otracadena caracter%= c$e(uea si EunacadenaF aca-a conlos caracteres de otra cadena, pasada por par&metro+ Su valor de retorno esEtrueF si EunacadenaF aca-a con la cadena especi/cada como par&metro, oE'alseF en caso contrario+

    unacadena+startsNit$ otracadena caracter% = C$e(uea si EunacadenaFempie a con los caracteres de otracadena, pasada por par&metro+ Su valor deretorno es EtrueF si EunacadenaF empie a con la cadena especi/cada comopar&metro, o E'alseF en caso contrario+

    unacadena+toC$arArray arreglo,cantidad %= copia una cantidad determinada decaracteres pertenecientes a EunacadenaF a un array de tipo Ec$arF+

    se arreglo $a de ser especi/cado como primer par&metro, y la cantidad decaracteres a copiar all: $a de ser especi/cada como segundo par&metro+Siempre se empie an a o-tener los caracteres desde el principio deEunacadenaF+ >o tiene valor de retorno+

  • 7/25/2019 Punteros_ParteIII

    13/25

    unacadena+get4ytes arreglo, cantidad %= copia una cantidad determinada decaracteres pertenecientes a EunacadenaF a un array de tipo E-yteF+

    se arreglo $a de ser especi/cado como primer par&metro, y la cantidad decaracteres a copiar all: $a de ser especi/cada como segundo par&metro+Siempre se empie an a o-tener los caracteres desde el principio de

    EunacadenaF+ >o tiene valor de retorno+ Hay (ue tener en cuenta (ue arreglo)cantidadM1* >ull siempre Ascii 0%, ver m&s adelante+

    unacadena+toInt %= si EunacadenaF tiene un valor (ue empie a por ci'rasnum ricas, esta instruccin es capa de distinguirlas descartando los posi-lescaracteres no num ricos posteriores% y devolver ese valor num ricotrans'ormado en un dato de tipo entero+ s decir, trans'orma una cadena en unn5mero entero, si es posi-le+ sta instruccin no tiene par&metros+

    unacadena+toDloat %= si EunacadenaF tiene un valor (ue empie a por ci'rasnum ricas y punto decimal, esta instruccin es capa de distinguirlas

    descartando los posi-les caracteres no num ricos posteriores% y devolver esevalor num rico trans'ormado en un dato de tipo Woat+ s decir, trans'orma unacadena en un n5mero Woat, si es posi-le+ sta instruccin no tiene par&metros+

    unacadena+c$arAt pos%= 3trae de unacadena el car&cter (ue se encuentra enla posicin pos+

    unacadena+setC$arAt pos, caracter%= Sus-tituye en la unacadena el car&cter dela posicin pos por otro car&cter especi/cado en car&cter+

    Duente de 'unciones Arduino Curso pr&ctico de 'ormacin de scar orrenteArtero , editora Al'a mega+

    A los e'ectos de ver como 'uncionan estos m todos ad9unto el siguienteprograma con algunas de ellas

    http://www.freelibros.org/electronica/arduino-curso-practico-de-formacion-oscar-torrente-artero.htmlhttp://www.freelibros.org/electronica/arduino-curso-practico-de-formacion-oscar-torrente-artero.htmlhttp://www.freelibros.org/electronica/arduino-curso-practico-de-formacion-oscar-torrente-artero.htmlhttp://www.freelibros.org/electronica/arduino-curso-practico-de-formacion-oscar-torrente-artero.html
  • 7/25/2019 Punteros_ParteIII

    14/25

  • 7/25/2019 Punteros_ParteIII

    15/25

    'uncionesCadena Impresin Dunciones Cadena

    7ecomiendo estas 'unciones ya (ue puede $acerse todo lo (ue necesitemos+Rn dispositivo cual(uiera, sea monitor de Arduino o cual(uier otro (ue tengauna inter'ace RA7 2@2 ., puede enviar datos a Arduino y luego procesarsemediante estas 'unciones cadena+ Serial posee 'unciones propias (uepr&cticamente $acen lo mismo pero (ue en la pr&ctica no las $e necesitadorealmente+

    get4ytes)* y toC$arArray)* merecen an&lisis separado

    -servemos lo (ue $ace la 'uncin get4ytes %, tomando cantidad 6, primeros 4ytes de la varia-le cadenaRno del e9ercicio anterior+ 7ecordar(ue cadenaRno FPanamaHiteOFY

    get4ytes %

  • 7/25/2019 Punteros_ParteIII

    16/25

    .a salida es= 0M;#M110M;#M10;M0

    0MASCII de EPF;#MASCII de EaF110MASCII de EnF;#MASCII de EaF10;M ASCII de EmF0 ASCII >ul., como di9imos en la e3plicacin de get4ytes %, el elemento )J* elemento)cantidadM1* >ull Si (uisi ramos tomar en el vector Panam& completo , de-er:amos sumar unaunidad m&s a todo=

    get4ytes %

    y la salida ser:a 0M;#M110M;#M10;M;#M>ull+ A$ora si son los Ascii de todo elsu-string Panama

    l arreglo)cantidadM1* >ul, no tiene muc$o sentido ni ra n de por(ue es esto+Si la conversin 'uera no a 4ytes)* sino a C$ar)*, tendr:a sentido por(ue enrealidad o-tendr:amos una cadena+ bui &s sea un E-ugF de la versin deArduino+Pro-emos entonces con toC$arArray %

    toC$arArray %

    !emos (ue a$ora no es necesario el -ucle Dor como el caso anterior+ KPor(u L , por(ue arreglo2)* es un arreglo de caracteres y es uno de losargumentos 'avoritos de Print y Println+

  • 7/25/2019 Punteros_ParteIII

    17/25

    Por monitor sale= Panam& , lo cual con/rma (ue elelemento arreglo2)6* >ull por lo (ue autom&ticamente arreglo2)* se convierteen una CA< >A y es por ello (ue es -ien aceptado por print %+

    -9eto String

    Arduino tiene como recurso la varia-le String, (ue en realidad es un -9eto ya(ue si recordamos , el SOetc$ $ereda de C CTT orientado a o-9etos+ a $emosvisto lo (ue $ace String, permite de/nir e iniciali ar cadenas+ .o m&s 'recuentees utili ar este -9eto para tra-a9ar con Cadenas en 'orma cmoda+

    String cadena FHola (ue talFY de/ne e iniciali a la cadena

    String otracadena FcFY de/ne e iniciali a un car&cter como cadena

    Si deseamos convertir varia-le tipo Int, 4ytes,long, Woat,etc a cadenasutili amos String varia-le%+ Podemos incluso 'ormatear de la siguiente manera+

    Cadena String 20,4I>%Y toma el entero 20 , lo pasa a -inario y lo pasa acadena+

  • 7/25/2019 Punteros_ParteIII

    18/25

    caracteres y enviar& los ASCII uno a uno + .uego sumarle otro valor Wotante , elmismo 100+J y presentar el resultado+

    7eci-iendo por SerialPort Arduino desde 8onitor

    l delay 20%, como di9imos anteriormente es para asegurar la permanencia delWu9o del programa dentro del N$ile %+ 3iste otra manera (ue es usarun Wag (ue indi(ue el /nal de la recepcin, y (ue aun(ue salte el N$ile % osalga del N$ile % esto no inWuya=

    http://www.asciitable.com/http://www.asciitable.com/http://www.asciitable.com/
  • 7/25/2019 Punteros_ParteIII

    19/25

    Rtili andoWag para (ue permita (ue N$ile % salte

  • 7/25/2019 Punteros_ParteIII

    20/25

    Cadena con /n detrama

    Con esto damos por terminada un recorrida de las diversas posi-ilidades (uenos permite tra-a9ar con Cadenas y Arrays)* en general+ spero les sea deutilidad+

    K e gustL Comparteh

    7elacionado

  • 7/25/2019 Punteros_ParteIII

    21/25

    ipos de

  • 7/25/2019 Punteros_ParteIII

    22/25

    Home Automation Server IP 7outer T Arduino+

    Automati acin utili ando 7outer IP T Arduino T transmisores receptores deradio'recuencia "@@ 8$ % Para el desarrollo de este tutorial $se $a utili ado unrouter casero PM.inO 8odelo lMN7 "1>+ 8odi/cando el DirmVare por uno tipoCustom, permitiendo mayor parametri acin del router, lo utili o como unpe(ueXo servidor N 4 y a su ve me permite utili arZ

    diciem-re 22, 201"

    n Arduino

    Gustavo CircelliIngeniero lectrnico egresado de la R+>+8ar del Plata, Analista Programador

    ISS< Crdo-a% , Pro'esor P%+ specialista en Comunicaciones ysistemas automati ados+

    Post navigation

    Algoritmos,

  • 7/25/2019 Punteros_ParteIII

    23/25

    .icencia

    Panama HiteO -y Antony Garc:a G+ and jiara >avarro is licensedunder a Creative Commons 7econocimientoM>oComercial "+0 Internacional.icense+

    >uestros contenidos listados seg5n categor:as

    Contri-uye a nuestra causa

    Con tu contri-ucin podremos comprar nuevos dispositivos para seguirpu-licando nuestros conocimientos+

    Principio del 'ormulario

    Dinal del 'ormulario

    Autores

    Antony Garc:a Gon &le 1#@%

    jiara >avarro 1#0%

    Gustavo Circelli 12%

    [os !illala 6%

    _donations antony.garcia.go ES Panama Hitek 0 USD

    PP-DonationsBF:

    http://panamahitek.com/serial-arduino-vectores-y-cadenas-2da-parte/www.panamahitek.comhttp://creativecommons.org/licenses/by-nc/4.0/http://creativecommons.org/licenses/by-nc/4.0/http://panamahitek.com/author/antony-garcia-gonzalezgmail-com/http://panamahitek.com/author/kiara-navarro/http://panamahitek.com/author/gustavocircelli/http://panamahitek.com/author/josevillalaz/http://panamahitek.com/serial-arduino-vectores-y-cadenas-2da-parte/www.panamahitek.comhttp://creativecommons.org/licenses/by-nc/4.0/http://creativecommons.org/licenses/by-nc/4.0/http://panamahitek.com/author/antony-garcia-gonzalezgmail-com/http://panamahitek.com/author/kiara-navarro/http://panamahitek.com/author/gustavocircelli/http://panamahitek.com/author/josevillalaz/
  • 7/25/2019 Punteros_ParteIII

    24/25

    [avier 4rat$Vaite J%

    7icardo 8ontenegro "%

    dVin

  • 7/25/2019 Punteros_ParteIII

    25/25