1 1 Primeros Pasos en Arduino

Embed Size (px)

Citation preview

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    1/93

    1.1 Primeros pasos

    en Arduino.

    Cuando uno empieza con Arduino, parece que la cantidad de cosas que hay que

    aprender es inabordable. Necesitas conceptos de electricidad de electrónica de

     programación algo de ingeniería. Y dependiendo de lo que quieras hacer, algo de

    matemáticas y mucha física (y !ios mío".

    #emos dise$ado este itinerario pensando en la gente que como t%, amable lector, que si

    estás leyendo esto, probablemente tengas que empezar desde el principio.

    &or eso, estos primeros capítulos esta pensados para irte lle'ando de la mano, en

    los conceptos básicos que 'as a necesitar en la a'entura que empiezas, e ir presentando

    todas las ideas necesarias para ir siguiendo el curso en orden.

    remos mezclando componentes electrónicos con la ley de Ohm e irán apareciendo las

     primeras instrucciones de Arduino C++, con algunos programas y circuitos en los que

    haremos prácticas.

    )as primeras sesiones de este tutorial están pensadas para alguien que quiere iniciarse y

    cuyos conocimientos en estos temas son nulos, pero que quiera aprender. Y creemos que

    si nos sigues conseguirás ese ob*eti'o. +n ello hemos puesto todo nuestro empe$o.

    1 – Instalación del entorno de trabajo Arduino.

    +mpecemos por el principio. !escargando e instalando el entorno de traba*o.

    – !uestro primer programa.

    iempre hay una primera 'ez. -n programa muy sencillo y algunas ideas básicas.

    " – !uestro primer circuito.

    -n circuito para quitar el miedo. -n diodo )+! mas una resitencia.

    # – Circuito con m$ltiples %&'s.

    i funciona con un )+! /&orque no con 01

    ( – %as entradas digitales de Arduino.

    http://www.prometec.net/instalacion-entorno-trabajo-arduino/http://www.prometec.net/nuestro-primer-programa/http://www.prometec.net/nuestro-primer-circuito/http://www.prometec.net/circuito-multiples-leds/http://www.prometec.net/entradas-digitales/http://www.prometec.net/nuestro-primer-programa/http://www.prometec.net/nuestro-primer-circuito/http://www.prometec.net/circuito-multiples-leds/http://www.prometec.net/entradas-digitales/http://www.prometec.net/instalacion-entorno-trabajo-arduino/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    2/93

    )os sentidos de rduino. &ercibiendo el e2terior en digital.

    ) – Condicionales y botones.

    eguimos introduciendo instrucciones de C33 4 )os condicionales

    * – Comunicación con el eterior.

    )as puertas -5 en rduino y la comunicación serie.

    , – -unciones y enteros.

    eguimos traba*ando 'uestro conocimiento de C++ *ugando con n%meros primos como

    e2cusa.

    – /n programa con 0arias unciones.

    abemos que es cuesta arriba. nimo, como en la bici hay tramos así.

    12 – %os pines cuasi analógicos.

    )as salidas analógicas &67

    11 – %os diodos %&' 345.

    -n capítulo di'ertido. 8 como mezclar colores con un )+! 9:5.

    1 – Arduino y las puertas analógicas.

    8 de como usar las puertas analógicas para leer 'alores contínuos del e2terior.

    http://www.prometec.net/condicionales-botones/http://www.prometec.net/comunicacion-exterior/http://www.prometec.net/funciones/http://www.prometec.net/programa-varias-funciones/http://www.prometec.net/pines-cuasi-analogicos/http://www.prometec.net/rgb-led/http://www.prometec.net/puertas-analogicas/http://www.prometec.net/condicionales-botones/http://www.prometec.net/comunicacion-exterior/http://www.prometec.net/funciones/http://www.prometec.net/programa-varias-funciones/http://www.prometec.net/pines-cuasi-analogicos/http://www.prometec.net/rgb-led/http://www.prometec.net/puertas-analogicas/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    3/93

    Instalación del entorno de trabajo

    Arduino'escargar y conigurar el I'&

    Objeti0os

    .

    o !escargar del entorno de traba*o !+ de rduino..

    o nstalación del entorno..

    o Comprobar su correcto funcionamiento .

    'escarga e instalación del I'& Arduino.

     

    ;amos s descargar e instalar el entorno de desarrollo de Arduino 6I'&7,y comprobar

    que está correctamente configurado. &ara ello 'amos a la página de descarga4

    http4

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    4/93

    •  Aceptar las opciones por defecto de instalación es una opción razonable en caso de no estar

     seguro de las preguntas que nos hace,

     

    l cabo de unos minutos finalizara la instalación, y en el área de traba*o del equipoaparecerá el icono de rduino

     

    Comprobación de la instalación.

    .

     -na 'ez instalado el !+, 'amos a comprobar que reconoce nuestro rduino

    correctamente y que podemos programarlo. &ara ello, Conecta tu rduino a tu

    ordenador mediante el -5

     

    • Comprueba que las luces del Arduino se iluminan indicando que tiene alimentación.

     

    l hacerlo nuestro &C debe detectar el nue'o dispositi'o -5 y montar el dri'er

    adecuado.

    Y finalmente4

     

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    5/93

    tención, el puerto serie en que se instala puede 'ariar del indicado en la imagen,

    dependiendo de las características del equipo.

     

    •  En inu! adem"s os crear" una puerta #dev#tty! y tendr$is que daros de alta en el grupo deusuarios de los U%&s.

    • 7ac debería instalartelo a la primera, sin complicaciones.

     

    i nuestro modelo es un 'Ccduino /!O como el de la foto, en muchos &Cs necesitan

    un dri'er adicional que puedes descargar desde aqui4

    !ri'er !Ccduino para =indo=s 

    !ri'er !Ccduino para 7ac 8B 

    !escomprime e con 6inrar, y e*ecuta el programa incluido. e instalará un

    controlador que resuel'e el problema.

    hora, ya podemos arrancar el icono de rduino del escritorio de traba*o y configurar el

    modelo de rduino y confirmar el puerto serie al que se conecta. +nD7en%EF#erramientasF&laca +legir el modelo e2acto de nuestro rduino. +n nuestro

    caso elegimos un rduino -no4

    http://www.prometec.net/wp-content/uploads/2014/09/ch341ser.rarhttp://www.prometec.net/wp-content/uploads/2014/09/ch341ser_mac.ziphttp://www.prometec.net/wp-content/uploads/2014/09/ch341ser.rarhttp://www.prometec.net/wp-content/uploads/2014/09/ch341ser_mac.zip

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    6/93

     

    +n D7en%EF#erramientasF&ort es necesario comprobar que tenemos asignado un puerto

    y que tiene la marca de selección.

     

    +s importante asignar el puerto y el modelo de rduino para garantizar el correcto

    funcionamiento del !+. )a marca de selección debe estar con el ticG. ;amos ahora a

    'olcar un programa de e*emplo4

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    7/93

     

    l pulsar D7en%EFrchi'oF+*emplosFH?.5asicsF5linG, aparecerá una serie de te2tos en el

    entorno de traba*o, que ignoraremos por ahora. &ulsar el botón 7arcado en amarillo,

    ;eremos una línea de progreso 'erde a'anzando.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    8/93

     

    i todo 'a correctamente 'eremos un mensa*e en la parte inferior del !+4

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    9/93

     

    +ste mensa*e en color blanco indica que hemos 'olcado correctamente el programa y ya

    deberíamos 'er una luz que parpadea en nuestra placa rduino, seg%n indica la flecha

    ro*a4

    i 'emos la luz parpadeando en nuestro rduino, enhorabuena, el entorno está instalado

    y configurado correctamente. Ya podemos pasar a la siguiente sesión.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    10/93

    Nuestro primer programa

    Blinking LED

    Home Nuestro primer programa

    Objetivos.

    o Fijar algunas ideas básicas sobre programación.

    o Comprender la estructura de un programa Arduino !ketc"#.

    o De$nir las estructuras de blo%ues.

    o Las primeras instrucciones.

     

    Material requerido.

     

    rduino -no o similar.

    +sta sesión acepta cualquier otro modelo de rduino.

     

    &n cable &!B adecuado al conector de tu

    Arduino.

     

    &n 'C con el entorno de Arduino correctamenteinstalado ( con$gurado..

     

     Algunas ideas básicas sobre programación.

    .

    -n programa de ordenador es básicamente el equi'alente a una receta de cocina

     pero destinado a un p%blico distinto.

    http://www.prometec.net/http://www.prometec.net/categoria-producto/arduinos/http://www.prometec.net/http://www.prometec.net/categoria-producto/arduinos/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    11/93

    7ientras que las personas somos razonablemente buenas interpretando las

    instrucciones, generalmente 'agas, de una receta de cocina, cuando programamos quien

    debe entendernos es un ordenador que espera instrucciones precisas respecto a lo que

    debe hacer y que además carece por completo de la imaginación o capacidad de

    impro'isación humana.

    &or ello se desarrollan los lengua*es de ordenador, para dar instrucciones a una máquina

    de forma4

     

    • 'recisa) !in ambig*edades in"erentes a la comunicación "umana.

    • &ni+oca) !olo se puede interpretar de una manera.

    • Concisa) 're,eriblemente ordenes cortas.

     

    +l !+ de rduino se programa en una 'ariante de C33 , que es un lengua*e muy

    e2tendido por sus características, aunque no es un lengua*e sencillo. C33, que fi*a

    reglas estrictas de cómo escribir estas instrucciones.

    -n programa es una serie de instrucciones que se e*ecutan en secuencia ( sal'o que

    indiquemos e2presamente condiciones precisas en las que esta secuencia se altera".

    -n programa interno comprueba que la sinta2is de nuestro programa es acorde a la

    norma de C33, y si hay cualquier cosa que no le con'ence dará un error y finalizará la

    comprobación obligándonos a re'isar lo que hemos escrito.

    Cuando el comprobador acepta nuestro programa, in'oca otro programa que traduce lo

    que hemos escrito a instrucciones comprensibles para el procesador de nuestro rduino.

    este nue'o programa se le llama compilador.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    12/93

    Iuncion del compilador 

    +l compilador con'ierte nuestras instrucciones (código fuente" en instrucciones del

     procesador (código e*ecutable".

     

    Estructura de un programa Arduino.

     

    -n programa o sGetch de rduino consiste en dos secciones o funciones básicas4

     

    • Setup: Sus instrucciones se ejecutan solo una vez, cuando se arrancael programa al encender Arduino o cuando pulsamos el botón dereset. Generalmente incluye defniciones e inicializaciones de ahí sunombre.

    • oop: Sus instrucciones se van ejecutando en secuencia hasta elfnal!. " cuando acaba, vuelve a empezar desde el principiohaciendo un ciclo sin fn.

     

    Cuando abrimos el I'& de Arduino (o hacemos D7en%EFrchi'oFnue'o" Jl nos escribe

    ya estas dos funciones (en color cobre"4

     Nótese que el principio de cada función es indicado por la apertura de lla'e K L K y el fin

    de la misma corresponde al símbolo de cerrar lla'es K M K.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    13/93

    !e hecho el con*unto de instrucciones contenidas entre una apertura y cierre de lla'es se

    llama blo8ue y es de capital importancia a la hora de que nuestro Arduino interprete de

    una u otra manera las instrucciones que le damos.

    +s imperati'o que a cada apertura de una lla'e corresponda un cierre de lla'e. +n

    sucesi'os capítulos ampliaremos este concepto.

    &or ahora resaltar las líneas que aparecen dentro de los bloques principales4

    // put your setup code here, to run once// put your main code here, to run repeatedly

    Cualquier cosa que escribamos precedido por K

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    14/93

     pines del H al ?

     

    +n la sesión anterior cargamos un programa de e*emplo que hacia parpadear un )+! en

    la placa con una cadencia definida. ;eamos como programar esto.

    &ediremos a rduino que acti'e su pin ? como de salida digital y despuJs

    encenderemos y apagaremos esta se$al lo que hará que el )+! que tiene conectado de

    serie se encienda o apague al ritmo que marquemos.

    &ara indicar al sistema que deseamos usar el pin ? como salida digital utilizamos la

    instrucción4

    pinMode ( 13, OUTPUT ) ;

    +l primer parámetro indica el pin a usar y K8-&-O es para usarlo como salida, y

    tambiJn podría usarse el 'alor KN&-O para indicar que 'amos a leer de este pin.

    +stas definiciones se harán solo una 'ez al principio, en la función setup(". )a

    nuestra quedará, con una %nica instrucción que declara que 'amos a usar el pin ? como

    salida digital4

      void setup()  {  // initialie the di!ital pin as an output  pinMode( 13, OUTPUT) ;  "

     

    • Es importante $jarse en %ue a pesar de ser una 4nica instrucción/ "emosdelimitado el blo%ue de esta ,unción mediante abrir ( cerrar lla+es.

    •  5bsr+ese %ue la instrucción $nali1a en 6 78 . C99 obliga a acabarlas instrucciones con un punto ( coma %ue delimite la orden. !i seomite generará un error.

     

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    15/93

    &ara encender el )+! usaremos la instrucción4

    di!ital#rite( 13 , $%&$) ;

    Y otra instrucción similar que le ordena apagarlo4

    di!ital#rite( 13 , 'O#) ;+l ? indica el pin a utilizar y #:#, )86 indican el 'alor que deseamos poner en esa

    salida, que en rduino corresponden a P; para #:# y H; para )86.

     

    • !i en la ,unción loop# escribiramos estas dos instruccionesseguidas/ Arduino cambiar:a estos +alores tan deprisa %ue nopercibir:amos cambios/ as: %ue necesitamos ,renarle un poco para%ue podamos percibir el cambio.

     &ara hacer este retraso de, digamos, un segundo, utilizaremos4

    delay(1) ; // delay(n) con!ela* +rduino nmilise!undos

    &or tanto para programar una luz que se enciende y se apaga, tendríamos que generar

    una secuencia de órdenes (Como en una receta e cocina" que hicieran4

     

    ;. . Encender el LED ) 'oner +alor alto ?@# en dic"o pin.

    =. Esperar un segundo.

    . Apagar el LED) 'oner +alor bajo @# en dic"o pin.

    ?. @ol+er a esperar un segundo.

    o Si omiti#ramos este segundo retraso, apagaría la luz y volveríaa empezar encontr$ndose la orden de volver a encender. %oapreciaríamos &ue se había apagado.'%o espero &ueme cre$is. (omprobadlo).

    o *l procesador de Arduino +% es muy lento desde el punto devista electrónico, pero es capaz de conmutar la luz' pasar deencendido a apagado y vuelta a encender) unas -./// veces

     por segundo.

     

    +l primer concepto que tenJis que fi*ar, es que los ordenadores procesan las ordenes en

    secuencia, una instrucción despuJs de otra y en el orden en que se las dais.  'uestro

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    16/93

     programa instruye al ordenador para que e(ecute esas instrucciones y fi(a el orden en el 

    que se e(ecutan.

    )a forma de escribir un programa en rduino C33 que haga lo anteriormente descrito es

    algo parecido a esto !escargar 4

      void setup()  {  pinMode( 13 , OUTPUT); // Usaremos el pin 13 como salida  "void loop()  {  di!ital#rite(13 , $%&$); // nciende el '-  delay(1); // sperar un se!undo  di!ital#rite(13 , 'O#); // +pa!ar el '-  delay(1); // sperar otro se!undo  "

     

    • Nótese el sangrado de las l:neas para destacar los blo%ues de código.Esto se considera buena práctica ( os lo recomendamosencarecidamente/ por%ue ,acilita muc"o la comprensión delprograma.

    • Cuando os e%ui+o%uis ( creadme/ os +ais a e%ui+ocar# el sangradoa(uda/( muc"o/ a +isuali1ar el programa.

    • !olo "a( dos tipos de programadores. Los %ue se e%ui+ocan ( los %ue

    se +an a e%ui+ocar

     

    olo nos falta ya, comprobar si hay errores y para ello pulsamos el icono en amarillo4

    i todo 'a bien,( si no hay errores en ro*o" podemos compilar y 'olcar con la siguiente

    flecha, +n caso contrario ( y creedme que os pasará con frecuencia" habrá que re'isar

    los posibles errores y corregirlos. ;ol'eremos sobre esto en el futuro.

    http://www.prometec.net/wp-content/uploads/2014/09/Prog_2_1.rarhttp://www.prometec.net/wp-content/uploads/2014/09/Prog_2_1.rar

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    17/93

     

    )a flecha en amarillo 'olcara nuestro programa al rduino y podremos comprobar que

    la luz del pin ? parpadea con un retraso de un segundo entre encendido y apagado.

     

    • !ugerencia) !i modi$camos los +alores del dela(/ modi$caremos la cadenciadel parpadeo.

    • Nota) Esto no ,uncionara con ning4n otro 'in del Arduino &N5/ por%uesolo el ;= tiene un LED conectado.

     

    Resumen de la sesión

     

    +n esta sesión hemos aprendido 'arias cosas importantes4

    o El concepto cla+e de un programa/ como secuencia deinstrucciones %ue se ejecuta en el orden marcado.

    o Ha( dos ,unciones básicas en todo programa Arduino) !etup# (Loop#..

    o'ara delimitar un blo%ue de instrucciones usamos apertura (cierre de lla+es..

    o  odas las instrucciones acaban en punto ( coma Aun%ue "a(e-cepciones#

    o 'odemos usar comentarios usando 22 .

    o Hemos aprendido algunas instrucciones iniciales del ArduinoC99.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    18/93

    Nuestro primer circuito

    Arduino/ primer circuito

    Home Nuestro primer circuito

    Objetivos

    .

     

    o Fijar algunas ideas básicas sobre electrónica.

    o ontar un circuito con LED ( esistencia comprender eles%uema elctrico..

    o Aprender el manejo de la 'rotoboard..

    o

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    19/93

    -n diodo %&'

    -na resistencia de H 8hmios.

    lgunos cables de &rotoboard.

     

     Algunas ideas básicas sobre electrónica

    .

    Cuando de*amos fluir agua de un sitio alto a otro más ba*o, el agua corre libremente

    mientras no se lo impidamos, y siempre de arriba aba*o. !ecimos que las diferentes

    alturas suponen una diferencia de potencial entre ambos puntos que puede ser

    transformada en traba*o %til.

    Cuando e2iste una diferencia de tensión elJctrica (o diferencia de potencial" entre dos

     puntos con cone2ión, la electricidad fluye del positi'o (o de mas carga" hacia el

    negati'o o menos, y tambiJn podemos obtener traba*o %til de este principio.

    unque la física detrás de estos dos e*emplos es diferente, conceptualmente son

     bastante parecidos y por ello hablamos de4

     

    • Corriente de agua 2 Corriente elctrica.

    • Caudal de agua 2

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    20/93

    • 3e la misma manera, la di4erencia de altura entre dos puntos solorepresenta eso, una dierencia y no indica a &u# altura seencuentran con respecto a una re4erencia m$s o menos arbitraria.

     

    #ay componentes que se oponen a a la libre circulación de la corriente. )os llamamosresistencias , su 'alor se mide en 8hmios y su símbolo es Q .

    )a ley de Ohm, liga todos estos 'alores de una forma precisa4

    9 : 3 I

    !onde 9 es la tensión en 'oltios, 3  la resistencia e I la intensidad elJctrica que fluye.

     

    • *n el mundo de Arduino la tensión es casi siempre 5, &ue es latensión a &ue 4unciona y la &ue es capaz de poner en sus salidasdigitales.

    8tra manera de escribir esta ley de 8hm es

    I : 9 ; 3

    )o que implica que si la resistencia del circuito es nula (o casi, como en el caso de un

    cable de cobre" la intensidad de la corriente se dispara y puede llegar a fundir el cable o

    componente que encuentre.

     

    • *sto se conoce como cortocircuito o corto simplemente y debe serevitado decididamente ya &ue suele acabar con olor a &uemado yalg6n susto, en el mejor caso.

     

    !uestro primer circuito electrónico

    .

    +n la sesión anterior programamos el )+! conectado al pin ? de nuestro rduino. #oy

    'amos a duplicar este circuito en el e2terior montándolo desde el principio con

    componentes discretos. u esquema elJctrico sería4

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    21/93

    ;emos a la izquierda el símbolo del diodo %&' que es emisor de luz y por eso tiene

    esas flechitas salientes para indicarlo ()+! 'iene del inglJs )ight +mitting !iode, o

    diodo emisor de luz".

    )a resistencia se representa por ese segundo símbolo indicando un nombre 9? y su

    'alor HQ.

    su 'ez 'emos a la izquierda las letras :N! para indicar que es el negati'o. ienemuchos nombres4 7asa, +l símbolo R, ierra( aunque no es lo mismo", :round,

     Negati'o, cátodo.

    &or %ltimo a la derecha el símbolo de 3P; indica el e2tremo de tensión positi'a o

     positi'o y a 'eces se representa como ;cc. )as líneas rectas y negras indican cone2ión

    elJctrica mediante cables conductores.

     

    • +n diodo, es un componente electrónico &ue solo permite pasar lacorriente en una dirección. *n la dirección del positivo al negativo 'la

     parte ancha del tri$ngulo) al negativo, la punta del tri$ngulo '&ueindica la dirección).

    • 7ara indicar cu$l de las patas de un diodo *3 es el positivo, #stesuele ser de mayor longitud.

    • Si se conecta a la inversa, cortar$ el 1ujo de corriente muyefcazmente y no se iluminar$ en absoluto.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    22/93

    • as resistencias en cambio no di4erencian un e8tremos del otro,decimos &ue no tienen polaridad.

     

    +s importante entender los esquemas electrónicos porque permiten comprender con

    rapidez cualquier circuito. ;ale la pena dedicarle un poco de esfuerzo porque son el

    lengua*e de la electrónica.

    -na 'ez comprendido el esquema elJctrico del circuito, 'eamos la cone2ión en la

    &rotoboard4

     

    +ste esquema sigue una pauta de marcar los cables que 'an a  positivo en ro(o y los que

    'an a )'D en negro. *ecomendamos encarecidamente se siga esta norma en la práctica

     porque ayuda a identificar posibles problemas y e'ita errores.

     

    • a 7rotoboard une los puntos de la línea azul entre si y los de encimade la línea roja entre sí, 'se les llama raíles), pero no conecta el raílrojo positivo con el raíl negro negativo.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    23/93

    •  A su vez e8isten dos zonas de líneas verticales en la 7rotoboard.*stas líneas verticales est$n unidas entre sí internamente, para4acilitar la cone8ión de los componentes, pero no se unen las líneas

     paralelas.

     

    )as cla'es para montar el circuito con J2ito, son4

     

    • Conectamos el pin ;= de Arduino a la l:nea roja de la 'rotoboard)'ositi+o.

    • Conectamos el GND de Arduino a la l:nea a1ul de la 'rotoboard)Ground.

    • &samos el ra:l positi+o los pines de la l:nea roja# para conectar a laresistencia.

    • El otro e-tremo de la resistencia se conecta al positi+o del LED por%ueestán en la misma +ertical de la 'rotoboard ( esta los conectaelctricamente#.

    • %ótese &ue el positivo del *3 est$ claramente marcado como demayor longitud mediante un pe&ue9o $ngulo cerca de la base.

    +n diodo *3 casi no presenta resistencia propia, por lo &ue siempredebe usarse una resistencia adicional &ue limite el paso de corriente, y evite &ue se &ueme. '+na resistencia entre / y ;;// < suele seradecuada).

    • El circuito se cierra con un cable desde el negati+o del LED al ra:l deGND.

    • Cuando nuestro programa ponga un +alor de H

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    24/93

    +n esta sesión hemos aprendido 'arias cosas importantes4

     

    o Hemos +isto algunos conceptos básicos de electrónica) la le(

    de 5"m/ %ue relaciona la tensión la resistencia.

    o Hemos identi$cado dos componentes básicos en electrónica/resistencias ( los diodos.

    o Aprendimos a desci,rar los primeros es%uemas electrónicos.

    o Hemos montado nuestro primer circuito con estoscomponentes.

    Circuito con m4ltiples LEDs

    Arduino com I LEDs/ iteraciones

    Home Circuito con m4ltiples LEDs

    Objetivos

    .

     

    o Conocer las

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    25/93

    Material requerido.

    Arduino Uno o similar. Esta sesión acepta

    cual%uier otro modelo de Arduino.&n 'C con el

    entorno de Arduino correctamente instalado (con$gurado.

    &na Protoboard.

     I - diodos LED.

     &na resistencia de == 5"mios.

     Algunos cables de 'rotoboard.

     

    "n circuito con varios #E$% &teraciones 'or 

    .

    +n las sesiones anteriores 'imos como gobernar que un diodo )+! e2terno. i

    quisiJramos montar un circuito que tu'iera 0 )+!s y en el que la luz se desplazara de

    uno a otro, una posibilidad sería repetir 'arias 'eces las mismas secuencias de

    instrucciones que ya conocemos.

    &or e*emplo si conectamos distintos )+!s a distintos pines digitales de rduino,

    deberíamos declararlo en nuestra Iunción de setup(" que podría ser4

    void setup()  {

      // initialie the di!ital pins as an output  pinMode( 13, OUTPUT) ;  pinMode( 1., OUTPUT) ;

    http://www.prometec.net/producto/arduino-uno/http://www.prometec.net/producto/protoboard-830/http://www.prometec.net/producto/leds-de-colores-variados/http://www.prometec.net/producto/kit-de-resistencias-variadas/http://www.prometec.net/producto/cables-dupont-macho-macho/http://www.prometec.net/producto/arduino-uno/http://www.prometec.net/producto/protoboard-830/http://www.prometec.net/producto/leds-de-colores-variados/http://www.prometec.net/producto/kit-de-resistencias-variadas/http://www.prometec.net/producto/cables-dupont-macho-macho/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    26/93

      pinMode( 11, OUTPUT) ;    pinMode( 0, OUTPUT) ;  "

    Y a su 'ez nuestro loop(" debería repetir tantas 'eces como )+!s tengamos el *uego de

    encender y apagar cada uno de los )+!s en secuencia desde el pin ? hasta el @.

    +sta solución es la que podríamos describir como de fuerza bruta, pero no es muy

    elegante, es traba*osa y probablemente cometeríamos más de un error al escribirla,

     porque las personas tendemos a equi'ocarnos haciendo tareas repetiti'as aburridas (y

    esta lo es mortalmente, imaginad un circuito de de ?@ )+!s".

    +n cambio los ordenadores no se aburren y además C33 nos ofrece un medio cómodo

    de indicarle que debe repetir algo un n%mero definido de 'eces. +ste medio es la

    instrucción Ior que podemos usar en combinación con una 'ariable.

     

    • &na +ariable es un contenedor %ue puede tomar +arios +alores/ ennuestro caso aceptará todos los +alores entre J ( ;=.

    • C99 nos e-ige declarar el tipo de las +ariables antes de usarlas. Ennuestro caso usaremos el tipo entero %ue se escribe int para indicar%ue esta +ariables es numérica ( entera/ sin decimales.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    27/93

    • El ciclo contin4a mientras se cumpla esta condición. En nuestro casomientras la i sea menor %ue ;/ o sea "asta el ;=) i K;

    • Como cambia la +ariable en cada iteración. En nuestro caso i++ %uees pedirle a C99 %ue incremente en uno la +ariable i/ al $nal de cada

    iteración.

     

    Con el mismo criterio podríamos escribir la función loop(" así !escargar 4

      void loop()  {  int i ; // %nicialiamos la varia2le i como unentero  or ( i 0 ; i 4 15 ; i66)  {  di!ital#rite( i , $%&$) ;

      delay (7) ;  di!ital#rite( i , 'O#);  delay (7) ;  "  "

    +n la sesión el código era muy similar e2cepto en que escribíamos el 'alor ? para el

    %nico pin que tenía un )+! conectado. quí asignamos el pin con una 'ariable i , que

    'a tomando los 'alores de @ hasta el ? para el pin.

     

    %ótese &ue la instrucción 4or no lleva un punto y coma al fnal. *stoes por&ue se aplica al blo&ue de instrucciones &ue le siguen entrellaves, como es el caso del loop') a iteración realiza las cuatroinstrucciones &ue siguen a la línea del 4or, por&ue est$n dentro de unblo&ue de instrucciones.

    • Las instrucciones %ue se aplican a blo%ues de código/ no lle+an punto( coma al $nal.

    • *n el caso de particular de &ue el blo&ue lleve una 6nica línea decódigo, las llaves pueden ser omitidas, como en el caso de lainstrucción 4or en la 4unción setup') de arriba.

     

    Esquema electrónico del circuito

    .

    +l esquema del circuito es muy similar al de la sesión , sal'o por el hecho de que

    colocamos en la &rotoboard 0 )+!s.

    )a %nica no'edad es que dado que la función de la resistencia es limitar la intensidad de

    la corriente que circula por el circuito, y puesto que todos los diodos tienen masacom%n, basta una %nica resistencia entre este punto y :round.

    http://www.prometec.net/wp-content/uploads/2014/09/Prog_4_1.rarhttp://www.prometec.net/wp-content/uploads/2014/09/Prog_4_1.rar

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    28/93

    Cuando nuestro programa le'ante el pin correspondiente a 'alor a #:#, se cerrar el

    circuito iluminándose el )+! asociado.

    Con este circuito, y con el programa A.? descrito en las páginas anteriores, tendremos un

    efecto de luces similar al del Kcoche fantásticoO (8 de los Tylon para los aficionados a

    la ciencia ficción".

    continuación incluimos un esquema de cone2ión del circuito en una protoboard.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    29/93

     

    • *n general, se considera buena costumbre 'la recomendamos),montar los circuitos &ue veamos a partir del es&uema electrónico delmismo, m$s &ue a partir del diagrama de cone8iones de la7rotoboard.

    • a razón es &ue con el es&uema, la comprensión del circuito escompleta y se evita la tentación de copiar la pr$ctica sin necesidadde entenderla.

    •  Adem$s, el diagrama electrónico del circuito es su completadescripción y suele resultar m$s sencillo comprender la 4unción delmismo. *n cambio a medida &ue los circuitos se hacen m$s

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    30/93

    complejos, comprender su 4unción desde un es&uema de 7rotoboard puede complicarse mucho, y peor a6n llevar a una interpretaciónerrónea.

     

    (ariantes del programa con el mismo circuito

    .

    +ste monta*e nos permite *ugar con las luces y se presta a 'arios programas diferentes

     para conseguir distintos efectos.

    &or e*emplo, con el programa anterior A.?, el efecto no es e2actamente el del coche

    fantástico porque cuando acabamos de iterar el for, el programa 'uel'e a empezar desde

    el principio, lo que hace que la luz salte desde el pin @ hasta la del pin ?.

    sí pues / &odríamos hacer que la luz rebotara 1 &ensadlo un poco.

    !esde luego que sí, bastaría con usar dos ciclos for, similar a lo siguiente !escargar 4

      void loop() // Pro!858.  {  or ( int i 0 ; i 4 15 ; i66) // -einimos lavaria2le i so2re la marcha  {  di!ital#rite( i , $%&$) ;

      delay (7) ;  di!ital#rite( i , 'O#);  delay (7) ;  "  or ( int i 1. ; i 90 ; i::) // -einimos la varia2lei so2re la marcha  {  di!ital#rite( i , $%&$) ;  delay (7) ;  di!ital#rite( i , 'O#);  delay (7) ;  "  "

     

    • El primer ciclo ,or "ace %ue las luces se encienda en secuencia desdela J "asta la ;=. El segundo bucle entra a continuación empe1andocon la lu1 ;> para no repetir la ;=# ( $nali1ando con la para norepetir la J#/ ( +uelta a empe1ar.

    • En el segundo bucle "emos "ec"o una cuenta atrás dicindole a la+ariable i %ue se decrcmentara en uno en cada iteración mediantela instrucción iM .

    •  ambin nos "emos apro+ec"ado de %ue C99 nos permite de$nirvariables sobre la marcha dentro de la propia instrucción for/ sin

    http://www.prometec.net/wp-content/uploads/2014/09/Prog_4_2.rarhttp://www.prometec.net/wp-content/uploads/2014/09/Prog_4_2.rar

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    31/93

    necesidad de dedicarle una l:nea completa a la declaración einiciali1ación.

     

    8tra 'ariante seria, hacer un efecto de ola en al que las luces subieran de*ando

    encendidos los )+!s pre'ios hasta alcanzar el má2imo y ahora descender apagando los)+!s superiores. 8s recomendamos intentar resol'er el problema como desafío, antes

    de buscar una solución.

     

    • 7rogramar es en parte aprender las instrucciones de un lenguaje 'la parte 4$cil), y otra m$s di4ícil &ue es aprender a resolver los problemas de un modo &ue nos permita darle instrucciones a unordenador para &ue lo lleve a cabo.

    • *stos procedimientos secuenciales de cómo resolver un cierto tipo de problemas es lo &ue se conoce como un algoritmo.

    • Seg6n el problema &ue abordemos el algoritmo ser$ m$s o menoscomplicado pero aprender a programar tiene m$s &ue ver condesarrollar esta capacidad de resolver problemas lógicos en unasecuencia de pasos &ue podamos codifcar en un ordenador.

    • 7or cierto, cual&uiera puede aprender a programar. %o lo dud#is. Solo&ue como en todo, a unos les lleva m$s tiempo &ue a otrosdesarrollar la habilidad necesaria. Al principio muchos me dicen &ue

    les duele la cabeza de pensar en este tipo de cosas, pero os animo acontinuar 'poco a poco si es preciso) por&ue os encontrareis &ue valela pena.

     

    Resumen de la sesión

    .

    +n esta sesión hemos aprendido 'arias cosas importantes4

     

    • La instrucción For/ nos permite iterar un blo%ue de instruccionestantas +eces le indi%uemos.

    • Hemos +isto uno de los tipos de +ariables %ue C99 acepta) losenteros.

    • Hemos introducido el concepto de algoritmo/ como un procedimientosecuencial para resol+er un problema concreto ( lo "emos aplicado a+arios ejemplos de programas sencillos con luces.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    32/93

    Las entradas digitales de Arduino

    Le(endo un pulsador con Arduino

    Home Las entradas digitales de Arduino

    Objetivos

    .

     

    o Conocer las entradas digitales.

    o Leer el primer pulsador.

    o 'resentar los +alores booleanos.

    o &n operador) Negación.

     

    Material requerido.

     Arduino Uno o similar. &n 'C con el entorno

    de Arduino correctamente instalado (

    con$gurado.

    &na Protoboard.

    &n diodo LED.

    http://www.prometec.net/http://www.prometec.net/producto/arduino-uno/http://www.prometec.net/producto/protoboard-830/http://www.prometec.net/producto/leds-de-colores-variados/http://www.prometec.net/http://www.prometec.net/producto/arduino-uno/http://www.prometec.net/producto/protoboard-830/http://www.prometec.net/producto/leds-de-colores-variados/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    33/93

     &n pulsador.

     

    Dos resistencias de == 5"mios.

    Algunos cables de 'rotoboard.

    Entradas digitales

     

    Con frecuencia en electrónica necesitamos saber si una luz está encendida o apagada, si

    alguien ha pulsado un botón o si una puerta ha quedado abierta o está cerrada.

    este tipo de se$ales todo < nada, < N8, 9-+

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    34/93

    7ontaremos un circuito con un diodo )+! y resistencia conectado al pin digital ?H de

    rduino, tal y como 'imos en las sesiones pre'ias y ademas un segundo circuuito con

    un pulsador ? conectado al pin @ con una resitencia como se muestra en el diagrama

    siguiente.

     

    8bsJr'ese que mientras no pulsemos ? el pin @ de rduino está conectado a P; atra'Js de la resistencia 9 forzando una lectura de tensión alta (#:#". +n cambio

    cuando pulsemos ? cerraremos el circuito del pin @ a :round con lo que leerá tensión

     ba*a, )86. +n ambos casos tenemos un 'alor de tensión definido.

    i no pusiJramos la resistencia 9, al pulsar ? leeríamos correctamente )86 en el pin

    @. &ero al de*ar de pulsar ? el pin @ estaría en un estado flotante, que es ni #:# ni

    )86 sino indeterminado. Como esto es inaceptable en circuitos digitales forzamos una

    lectura alta con 9.

     

    •  A esta resistencia &ue 4uerza el valor alto en vacio se le conoce como pullup Si la conect$ramos a masa para 4orzar una lectura a Groundse le llamaría pulldo)n resistor.

    • *sta resistencia es clave para &ue las lecturas del pulsador seanconsistentes. *l circuito, simplemente, no 4uncionar$ bien si se omite'volveremos sobre esto).

     

    Y aquí tenemos el esquema para protoboard del circuito.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    35/93

     

    • *n este es&uema hemos seguido la pr$ctica habitual de usar cablesnegros para conectar a masa y cables rojos para conectar a tensión'5).

    • bs#rvese &ue el pulsador S- tiene cuatro pines 'el &ue est$ sobre laresistencia horizontal). *sto es por&ue cada entrada del interruptortiene dos pines conectados. *n nuestro circuito simplementeignoramos los pines secundarios.

     

    #e*endo los pulsadores

     

    +mpecemos haciendo un programa que haga que el )+! se encienda cuando pulsamos

    el botón y se apague cuando lo soltamos. &ara ello pediremos a rduino que configure

    el pin digital ?H (!?H" como salida para mane*ar el )+!, y el pin digital @ (!@" como

    entrada para leer el botón.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    36/93

     Normalmente en programas sencillos basta con poner el n%mero de pin en las

    instrucciones. &ero a medida que el programa se complica esto tiende a pro'ocar errores

    difíciles de detectar.

    &or eso es costumbre definir 0ariables con los n%meros de pin que usamos, de forma

    que podamos modificarlos tocando en un solo lugar (y no teniendo que buscar a lo largo

    del programa". ;amos a escribir esto un poco más elegantemente4

      int '- 1 ;  int 2oton 0; 

    void setup()  {  pinMode( '-, OUTPUT) ; // '- como salida  pinMode( 2oton , %PUT) ; //2ot

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    37/93

    • +n operador es un símbolo &ue relaciona varios valores entre sí, o&ue modifca el valor de una variable de un modo previsible.

    • *jemplos de operadores en (>> son los matem$ticos como >,,B , 2 C y hay otros como la negación D o el cambio de signo de una variable :

    E 8. Fremos viendo m$s. 

    !e hecho este tipo de operaciones son tan frecuentes que C33 incorpora un tipo

    llamado bool o booleano que solo acepta dos 'alores 9-+ (cierto" y I)+ y son

    completamente equi'alentes al ? < H, y al #:# < )86

    +ste nue'o programa sería algo así4

      void loop()  {

      int valor di!ital=ead(2oton) ; // leemos el valorde 2oton en valor  di!ital#rite( '-, >valor) ; //scri2imos valoren '-

    "

    #emos definido 'alor como bool, porque podemos usar el 'alor de tensión alto como

    9-+ y el 'alor ba*o como I)+.

    el botón no está pulsado el !@ leerá 9-+ y por tanto pondrá )+! a I)+. +n

    caso contrario encenderá el )+!.

    !e hecho podríamos escribir una 'ariante curiosa del blinGing )+! usando el operadornegación4

      void loop()  {  2ool valor di!ital=ead ('-) ;  di!ital#rite( '-, >valor) ;  delay ( 1) ;  "

     

    7odemos leer la situación actual de un pin 'nos devuelve su estadoactual), a6n cuando lo hayamos defnido como salida, *n cambio no podemos escribir en un pin defnido como entrada.

     

    )a primera linea lee la situación del )+! y la in'ierte en la segunda línea, despuJs

    escribe esto en )+!. Y puestos a batir alg%n record, podemos escribir el blinGing led en

    solo dos líneas4

      void loop()  {

      di!ital#rite( '- , > di!ital=ead( '-)) ;  delay ( 1) ;  "

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    38/93

     

    • as instrucciones dentro de los par#ntesis se ejecutan antes &ue las&ue est$n 4uera de ellos. 7or eso el digital0ead se ejecuta antes &ueel digitarite..

     

    Resumen de la sesión

    .

     

    o Hemos +isto una ,orma de leer se3ales digitales del mundoe-terior además de poder en+iarlas)

    digitalead pin#

    digitalrite pin / +alor#

    o Hemos conocido un nue+o componente) el pulsador.

    o Conocemos un nue+o tipo en C99/ el booleano ( un nue+ooperador de negación.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    39/93

    Condicionales ( botones

    La instruccion i, 

    Home Condicionales ( botones

    Objetivos

    .

     

    o Lógica digital ( algebra de Bool.

    o Los condicionales.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    40/93

     &n pulsador.

     

    Dos resistencias de == 5"mio.

    Algunos cables de 'rotoboard..

    #ógica digital * algebra de ool 

    .

    +n la sesión anterior presentamos el tipo de 0ariable bool destacando que solo puede

    tomar dos 'alores4 True o False. unque para quienes no estJn acostumbrados al

    algebra booleana o binaria puede parecer e2cesi'o dedicar un tipo a algo tan simple, en

    la práctica buena parte de las instrucciones de programación se apoyan o dependen de

    este tipo de 'ariables.

    )a razón práctica es que con frecuencia hay que tomar decisiones para seguir un camino

    u otro en función de que se cumpla una condición dadaV +sta condición se debe evaluar

    necesariamente, a

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    41/93

    #a instrucción i 

     

    +n este capítulo 'amos a presentar unas instrucciones nue'as de C33, que nos permitan

    tomar decisiones para hacer una cosa u otra.

    )a instrucción if es muy sencilla de usar, basta con pasarle entre parJntesis una 'ariable

    o condición que se e'al%e a true o false. i el resultado es true se hace el bloque que

    'iene a continuación y en caso contrario se e*ecuta el bloque que hay detrás del else si

    e2iste.

    i no e2iste la clausula del esle, entonces el bloque que sigue al if, se e*ecuta o no, en

    función de la condición y luego sigue con la secuencia de instrucciones a continuación.

      i ( condici

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    42/93

     

    (olviendo con los botones

     

    ;amos con un programa diferente. >ueremos que el botón act%e como un interruptor,que al pulsarlo una 'ez se encienda, y la pró2ima 'ez lo apague. &odríamos plantear

    algo así y os recomiendo que lo probJis en 'uestro rduino4

      int '- 1 ; int 2oton 0 ;  2ool estado alse ;  void setup()  {  pinMode( '-, OUTPUT) ;  pinMode( 2oton , %PUT8PU''UP) ;  di!ital#rite('- , 'O#) ; // +pa!amos el '- al empear  "

      void loop()  {

    2ool valor di!ital=ead(2oton) ;//leemos el 2ot

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    43/93

    una solución es nue'amente frenar a rduino y hacerle esperar un tiempo entre PH y SPH

    miliWsegundos una 'ez que detecta que se ha pulsado el botón, de modo que nos dJ

    tiempo a liberar el pulsador4

      void loop()

      {2ool valor di!ital=ead(2oton) ;

    //leemos el 2ot estado8anterior) //hay cam2io @ $anpulsado o soltado

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    44/93

      {  i (estado 'O#) //+l pulsar 2otdi!ital=ead('-));  estado8anterior estado ; // Para recordarel ultimo valor

      "  "

    Ya di*imos que para comprobar si dos 'alores son iguales usamos XX, &ara comprobar si

    son diferentes usamos UX , y e2isten otros operadores relacionales

     

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    45/93

    Resumen de la sesión

    .

     

    o Hemos +isto la instrucción i, 2 else.

    o @imos +arios programas con pulsadores ( como "acer eldebouncing.

    o Hemos presentado los operadores lógicos de relación (comparación.

    o Continuamos escribiendo pe%ue3os programas para desarrollarla ,orma de pensar necesaria para escribir nuestras propiasaplicaciones.

    Comunicación con el e-terior

    El puerto serie en Arduino ( los tipos !tring

    Home Comunicación con el e-terior

    Objetivos

    .

     

    o Comprender la comunicación +:a puerto serie.

    o &tili1ar la librer:a !erial.

    o 5peraciones con enteros.

    o Los tipos !tring ( c"ar.

    http://www.prometec.net/http://www.prometec.net/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    46/93

    o 5perando con !trings.

    o La instrucción T"ile.

     

    Material requerido.

     Arduino Uno o similar. &n 'C con el entorno

    de Arduino correctamente instalado (

    con$gurado.

     

    Comunicación ,erie con el mundo e-terior 

     

    7ás antes que despuJs, 'amos a necesitar comunicar nuestro rduino con nuestro &C.

    )as razones son 'arias, en'iarle órdenes o recibir información o se$ales por e*emplo.

    )os &Cs disponen de teclados, pantallas y adaptadores de red, pero con rduino

    tenemos que usar el puerto -5 que establecerá una coneión en serie con nuestro &C.

    )a comunicación en serie es muy sencilla, bastan dos hilos para en'iar una diferencia de

    tensión entre ellos y poder marcar ni'eles alto (P;" y ba*o(H;" y con esto podemos

    transmitir información digital. hora solo nos falta pactar dos cosas entre quien en'ía y

    quien recibe4

     

    • &n códio com!n para codi$car los caracteres %ue en+iamos.

    • &n acuerdo de velocidad para saber a %u ritmo "a( %ue leer losdatos.

     

    +l código com%n que 'amos a usar con rduino se llama código A>CII y es estándar en

    todos los &Cs. +s una forma de codificar las letras mediantes n%meros que representas

    estos caracteres. 9ecordad que solo podemos transmitir unos y ceros.

    http://www.prometec.net/categoria-producto/arduinos/http://www.prometec.net/categoria-producto/arduinos/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    47/93

    sí por e*emplo la letra se representa por el numero @P, la 5 el @@, C el @[

    &rácticamente todos los &Cs actuales utilizan este código y eso incluye a 6indo=s,

    7ac y )inu2 (y por eso podemos leer emails en'iados desde distintas plataformas", pero

    es importante comprender que estJ es uno más entre 'arios códigos de caracteres

     posibles (+5C!C por e*emplo".

     

    •  Actualmente, en realidad, se suele usar una e8tensión del código A,C&& 'llamada "nicode ) &ue permita el uso de caracteres noincluidos en la tabla original, y &ue permita representar caracterescomo las I, o acentos para el espa9ol, pero tambi#n al4abetosdistintos como el Janji chino o el al4abeto cirílico. " este es el motivo

     por el &ue pod#is leer las letras chinas o rusas en las p$ginas deinternet de estos países..

     

    +l otro factor a pactar para realizar una comunicación serie es la 'elocidad. !ado que

    solo disponemos de dos hilos para transmitir, necesitamos saber cuándo hay que leer la

    línea y esto se hace estableciendo un acuerdo de 'elocidad. i la 'elocidad de en'ío es

    distinta de la 'elocidad de lectura, el mensa*e final será irreconocible.

    5uena parte de los errores de comunicación serie programando con rduino se suelen

    deber a una diferencia de 'elocidad entre el emisor y el receptor.

    +sta 'elocidad se mide en bits por segundo y 'amos a 'er que rduino soportadiferentes 'elocidades de comunicación serie.

     

    Estableciendo la comunicación ,erie

    .

    rduino dispone de una librería serie incluida llamada erial, que nos permite en'ía

    información al &C y para usarla simplemente tenemos que pedirle en nuestro setup("

    que la incluya. )a instrucción que se encarga es4

    Berial?2e!in( velocidad ) ;

     

    • %ótese &ue Serial tiene la S may6sculas y &ue (>> di4erencia entremay6sculas y min6sculas

     

    )a 'elocidad es una 'alor entre HH y ??P.SHH bits por segundo. Y suele ser costumbre

    establecerla en \@HH (el 'alor por defecto" pero no hay ninguna razón para ello y esta no

    es una 'elocidad especialmente alta.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    48/93

    &ara en'iar un mensa*e desde rduino a nuestro &C podemos usar las funciones

    erial.print(" y erial.println(".;eamos un e*emplo4

      int '- 1 ; int 2oton 0 ;  2ool estado alse ;

      void setup()  {Berial?2e!in(C0) ; // %nicialia el

    Puerto seria C0 2its por se!undo  "  void loop()  {

    int i 75 ;Berial?println( i );

      "

    +l println(" en'iara el 'alor de i al puerto serie de rduino (repetidamente". &ara leerlo

    en nuestro &C necesitamos un monitor de puerto serie. +l !+ de rduino incluye uno

    muy sencillo, pero suficiente que se in'oca con el botón del monitor4

     

     Necesitamos además asegurarnos de que la 'elocidad de cone2ión es la misma enambos e2tremos. Ií*ate en la parte inferior derecha del monitor serie4

     Normalmente la 'elocidad por defecto son los \@HH bits por segundo o baudios en los

    que hemos programado nuestra puerta serie, y si lo desplegáis, 'erJis las diferentes

    'elocidades aceptables para rduino.

     

    • *strictamente hablando, bits por segundo y baudios no sone8actamente lo mismo salvo bajo ciertas condiciones particulares&ue en Arduino se cumplen, por lo &ue a&uí podemos usarlos comosinónimos.

    • *n el mundo Arduino parece haber un acuerdo de usar velocidadesbajas como KL// en lugar de m$s altas como --//, para evitar

     problemas. *sto es algo &ue hace a9os estaba justifcado por problemas de transmisión, pero con la tecnología actual no hay

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    49/93

    motivo para ello. *s m$s, en cuanto necesitemos utilizar dispositivosde comunicaciones como adaptadores *thernet o MlueNooth paracomunicarnos, la velocidad tendr$ &ue subir necesariamente.

     

    hora que sabemos en'iar información y resultados al &C, 'amos a 'er cómo podemosoperar con enteros y mostrar el resultado en la puerta serie. +n C33 los operadores

    numJricos son los normales en cálculo (y algunos menos frecuentes"4

     

    • Adición) 9

    • esta) M

    • ultiplicación) U

    • Di+isión entera) 2 Cociente sin decimales puesto %ueoperamos con enteros

    • esto) V De+uel+e el resto de una di+isión.

     

    +n C33 tenemos que e2presar las operaciones matemáticas en una sola línea y utilizar

     parJntesis para garantizar que se opera como necesitamos. ;amos con algunos

    e*emplos4

    "peración #esultado $omentario

    int i U > resultado I

    int i U > 2 = resultado >'or%ue desprecia los decimales al ser

    entero

    int i ; V = resultado > El resto de ; entre =

    9 I 2 > resultado J Calcula primero la di+isión.

    9I# 2 > resultado ? El parntesis ,uer1a a %ue se realiceprimero la suma

    !ada una e2presión, la precedencia de operadores indica que operaciones se realizaran

    antes y cuales despuJs en función de su rango. &ara los que se inician en C33 no es fácil

    saber que operadores tienen preferencia, por lo que es más seguro que ante la duda usJis

     parJntesis.

    )os parJntesis fuerzan las operaciones de una forma clara y con'iene utilizarlos ante la

    duda porque de otro modo, detectar los errores de operación puede 'ol'erse muy difícil

    especialmente cuando uno empieza a programar.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    50/93

    +l operador resto es más %til de lo que parece a primera 'ista porque nos permite saber

    si un numero es m%ltiplo de otro. upongamos que queremos saber si un n%mero dado

    es par.

    &odríamos escribir un programa como este4

      void setup()  {  Berial?2e!in(C0) ; // %nicialia el Puerto serie  "  void loop()  {

    int i .D ; //l nEmero en cuesti

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    51/93

      Btrin! 2 Ga todos?G ;  Berial?println( a 6 2);

    "

    Y tambiJn podemos construir un tring sobre la marcha así4

    void loop()

      {int resultado .7 ;

      Btrin! s Gl resultado es@ G ;  Berial?println( s 6 Btrin!( resultado ));

    "

    !onde imprimimos el resultado de concatenar s tring, y la con'ersión de un int a

    tring (+l operador 3 a$ade un tring al final de otro".

    Recibiendo mensajes a travs del puerto ,erie

    .

    #asta ahora solo hemos en'iado mensa*es desde rduino hacia el &C, /&ero comorecibimos mensa*es en rduino1

    +n primer lugar disponemos de una función llamada erial.parsent(" que nos entrega lo

    que se escribe en el monitor serie con'ertido a entero4

      void loop()  {

    i (Berial?availa2le() 9 )  {  int I Berial?parse%nt();

      Berial?println ( I) ;  "  "

    +ste programa simplemente recibe en 2 los n%meros que nos tecleen en la consola

    (cuando pulsemos intro" y si es un te2to, lo interpreta como cero.

    #emos utilizado otra función de erial 4 'ailable(" que es un booleano. Con'iene por

    costumbre comprobar que antes de leer el puerto serie hay algo que nos han en'iado. i

    lo hay 'ailable(" es rue y en caso contrario es Ialse.

    &ara leer un tring del puerto serie tenemos que complicarnos un poco más y hablar del

    tipo char.

    -no de de las mayores quebradero de cabeza al iniciarse en C33 es comprender la

    diferencia, antiWintuiti'a, entre char y tring. char es un tipo que representa un %nico

    carácter y se define con comillas simples, a diferencia de tring que necesita comillas

    dobles4

    char c JaK ;Btrin! s *a* ;

    unque parezca lo mismo para C33 son muy distintos.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    52/93

    &ara leer una cadena desde el puerto serie necesitamos leer un carácter cada 'ez y

    despuJs montar un tring a partir de ellos, pero antes, aseg%rate de seleccionar ambos

     N) C9 en la parte inferior del monitor serie, para garantizar que se en'ía el carácter

    de fin de línea4

    -n programa para leer la consola sería algo así4

      void setup()  { Berial?2e!in(C0); "

      void loop ()  {

    char c L L ;  Btrin! mensae GG ;  % (Berial?availa2le()) //Nompro2amos si hay al!oesperando  {  hile( c > LnL) //Bi lo hay, lo leemos hastael intro  {

    mensae mensae 6 c ; // +Qadimos loleRdo al mensae

      c Berial?read(); //'eer 1 carScter  delay(.7);  "  Berial?println( mensae); //+l salir imprimir elmensae  mensae GG ; //H

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    53/93

    • *l motivo del delay') es &ue a una velocidad tan lenta, enviar unchar de O bits por la puerta serie, tarda mucho m$s de lo &ue tarda

     Arduino en ejecutar las instrucciones del Phile y volver a empezar.7or eso si se suprime el delay 'y os recomiendo la prueba) leer$ uncar$cter bueno 'de la palabra escrita y como -/ caracteres basura

     para un Arduino +% o ?ega).

    • Si subimos la velocidad de comunicación a --// bits por segundo,comprobareis &ue no hay este problema ya &ue al multiplicar lavelocidad de envío por m$s de -/ Arduino ya no tiene tiempo devolver a por m$s caracteres antes de &ue lleguen.

     

    Resumen de la sesión

    .

     

    o Hemos +isto como establecer la comunicación con el 'Ce-terno/ tanto para en+iar como para recibir mensajes enteros( de te-to.

    o Hemos presentado los tipos !tring ( c"ar.

    o Hemos +isto las reglas básicas para operar con enteros ( con

    !trings.

    o 'resentamos una nue+a instrucción) T"ile.

    Funciones ( enteros

    De$niendo ,unciones ( di,erentes tipos de enteros

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    54/93

    Home Funciones ( enteros

    Objetivos

    .

     

    o 5perar con enteros.

    o Aprender a de$nir ,unciones en Arduino.

    o  rabajar el pensamiento lógico ( algor:tmico#

    o Di,erentes tipos de enteros en C99.

     

    Material requerido.

     Arduino Uno o similar.&n 'C con el entorno

    de Arduino correctamente instalado (

    con$gurado.

     

    #a primera unción% Calculando si un n/mero es primo

    .

    Ya hemos comentado antes, que programar es un poco como andar en bici, se aprende

     pedaleando y a programar programando. #ay que ir aprendiendo la sinta2is del

    lengua*e, C33 en nuestro caso, pero tambiJn aprendiendo a resol'er problemas lógicos

    y partirlos en instrucciones.

    #acer cursos de programación (o de andar en bici" está bien, pero al final hay que

     ponerse a programar y tener problemas, porque solo teniJndolos y resol'iJndolos, solo

    o con ayuda, se aprende. 'o se puede aprender a nadar sólo estudiando.

    Con un cierto temblor de manos, 'amos a centrarnos en esta sesión en algunos e*emplos

    clásicos de programación, como son el cálculo de n%meros primos para entrenar esta

    capacidad de b%squeda de algoritmos prácticos para resol'er problemas más o menos

    abstractos y para presentar algunos conceptos adicionales.

     

    http://www.prometec.net/http://www.prometec.net/categoria-producto/arduinos/http://www.prometec.net/http://www.prometec.net/categoria-producto/arduinos/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    55/93

    • *s importante destacar &ue no e8iste una 4orma 6nica de resolver un problema concreto y &ue una no tiene por&ue ser mejor &ue otra,aun&ue con 4recuencia se aplican criterios de efciencia o elegancia

     para seleccionar una solución.

     +sta sesion 'a a requerir un esfuerzo un poco mayor que las anteriores porque 'amos a

    empezar a entrenar un musculo poco usado,el cerebro, en una tarea poco frecuente,

     pensar. Y esto es algo que e2ige un poco e esfuerzo, pero es necesario para a'anzar.

    upongamos que queremos crear un programa que nos de'uel'a true o false seg%n que

    el n%mero que le pasamos sea primo o no y a la que podamos llamar 'arias 'eces sin

    copiar el código una y otra 'ez. )a llamaremos &rimo (" y queremos utilizarla de la

    siguiente manera4 i el numero n que le pasamos es primo nos tiene que de'ol'er true y

    en caso contrario que de'uel'a false, o sea queremos que nos de'uel'a un 'alor bool.

    +sto es lo que llamamos una unción.

    +n realidad, ya hemos utilizado 'arias funciones que rduino trae predefinidas como el

    erial.print(" o abs(" , o erial.a'ailable(" y se las reconoce por esa apertura y cierre de

     parJntesis.

    C33 nos ofrece todas las herramientas para crear nuestras propias funciones y es algo

    muy %til porque nos ayuda a organizar un problema general en trozos o funciones más

     peque$as y más fáciles de mane*ar.

    &ara definir una función así, tenemos que declararla primero y describirle a C33 que

    hacer4

      2ool Primo( int I) // int I representa el parSmetro Aue pasaremosa esta unci

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    56/93

    ;eamos cómo podría ser el código de la función &rimo("4

      2ool Primo( int n)  {  or ( int i . ; i 4n ; i66)  {

      i ( n F i ) // Bi el resto es entonces esdivisi2le?  {

    Berial?println ( Btrin!(n) 6G es divisi2lepor@ G 6 Btrin!(i)) ;  return(alse) ;  "  "  return (true) ; "

    &ara saber si un n%mero es o no primo basta con di'idirlo por todos los n%meros

     positi'os menores que Jl y mayores que ?. +n el e*emplo di'idimos el n%mero n

    empezando en S y finalizando en nW?.

    i encontramos un 'alor de i que de'uel'e resto H, entonces es di'isible (no es primo",

    de'ol'emos false con return y 'ol'emos a la intruccion que llamo a la función. i no

    hallamos ning%n di'isor, al finalizar el for de'ol'emos true y listo. +ste es el mJtodo de

    fuerza bruta y sin duda es me*orable pero de momento nos sir'e.

    &ara usar &rimo hay que pasarle un entero. 9ecordad que al definir la función di*imos

     bool &rimo (int n" donde n representa el 'alor que queremos probar. sí pues !escargar 4

      void loop() // Pro!881  {

    int I 5.D ; // l nEmero a pro2ar  2ool p Primo(I);  i (p )  Berial?print( Btrin!(I) 6 G s primo?G) ;  else  Berial?print( Btrin!(I) 6 G o es primo?G ) ;  "

    ;eamos cuantos primos hay hasta el, digamos ?HSA, !escargar 4

      2ool control true ; // Pro!88.

      int maIimo 1.5 ;

      void loop()  {

    i ( control) // Bolo es para Aue no repita una y otrave lo mismo  {

    Berial?println( G'os numeros primos hasta el G6 Btrin!( maIimo)) ;  or ( int I . ; I 4 maIimo ; I66)  {

    2ool p Primo(I);  i (p ) Berial?println( I) ; // o hay

    inconveniente en escri2irlo se!uido  "  "

    http://www.prometec.net/wp-content/uploads/2014/10/Prog_8_1.rarhttp://www.prometec.net/wp-content/uploads/2014/10/Prog_8_2.rarhttp://www.prometec.net/wp-content/uploads/2014/10/Prog_8_1.rarhttp://www.prometec.net/wp-content/uploads/2014/10/Prog_8_2.rar

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    57/93

      control alse ;  "

      2ool Primo( int n)  {

    or ( int i . ; i 4n ; i66)

      { i ( n F i ) // Bi el resto es entonceses divisi2le?  return(alse) ;  "  return (true) ; // Bi lle!a aAui es Aue no ha encontradonin!un divisor  "

    unque el programa funciona correctamente la salida no es muy presentable( 9ecordad

    que nos gusta ser elegantes". ;amos a formatearla. &ara ello usaremos el carácter

    tabulador que se representa como ^Ft_ y una coma despuJs. !escargar 4

      2ool control true ; //Pro!8?3  int maIimo 1.5 ;  int contador 1 ;

      void loop()  {

    i ( control) // Bolo es para Aue no repitauna y otra ve lo mismo  {  Berial?println( G'os numeros primos hasta el G6 Btrin!( maIimo)) ;  or ( int I . ; I 4 maIimo ; I66)  {

      i (Primo(I) )  i ( contador66 F )  Berial?println( Btrin!(I)6G,G) ;  else  Berial?print( Btrin!(I) 6G,G6LtL) ;

    ""

      control alse ;  "

    hora el programa formatea la salida de una forma un poco más presentable y cómoda

    de leer.

    http://www.prometec.net/wp-content/uploads/2014/10/Prog_8_3.rarhttp://www.prometec.net/wp-content/uploads/2014/10/Prog_8_3.rar

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    58/93

     

    &ara conseguirlo, hemos a$adido una coma y un tabulador a cada n%mero e2cepto a uno

    de cada 0 que a$adimos intro. ambiJn tenemosuna línea que con'iene comentar4

    i ( contador66 F )

    Cuando a una 'ariable se le a$aden dos símbolos mas al nombre, significa que primero

    se use su 'alor actual en la instrucción en curso, ene este caso en el if, y despu$s se

    incremente en ? su 'alor.

    i hubiJramos escrito4

    i ( 66contador F )

    >uerría decir que queremos incrementar su 'alor antes de utilizarlo. +sta notación es

    muy habitual en C33 y con'iene reconocerla. ambiJn podemos usar contadorW R y R

    Wcontador para decrementar.

     

    El tipo entero

    .

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    59/93

    +ste sería un buen momento para preguntarnos hasta donde podría crecer má2imo en el

     programa anterior. )e asignamos un 'alor de ?HSA, pero /iene un entero límite de

    tama$o1

    )a respuesta es afirmati'a. )os enteros int en rduino C33 utilizan ?@ bits por lo que el

    má2imo seria en principio S?@ X @P.P@, &ero como el tipo int usa signo, su 'alor está

    comprendido entre

    WS.[@0 y 3S.[@[.

    !e hecho en rduino C33 hay 'arios tipos de distintos tama$os para mane*ar enteros4

    %ipo Descripción &alor

    intEntero con signo/ ;J

    bitsentre W=>/JI ( =>/J

    unsigned

    int

    Entero sin signo/ ;J

    bits>;J M ; 7 de "asta J?.?=?

    longEntero con signo/ =>

    bits

    >=> M ; /Desde W>.;.I=/JI "asta

    >.;.I=.J

    unsigned

    long

    Entero sin signo/ =>

    bitsDesde >=> M ; 7 a .>X.XJ.>X?

    b(teEntero sin signo/ I

    bits

    >I de "asta >??

     

    odos estos tipos representan enteros con y sin signo y se pueden utilizar para traba*ar

    con n%meros realmente grandes pero no sin límite.

    !e hecho C33 tiene la fea costumbre de esperar que nosotros lle'emos el cuidado de no

     pasarnos metiendo un 'alor que no cabe en una 'ariable. Cuando esto ocurre se le llama

    desbordamiento (o'erflo=" y C33 ignora olímpicamente el asunto, dando lugar a

     problemas difíciles de detectar si uno no anda con tiento.

    &rueba este a calcular esto en un programa4

    int i 3.D0D ;Berial?println ( i61);

    +nseguida 'eras que si iXS[@[ y le incrementamos en ?, para C33 el resultado es

    negati'o. +so es porque sencillamente no controla el desbordamiento. ambiJn es

    ilustrati'o probar el resultado de

    int i 3.D0D ;

    Berial?println (. i 6 1);>ue seg%n rduino es W?.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    60/93

     

    • *sto no es un error, sino &ue se decidió así en su día y (>> no controla losdesbordamientos, así &ue mucho cuidado, por&ue este tipo de errores pueden ser muy complicados de detectar 

     

    Más sobre las unciones en C++

    .

     Cuando se declara una función se debe especificar que parámetro 'a a de'ol'er. sí4

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    61/93

    o Conocimos tipos con ma(or ( menor capacidad para manejarn4meros enteros mas o menos grandes/ pero %ue todos siguenteniendo un l:mite de tama3o.

    o El e,ecto de desbordamiento de tipos es cla+e ' debe ser

    tenido mu( en cuanta cuando operamos con enteros.

    o Hemos ido jugando con problemas lógicos ( "emos +istoalgunas soluciones %ue os pueden a(udar a plantear las+uestras propias.

    &n programa con +arias ,unciones

    &n programa un poco mas complicado

    Home &n programa con +arias ,unciones

    Objetivos.

     

    o Aprender a operar con Arra(s .

    o Como partir un problema en ,unciones especialistas.

    o 5perar con enteros ( !trings.

    o Entrenar ( desarrollar algunas "abilidades cla+es paraprogramar.

     

    Material requerido.

     Arduino Uno o similar. &n 'C con el entorno

    de Arduino correctamente instalado (con$gurado.

     

    Planteando un programa un poco más complicado.

     

    http://www.prometec.net/http://www.prometec.net/categoria-producto/arduinos/http://www.prometec.net/http://www.prometec.net/categoria-producto/arduinos/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    62/93

    #emos 'isto ya como definir funciones. +n esta sesión 'amos a plantear un programa

    que acepte un n%mero desde la consola y compruebe si es o no primo. Y en caso de no

    serlo, nos calcule cuales son los di'isores primos de este.

     Normalmente para resol'er un problema comple*o es buena política partirlo en otros

     problemas más peque$os que podamos resol'er más fácilmente. +n este caso 'amos a

     plantear al menos funciones4

     

    • 'rimo# M Calcula si un n4mero dado es primo/ de+uel+e true ( encaso contrario ,alse.

    • Di+isores# M 'ara un n4mero dado nos de+uel+e sus di+isores primos.

    • GetLine# M @amos a de$nir una ,unción genrica %ue recoja unacadena de te-to de la puerta serie/ para procesarla a posteriori. Eneste caso recogerá el n4mero a probar.

     

    )a idea es, que nuestro programa empiece comprobando si un numero es primo. i lo

    es, bien por el. no llamaremos a una función que calcule cuales son sus di'isores. Y

     por ultimo necesitamos de algo que nos pueda dar un n%mero desde la consola para

     probarlo y por eso escribimos otro programa que nos permita recibir cómodamente este

    numero de entrada.

    Ii*aros que casi sin haber escrito una linea de programa, ya he decidido como partirlo en

     bloques mas sencillos de mane*ar y programar. +n otras palabras, he buscado una

    estrategia, de resolución

     

    • *sto es un poco trampa. 7arece &ue se me acaba de ocurririnstant$neamente pero no 'Aun&ue parezca increíble).

    • 3espu#s de pensar un rato y pasar un rato mayor escribiendo yafnando el programa, da gusto presentarlo como si 4uera 4$cil. Que loes, pero lo &ue no ves, es la de horas &ue hay &ue estar haciendo

     pruebas hasta todo va encajando y &ueda afnado.

    • (on tiempo y pr$ctica ' %o, no mucha) ir#is mejorando con rapidez,en vuestra habilidad de romper problemas en pedazos manejables,simplemente re&uiere tiempo y entrenamiento, y esto es algo &ue osser$ 6til no solo para programar.

     

    Operando con Arra*s. 

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    63/93

    Con la función &rimo(" que 'imos en la sesión anterior, a medida que el tama$o del

    n%mero a probar, crece, el tiempo que tarda en determinar si es primo tambiJn, ya que

    di'idimos por todos los n%meros que le preceden.

    -na manera más eficaz de calcular si un n%mero es primo, es di'idirlo solo por los

    n%meros primos menores que el. &ero para esto necesitaríamos un modo de archi'ar

    estos primos.

    &odríamos e*ecutar primero el programa &rog`0. para hallar los N primeros n%meros

     primos, y si dispusiJramos de alg%n medio para guardarlos, tendríamos un sistema más

    eficaz para decidir si un n%mero es o no primo.

    -na manera de archi'ar estos n%meros es definir un array.

    -n array es simplemente una colección de elementos organizados como una matriz, y pueden definirse con 'arias dimensiones. +mpecemos con un array de una sola

    dimensión. &ara definirlo podemos optar por dos maneras4

    int serie1 W 7X ; //Nreamos una colecci

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    64/93

     

    -n error muy peligroso, y difícil de detectar sería algo así (&rog`\.S"4

    int serie.WX { 3,7,0,1., .3" ;  or (int i ; i4CC ; i66)

      Berial?println(GPosicion G 6 Btrin!(i)6 G@ G6Btrin!(serie.WiX)) ;

    -no esperaría que C33 generase un error, ya que definimos un array de P elementos y

    hacemos referencia a ?HH, pero no. Nue'amente C33 nos sorprende de'ol'iendo

    correctamente los P primeros 'alores y luego sigue leyendo posiciones de memoria

    consecuti'as tan tranquilo, como si tu'ieran sentido.

     

    • (>> espera &ue seamos nosotros &uienes controlemos esto, así &uemucho cuidado 

    &or %ltimo, mencionar que podemos mane*ar arrays de 'arias dimensiones4

      %nt Ta2leroW , X ;

    maginad que ablero representa las posiciones de una partida de a*edrez y cada 'alor

    que contiene esa posición corresponde a una pieza que se encuentra en esa casilla.

     

     A0nando la unción Primo12

    .

    i corremos el programa &rog`0. nos dará en el monitor una lista de primos hasta el

    ?HSA (o hasta el n+mero que deseemos modificando el valor de m"!imo" y

    seleccionándolos con el ratón podremos copiar esos 'alores y pegarlos en el !+ para

    crear un array con ellos (&rog`\."4

    int PWX { ., 3, 7, D,11, 13, 1D, 1C,  .3, .C, 31, 3D,

    51, 53, 5D, 73,  7C, 01, 0D, D1,D3, DC, 3, C,  CD, 11, 13, 1D,1C, 113, 1.D, 131,  13D, 13C, 15C, 171,17D, 103, 10D, 1D3,  1DC, 11, 1C1, 1C3,1CD, 1CC, .11, ..3,  ..D, ..C, .33, .3C,.51, .71, .7D, .03,  .0C, .D1, .DD, .1,.3, .C3, 3D, 311,

      313, 31D, 331, 33D,35D, 35C, 373, 37C,

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    65/93

      30D, 3D3, 3DC, 33,3C, 3CD, 51, 5C,  51C, 5.1, 531, 533,53C, 553, 55C, 57D,  501, 503, 50D, 5DC,5D, 5C1, 5CC, 73,

      7C, 7.1, 7.3, 751,75D, 77D, 703, 70C,  7D1, 7DD, 7D, 7C3,7CC, 01, 0D, 013,  01D, 01C, 031, 051,053, 05D, 073, 07C,  001, 0D3, 0DD, 03,0C1, D1, DC, D1C,  D.D, D33, D3C, D53,D71, D7D, D01, D0C,  DD3, DD, DCD, C,11, .1, .3, .D,  .C, 3C, 73, 7D,

    7C, 03, DD, 1,  3, D, CD, C11,C1C, C.C, C3D, C51,  C5D, C73, C0D, CD1,CDD, C3, CC1, CCD,  1C, 113, 11C, 1.1 " ;

    #emos definido un array enumerando sus elementos, entre lla'es y separados por

    comas.

     

    • *s importante percatarse de &ue despu#s de copiar y pegar las salidade 7rogUO.; hemos borrado la coma despu#s del -/-, por&ue si nodaría un error de sinta8is al defnir el array.

    • bs#rvese &ue hay un punto y coma despu#s de la llave de cierre delarray. Aun&ue est$ entre llaves es una instrucción de asignación y nouna defnición de 4unción.

    •  Al defnir el array por enumeración, si el n6mero es alto podemos perder de vista cuantos elementos contiene. Si necesitamos calcularel n6mero de miembros podemos utilizar la 4unción sizeo4'):

    int size = sizeof(P) /

    sizeof(int);

    • Donde ' es nuestro arra( ( di+idimos por si1eo,int# por%ue de$nimos' como int. Y para este caso de+uel+e un +alor de ;> elementos

     

    hora bastaría di'idir el n%mero a probar por aquellos elementos del array &, menores

    que Jl4

    2ool Primo(int I){  int indeI ;

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    66/93

      hile ( PWindeIX 4 I)  { i ( I F PWindeI66X )  return(alse);  "  return(true);"

    9ecorremos los 'alores almacenados en el array &DE mediante inde2 al que 'amosincrementando en cada iteración, hasta que nos toque probar un primo mayor que el

    'alor que comprobamos.

     

    'unción $ivisores 12

    .

    +sta función 'a a recorrer los elementos del array en tanto en cuanto sean menores

    (posibles di'isores" que el n%mero que probamos. i encontramos di'isores primos losguardamos en un array que hemos llamado !i'DE al que le asignamos un má2imo de S

    di'isores4

    int -ivW3.X ;int -ivisores(int I)  {

    int indeI ; //+punta a la posiciondel array PWX  int pos ; //Para apuntar al arrayde divisores -ivWX  hile ( PWindeIX 4 I)

      {int Y PWindeI66X ;

      i ( I F Y )  -ivWpos66X Y ; //&uardamos el divisor enen el array -ivWX?  " // para uso posterior  return(pos); //-evolvemos el numero dedivisores encontrado  "

    Cuando queramos imprimir los di'isores, basta con recorrer !i'DE.

     

    • *s importante entender &ue tanto la 4unción 7rimo') como 3ivisores')recorren el array de n6meros primos hasta &ue sobrepasan el valordel numero a probar. Si el n6mero &ue probamos es mayor &ue elm$8imo primo &ue contiene 7R, 7odemos obtener resultadose8tra9os, ya &ue leeremos m$s elementos de los &ue hemos defnido.

    • *ste m#todo de buscar divisores es v$lido solo para n6merosin4eriores a -/T' o en su caso, al m$8imo n6mero hasta el &uehayamos calculado primos), por&ue un n6mero no ser$ primo si7rimo') lo afrma, ya &ue encontrar$ divisores. 7ero puede afrmar&ue un numero es primo erróneamente si sus divisores sonsuperiores al m$8imo primo en 7R.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    67/93

     

    #a unción 3et#ine12

    .

    unque ya comentamos que podemos usar una función parsent (" incluida en rduino

     para recoger un 'alor del puerto serie, tiene el incon'eniente de que si no recibe una

    entrada salta al cabo de un tiempo ( muy escasito" y de'uel'e H, por lo que tendríamos

    que controlar el 'alor de'uelto para que no se repitiese continuamente.

    &or eso 'amos a escribir una función de uso general que nos permita recoger una cadena

    de te2to de la puerta serie sin que salga hasta que reciba un tring que 'amos a hacer

    finalice en intro. !e hecho ya 'imos este programa, aunque no como función en la

    sesión Comunicación con el e2terior 

    Btrin! &et'ine(){

      Btrin! B GG ;  i (Berial?availa2le())  {  char c Berial?read(); ;  hile ( c > LnL) //$astaAue el character sea intro  {

    B B 6 c ;  delay(.7) ;  c Berial?read();  "  return(B) ;  "  "

    !efinimos :etline(" de tipo tring, porque queremos que nos de'uel'a un te2to.

    Comprobamos que hay algo disponible en la puerta serie, y en caso afirmati'o

    construimos un tring a$adiJndole cada uno de los caracteres que leemos del puerto

    serie, hasta que encontremos un intro.

    l encontrar el intro, se cumple la condición de salida del =hile y termina la función

    de'ol'iendo la cadena construida (sin el intro".

     

    • %ormalmente convendr$ comprobar si hay algo disponible en la puerta serie antes de llamar a Getine'), y si es así, la comprobación&ue hace Getine') de tener algo disponible en el Serial seriaredundante.

    • 7ero si llam$ramos a Getine') sin comprobarlo y esta no locontrolase, &uedaríamos atrapados en esta 4unción hasta &ue alguien

    escribiera algo fnalizado con intro para poder salir y podría no sersencillo comprender el problema.

    http://http/www.prometec.net/comunicacion-exterior/http://http/www.prometec.net/comunicacion-exterior/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    68/93

    • %uevamente hemos incluido un delay de ms en el Phile paraasegurarnos de &ue Arduino no puede volver a leer mas caracteresantes de &ue a la velocidad de KL// bps haya llegado el pró8imocar$cter. Si la velocidad de comunicación es de --// bits porsegundo o m$s, se puede suprimir este retraso.

     

    El programa principal 

    .

    &odemos ya escribir nuestra función principal loop(", que llame a las funciones que

    hemos definido a lo largo de esta sesión, para determinar si un numero que le pasamos

     por la puerta serie es primo o no y en caso negati'o que nos muestre los di'isores

     primos encontrados.

    &odría ser algo así4Calculo de numeros primos en arduino4

    void loop()  {  i (Berial?availa2le())  {  Btrin! s &et'ine();  int i s?to%nt() ; //Nomo esperamos unnumero, convertimos el teIto a numero  i ( Primo(i))  Berial?println(Btrin!(i) 6 G s primo?G);

      else  {  Berial?println(Btrin!(i) 6 G o es primo?G);  Berial?println(GBus divisores son@ G);  int -ivisores(i);//=eco!emos el numero de divisores encontrados  or (int n ; n4 ; n66)//%mprimimos los divisors del -ivWX  Berial?print(Btrin!(-ivWnX) 6 G,tG);  Berial?println(G G); // +laca2ar salta de linea  "  "

      "+mpezamos comprobando si hay algo sin leer en la puerta serie y si es asi llamamos a

    :et)ine(" para que nos consiga lo que hay.

    Como :et)ine(" nos de'uel'e un tipo tring(" usamos la función estándar de rduino

    C33, s.tont(" que con'ierte el contenido tring a tipo numJrico int.

    !espuJs llamamos a &rimo(" para que compruebe este n%mero. i es primo,

    simplemente imprime un mensa*e para confirmarlo. +n caso contrario llamamos a

    !i'isores(" que busca y almacena en el array !i'DE los di'isores primos que encuentra.

    http://www.prometec.net/wp-content/uploads/2014/10/Prog_9_3.rarhttp://www.prometec.net/wp-content/uploads/2014/10/Prog_9_3.rar

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    69/93

    Cuando di'isores regresa, nos de'uel'e el n%mero de di'isores encontrados y podemos

    imprimirlos con un sencillo bucle for.

     

    Resumen de la sesión

    .

     

    o Hemos operado con arra(s de una 4nica dimensión tanto paraleer su contenido como para modi$carlo.

    o Hemos utili1ado el programa de primos como e-cusa paramostrar cómo se pueden resol+er problemas complejos/di+idindolos en otros más sencillos %ue podamos resol+er con,unciones simples.

    o Esta es/ sin duda/ una de las "abilidades cla+e para ser unprogramador competente/ ( como todo en la +ida re%uierepractica e ir trabajando.

    o  ambin "emos de$nido una ,unción de propósito generalGetLine# %ue utili1aremos más +eces en el ,uturo.

    Los pines cuasi analógicos

    Los pines analógicos

    Home Los pines cuasi analógicos

    Objetivos

    .

     

    o Comprender las di,erencias entre analógico ( digital.

    o Conocer las salidas cuasi analógicas de Arduino.

    o odulación '

     

    http://www.prometec.net/http://www.prometec.net/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    70/93

    Material requerido.

    Arduino Uno o similar. *sta sesión aceptacual&uier otro modelo de Arduino

     &na Protoboard.

    &n diodo LED.

    na resistencia de == 5"mios..

    Algunos cables de 'rotoboard..

     

     Analógico * digital 

     

    odas las se$ales que hemos mane*ado hasta ahora con nuestro rduino , de entrada o

    de salida, comparten una característica com%n4 on digitales, es decir que pueden tomar

    un 'alor #:# o )86 pero no 'alores intermedios.

    i representamos una el 'alor de una se?al digital a lo largo del tiempo 'eríamos algo

    así4

    http://www.prometec.net/categoria-producto/arduinos/http://www.prometec.net/producto/protoboard-830/http://www.prometec.net/producto/leds-de-colores-variados/http://www.prometec.net/producto/kit-de-resistencias-variadas/http://www.prometec.net/producto/cables-dupont-macho-macho/http://www.prometec.net/categoria-producto/arduinos/http://www.prometec.net/producto/protoboard-830/http://www.prometec.net/producto/leds-de-colores-variados/http://www.prometec.net/producto/kit-de-resistencias-variadas/http://www.prometec.net/producto/cables-dupont-macho-macho/

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    71/93

    +n la 'ida muchas cosas son así, apruebas o suspendes, enciendes la luz o la apagas,

     pero muchas otras son 'ariables mensurables continuas y pueden tomar cualquier 'alor

    que imaginemos, como el ángulo del relo* o la temperatura, que aun dentro de 'alores

    finitos pueden tomar tantos 'alores intermedios como podamos imaginar,

    esta clase de 'ariables las llamamos analógicas y una representación por

    contraposición a lo digital, sería algo como esto4

     

     No es raro que queramos controlar algo del mundo e2terior con una se$al analógica de

    forma que el comportamiento del sistema siga esa se$al. &odemos por e*emplo querer

    'ariar la luminosidad de un diodo )+! y no simplemente apagarlo o encenderlo

    +n esta sesión aprenderemos a en'iar se$ales analógicas a los pines de salida de

    rduino.

    ,alidas cuasi analógicas.

    #asta ahora hemos 'isto como acti'ar las salidas digitales de rduino, para encender y

    apagar un )+! por e*emplo. &ero no hemos 'isto como modificar la intensidad del

     brillo de ese )+!. &ara ello, tenemos que modificar la tensión de salida de nuestro

    rduino, o en otras palabras tenemos que poder presentar un 'alor analógico de salida.

    &ara empezar tenemos que de*ar claro que los rduino carecen de salidas analógicas

     puras que puedan hacer esto (con la notable e2cepción del rduino !-+".

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    72/93

    &ero como los chicos de rduino son listos, decidieron emplear un truco, para que con

    una salida digital podamos conseguir que casi parezca una salida analógica.

    este truco se le llama &67, siglas de &ulse 6idth 7odulation, o modulación de

    ancho de pulsos. )a idea básica es poner salidas digitales que 'arían de forma muy

    rápida de modo que el 'alor eficaz de la se$al de salida sea equi'alente a una se$al

    analógica de menor 'olta*e.

    )o sorprendente es que el truco funciona.

     

    Ii*aros en la anchura del pulso cuadrado de arriba. Cuanto mas ancho es, mas tensión

     promedio hay presente entre los pines, y esto en el mundo e2terior es equivalente a un

    'alor analógico de tensión comprendido entre H y P;. l PH] es equi'alente a una

    se$al analogica del PH] de P;, es decir S,P. i mantenemos los P; un [P] del tiempo,

    será el equi'alente a una se$al analógica de [P] de P; X ,[P ;.

    &ara poder usar un pin digital de rduino como salida analógica, lo declaramos en el

    etup(" igual que si fuera digital4

    pinMode( C, OUTPUT) ;)a diferencia 'iene a la hora de escribir en el pin4

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    73/93

    di!ital#rite(C, $%&$); //Pone 7Z en la salidadi!ital#rite(C, 'O#); //Pone Z en la salidaanalo!#rite( C, Z) ;

    analog6rite escribe en el pin de salida un 'alor entre H y P;, dependiendo de ; (que

    debe estar entre H y SPP".

    !e este modo si conectamos un )+! a una de estas salidas &67 podemos modificar su

     brillo sin más que 'ariar el 'alor que escribimos en el pin.

    &ero hay una restricción. No todos los pines digitales de rduino aceptan poner 'alores

    &67 en la salida. olamente aquellos que tienen un símbolo delante del n%mero.

    Ii*aros en la numeración de los pines de la imagen4

    solo los que lle'an simbolo

     

    • Solamente los pines ;, , L, K, -/ y -- pueden hacer 7? y simularun valor analógico en su salida.

    • Si intentas hacer esto con un pin di4erente, Arduino acepta la ordentran&uilamente, sin error, pero para valores de / a -V entiende &ue

    es y para el resto pone @FG@ y sigue con su vida satis4echo conel deber cumplido.

  • 8/17/2019 1 1 Primeros Pasos en Arduino

    74/93

     

    Modi0cando el brillo de un #E$

    .

    ;amos a hacer el típico monta*e de una resistencia y un diodo )+!, similar al de la

    sesión , pero asegurándonos de usar uno de los pines digitales que pueden dar se$ales

    &67. +n la imagen he usado el pin \.

    &odemos escribir un programa parecido a esto4

    void setup() //Pro!8181  {

    pinMode( C, OUTPUT) ;"

    void loop()

      {  or ( int i ; i4.77 ; i66)  {  analo!#rite (C, i) ;  delay( 1);  "  "

    +l )+! 'a aumentando el brillo hasta un má2imo y 'uel'e a empezar

     bruscamente. &odemos modificar un poco el programa para que la transición sea menos

    'iolenta4

    void setup() // Pro! 18.

      {pinMode( C, OUTPUT) ;

    "

    void loop(){  or ( int i :.77 ; i4.77 ; i66)  {  analo!#rite (C, a2s(i)) ;  delay( 1);  ""

    quí apro'echo ( por pura 'agancia" para hacer el ciclo de subir y ba*ar el brillo

    del )+! con un %nico bucle. )a función abs(num", de'uel'e el 'alor absoluto o sin

    signo de un n%mero num, y por eso mientras que i 'ia*a de WSPP a SPP, abs(i" 'a de SPP

    a H y 'uelta a subir a SPP. />ue os parece el