Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Principales opciones del Menú de Inicio de Arduino

Menu de Inicio de ArduinoPor Félix Maocho
21/3/2016

El Objetivo de este capítulo

Aprender ls diferentes opciones del Menú de Inicio de Arduino. Escribir en nuestro PC un programa fuente, compilarlo para obtener un programa objeto, traspasarlo a la tarjeta y ponerlo en funcionamiento.

Material necesario

Para las prácticas de este post se necesita únicamente tener el cable de conexión del PC con la tarjeta Arduino y la tarjeta controladora Arduino.

 

Puede que sea la primera vez en tu vida que te planteas escribir un programa y sientas cierta angustia, te doy la seguridad que al final de este capítulo, habrás hecho tu primer programa con pleno conocimiento de lo que estas haciendo y sin ningún género de dudas.

Pero la cosa tiene cierto truco, te voy a enseñar a escribir un programa super sencillo, para el cual los conocimientos que hay que tener son escasísimos, razón por la cual, los vas a recibir sin traumas. Tiempo tendrás de ir ampliando tus conocimientos. Comenzamos la prueba

Arduino (1)Llamar al Menú de Inicio de Arduino

Conectamos aquí donde lo dejamos la vez pasada, accediendo al Menu de Inicio de Arduino, por el simple sistema de hacer clik en su icono, que estará en la pagina principal de tu PC. Te recuerdo aquí su aspecto, y cómo poco después de pincharlo, despues de una pantalla que te avisa que se esta cargand el programa,  aparece automáticamente la pantalla que abre este capítulo.

Este es el Menú de Inicio de Arduino y como ves, tiene cosas excitas que no entenderás en absoluto

void setup(){
// put your setup code here , to run once:
}

void loop() {
// put your main code here, to run repetedly:

}

Bueno y ¿quée quiere decir esto?. Empezaré por traducirl, a ver sino vamos aclarando un poco

void setup () {
// ponga su código de configuración aquí, para ejecutar una vez:
}

void loop () {
// ponga su código principal aquí, para ejecutar repetidamente:
}

Bien, sigues sin entenderlo, pero al menos un par de linea si se entienden, porque están en español. Hay una linea que nos invita a poner algo que llama el “código de configuración” para que se ejecute una vez y más abajo otra linea que nos invita a que pongamos el “codigo principal” para ejecutar repetidamente.

¿Que es lo que hace la tarjeta Arduino?

Para entender lo anterior debe empezar por conocer que es lo que que la tarjeta Arduino puede hacer. El gran prodigio de la informática, es que un ordenador, no importa si es grande o pequeño, del famoso Spectrum, de ya lejanos años. al más moderno superordenador, no hace mas que trabajar con los caracteres 0 y 1 y sólo saben sumar, comparar si es un 1 o un 0 la cifra que le presentamos y llevar y traer un 0 o 1 a una posición de memoria.

Eso si, lo hace muy rápido, pero solo hace eso y con eso, es capaz lo mismo de mandar un robot a Marte que mandar un washApp a un amigo, o jugar a marcianitos, O sea algo muy sencillo, es capaz de realizar cosas muy complicadas y diferentes.

Pues Arduino, que no es mas que un aparato digital, e igualmente solo hace dos cosas y las hace bien y las hace de fabrica, es decir no tienes, ni puedes programarlas tu, Hacer una vez lo que le mande la función “setup” (preparar) y a continuación repetir una y otra vez lo que le mande la función “loop” (bucle). La tarjeta Arduino no hace mas, parece imposible que haciendo tan solo eso, pueda hacer cosas tan variadas pero es asi. Y como es muy importante que tengas el concepto claro te pongo el esquema de lo que hace.

Diagrama de fluoss de Arduino

arduino_flow_chart2 (1)

Nada mas encender Arduino, (Power Up Arduino), se inicia la función “setup” que se ejecuta una sola vez, para inmediatamente iniciarse la función “loop” que cuando se acaba se repite una y otra vez hasta que cortemos el suministro eléctrico. Es decir si permanece siempre encendido, se quedara repitiendo “loop” una y otra vez hasta la nausea.P¿Y esto tiene alguna gracia? – Pues asombrósamente, SI.

Entra ya que sabes lo que hace la tarjeta a entender el resto de las otras cosas

arduino_blink_diagram1

“void” quiere decir vacio,

¿Que es “void”?- “void” es una palabra reservada, es decir que sólo se puede utilizarse para cosas muy determinadas y precisas y quiere decir que la función que viene a continuación no devuelve ningún valor,

¿Que es una función?

¿Pero que es una función? – Una función es una agrupación de código, un conjunto de ordenes concretas, que realizan una tarea definida y concreta. De modo que cada vez que se ejecuten en el procesador, se realice la misma actividad.

cuadrado_peri_c3a1reaMucho me temo que este concepto no ha quedado claro. Supongamos que hemos construido un robot que queremos que haga un recorrido cuadrado de 3 unidades de lado. Cuando lo sepamos programar escribiremos lo que sea, pero en esencia hará algo como esto:

cuadrado
anda tres pasos
gira 90 º a la derecha
anda tres pasos
gira 90 º a la derecha
anda tres pasos
gira 90 º a la derecha
anda tres pasos
gira 90 º a la derecha

Cada vez que el procesador del robot recorra la función “cuadrado··, el robot andará una ruta que es un cuadrado de lado 3. Hemos definido un módulo o función llamado “cuadrado” que contiene las instrucciones para hacer andar al robot un cuadrado cuando nos venga bien. De forma similar podíamos definir acciones como “triangulo” “rectangulo” o “dodecágono” que obligaran al robot a seguir determinadas figuras geométricas. ¿queda c mas claro cual es el concepto de “funcion”, una agrupacion de instrucciones para realizar un accion determinada.

Función con parámetros de entrada

Sin embargo, esto tiene una pega, si el cuadrado que tenemos que hacer en vez de tres unidades fuera de cuatro, tendríamos que volver a escribir todo el proceso. ¿No habría una forma de generalizar el sistema? – Pues si lo hay, y se llama utilizar “parámetros de entrada”.

Escribamos la funcion de nuevo como indico

cuadrado (n)
anda “n” pasos
gira 90 º a la derecha
anda “n” pasos
gira 90 º a la derecha
anda “n” pasos
gira 90 º a la derecha
anda “n” pasos
gira 90 º a la derecha

Hay un procedimiento para generalizar la acción de un función, que consiste en introducir parámetros desde el encabezamiento de la función al interior de la función de modo que el efecto realizado cambien acción a realizar de acuerdo con el valor de los “parámtros de entrada”.

En el ejemplo del cuadrado, basta mandar un sólo parámetro, el valor del lado del cuadrado, pero en otros casos, como por ejemplo, si quisiéramos que el robot andase paralelogramos, habría que pasar dos parámetros, pues habría que indicar el valor del lado mayor y el del menor.

Parámetros de salida.

Claro está, que estas funciones que hemos hablado hacen una actividad y finalizan su trabajo, pero hay otras funciones, que ademas realizan un actividad, en la que tienen que devolver un valor al finalizar. Por ejemplo en nuestro caso, podíamos necesitar saber lo que ha andado el robot, por lo que la función seria algo as-i:

camino cuadrado(n)
anda n pasos
gira 90 º a la derecha
anda n pasos
gira 90 º a la derecha
anda n pasos
gira 90 º a la derecha
anda n pasos
gira 90 º a la derecha
camino = 4 n
Retorna camino

En alguna parte de la función “cuadrado”, se calcularía lo andado y se manda retornar a la cabecera el importe calculado. ”camino” recibiría al final de ejecutar la función el valor de la longitud de la ruta.

Una función es algo muy cómodo, porque costará mas o menos escribirla, pero una vez escrita y probada, se puede guardar en una “librería de funciones” y cuando en cualquier programa se necesite realizar la misma acción, la buscamos en la “librería” y la volvemos a utilizar, con la ventaja de que sabemos que está ya probada, es decir, sabemos que está bien escrita y que hace lo que se espera.

Con ello programamos mucho màs rápido y seguro y ademas, nos podemos aprovechar de lo que otro han escrito, copiando sus “librerías”. Te alegrara saber que a parte de una librería estándar de funciones que vienen con Arduino, (y que ya te has bajado a tu ordenador, con el software de Arduino), hay muchas librerías que te puedes bajar gratuitamente, que contienen funciones especializadas en áreas concretas, como pueden ser, las telecomunicación, funciones trigonometricas o logaritmicas, funciones para generar musica, o de manejo de imágenes y casas así.

Sintaxis genérica de una función

Así pues, recapitulamos un poco, una función en su forma más genérica tiene esta forma de escribirse, (o utilizando la terminología técnica, tiene esta sintaxis)

resultado nombrefuncion(parametros_entrada)

pero esta sintaxis corresponde a la forma mas general de escribir una función, que abarca también a aquellas funciones que como la primera que vimos, no necesita parámetros de entrada. En cuyo caso tendrán la forma reducida, donde los dos parentesis “()” indican que no hay parámetros de entrada

resultado nombrefuncion()

ye incluso habrá casos que ni tiene parámetros de entrada, ni de respuesta de salida lo que avisamos poniendo como respuesta “void” (vacio), es decir que no devuelve nada.

void nombrefuncion()

Asi pues, ya estamos en condiciones de entender lo que inicialmente nos parecía críptico y sin sentido, Arduino llama de fábrica consecutivamente a dos funciones una que se llama “setup” (preparar) que la llama un sola vez y otra función que llama repetidas veces que se llama “loop” (bucle) y ambas funciones ni precisan que se las introduzcan parámetros por eso se pone “()” ni devuelven ningún valor por eso las antecede “void”

Aun queda por explicar alguna cosa, como es que en Arduino se indica que el contenido que componen las instrucciones que tiene la función, marcando cuando empieza y cuando acaba con “corchetes”, comienza con un corchete de apertura “{“ y acaba con un corchete de cierre “}“

Estos corchetes se encuentran en el lado derecho del teclado de la linea de teclas que contiena a la izquierda “a”y “s”, en los mismos caracteres que “´´” y “ç” y para escribirlos, igual que ocurre con el carácter “@” hay que tener pulsada la tecla “Alt Gr” a la vez que se da ala tecla correspondiente.

Bien, ya casi somos capaces de comprender lo que dice eso que aparece en la pantalla

void setup(){
// put your setuo code here , to run once:

}

Esta clarisimo funcion “setup” que no tiene paranetros de entrada, “()”· y ni devuelve ningún valor,  “void” que contine la siguiente instrucciones

// put your setup code here , to run once:
(// ponga su código de configuración aquí, para ejecutar una vez:)

la doble barra “//” (7 mayuscula) avisa a la maquina que lo que bien a continuación es un “comentario”, un texto que no esta escrito para la máquina, sino para que los humanos se enteren. Por ello, sea lo que sea lo que haya escrito después de “//” al compilar la función, (crear el fichero objeto, que es el que entiende la máquina). se elimina y no se compila, lo que tiene un ventaja, podemos documentar profusamente nuestras funciones sin que ello ocupe espacio en el fichero final por que el compilador lo va a eliminar.

Bien volvamos a nuestra inicial criptica funcion y ademas como igual da lo que pone a la derecha de la doble barra, lo ponemos en español para que quede mas claro.

void setup () {
// ponga su código de configuración aquí, para ejecutar una vez:

}

void loop () {
// ponga su código principal aquí, para ejecutar repetidamente:

}

¿Lo entiende ahora perfectamente? – Pues pasemos a hacer lo que amablemente nos piden.

¿Que es lo que se pone en la función “setup”?

En la función “setup” (preparar) se ponen instrucciones para PREPARA la tarjeta Arduino para que funcione como nosotros queremos, Con las debidas instrucciones podemos cambiar el funcionamiento interno de la tarjeta, igual que si cambiáramos físicamente las conexiones eléctricas, Esto permite por ejemplo que algunos de los pines, (enchufes de la tarjeta), puedan lo mismo actuar para enviar corriente eléctrica (como si fueran pequeños enchufes de la luz), que para medir la intensidad de corriente que hay en algún punto de un circuito al que se conecten. De esa forma podremos saber que por ese circuito pasa o no corriente.

O sea, con la funcion “setup”, construimos físicamente a tarjeta Arduino de acuerdo a nuestras necesidades, igual que si cableáramos a mano la tarjeta como nos conviene. Claro está, ESO SE HACE lo primero de todo, antes de empezar realmente a ejecutar el programa y (al menos por ahora) UNA SOLA VEZ. Iniciado el funcionaniento de la tarjeta, queda configurada como queramos, pero durante la ejecución del programa, no se puede cambiar, (salvo contadas excepciones que iremos viendo).

¿Que es lo que se puede configurar?

De fabrica todos los pines operativos vienen pensados para medir voltajes, porque es la forma que mejor se protege a la tarjeta de descargas eléctricas accidentales, puesto que está por defecto demodo que queda preparada para medir voltajes es decir recibir descargas, pero por programa se puede hacer que esos pines, actúen como lugares de salida de corriente eléctrica. Eso es lo principal que se hace en la función “setup·, pero algunos pines pueden hacer más cosas, como veremos en su momento y aquí es donde se avida a la Tarjeta Arduino que utilizaremos esas posibilidades..

¿Que se hace en el “loop”?

Fundamentalmente podemos hacer como si manejáramos un cuadro de interruptores eléctricos,  encender o apagar la corriente eléctrica qie sale por los pines que hemos configurado como de salida. Esta labor de encender y apagar suele venir condicionada por cosas que ocurran, Por poner un ejemplo, si un robot choca con un objeto, un sensor detecta el choque y cierra un circuito, un pin medirá que ha aumentado el voltaje y ello es señal que hay que mandara a otro pin, que mueve un motor, que pare y posteriormente, mandar a otro que ande un poco marcha atrás. Aunque no lo crea, pronto será capaz de programar algo así.

Primer programa a hacer

Bien sabido lo que se puede hacer, veamos que es lo que intentamos hacer en muestro primer programa. Tradicionalmente el primer programa que se hace en Arduino es hacer una luz intermitente.

Singulridad del pin13

Utilizaremos el pin13. Este pin es diferente a los demás, porque tiene un pequeño led marcado como L en la propia tarjeta Arduino, de modo que cuando mandemos salir corriente por el pin13 se encenderá el led y cuando no salga el led se mantent¡eme apagado. Asi. que sin mayores complicaciones, podemos observar lo que pasa por el pin13

Definiremos pues el pin13 como de salida. Para ello tendremos que decir a Arduino que se prepare (setup) para sacar engergía por el PIN13 y luego en el bucle le mandaremos “encender “, esperar, “apagar”, esperar y volver a repetir (loop). De esta forma el led que esta en la tarjeta se enciende y se apague intermiténtemente.

Veremos que en el interior de las cajas que representan las funciones han aparecido una serie de lineas que seguinos sin entender demasiado bien. pero que aun así, sabemos lo que van a hacer, en la funcion “setup” un mandato “pinMode” preparar un pin para sacar energía (OUTPUT) y en la funcion “loop” un mandato “digitaWrite” encender o poner voltaje en alto (HIGH) el pin que hemos preparado en “setup” como de salida o OUTPUT, otro mandato “delay” para un tiempo (1000 milisegundos) el proceso, para luego poner el voltaje en bajo en el mismo pin (LOW) y esperar otros 1000 milisegundos.

El programa (que suelen llamar sketch) que escribimos es el siguiente

void setup() {
// código de configuración, PIN13 como SALIDA, para ejecutar una vez
pinMode(13, OUTPUT);
}

void loop() {
// código principal, encender, esperar, apagar, esperar
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

Dentro de cada uno de las funciones que recorre Arduino de forma automática hemos puesto unas funciones estandard que nos han dado en la libreria de software estandard de Arduino que nos bajamos de al red.

En la funcion “setup” (preparar)

Función “pinMode”

Untilizamos la funcion “pinMode” que prepara un pin digital como se le mande, que puede ser de dos formas, de salida (OUPUT) o entrada (INPUT ). Como “OUPUT” queda preparado para dejar salir corriente continua eléctrica a 5 Voltios cuando se lo mandan y no enviarla cuando se lo pidamos. Como “INPUT”, puede medir si por otro circuito pasa corriente , (si por ese circuito pasa electricidad o no), e informar de ello a la tarjeta, (pero eso lo veremos en otro capítulo).

La funcion “pinMode” (que puede traducirse como, “tipo_de_ pin”), tiene la siguiente sintaxis

pinMode(pin,mode)

el nombre de la funcion es “pinMode” escrito exactamente así, Arduino diferencia entre minúsculas y mayúsculas y si no se escribe exactamente así no lo entienden. Esta función vale para preparar o configurar los “enchufes” digitales o pin digitales de dos formas posibles como como punto de suministro de energía (OUTPUT) o como punto capaz de medir si por un circuito hay voltaje o no lo hay (INPUT). Utiliza dos parámetros de entrada, el primero, es el número del pin que deseamos activar, en nuestro caso el 13 y separado por una como el modo o forma en que queremos ponerlo, solo hay dos posibles OUTPUT (salida) o INPUT (entreda)

Esta funcion no devuelve ningun valor al sistema por lotanto en principio deberia venir encabezada por la palabra “void”, pero (una incongruencia) la funciones standard de Arduino cuando no devuelven nada no ponen nada delante.

Por último cuando acabamos de escribir una función, se lo indicamos a la máquina escribiendo puinto y como “:” como separador, un error muy corriente es que se nos olvide ponerlo en cuyo caso la máquina entiende que hay detrás mas cosas, se lía y da un error.

En este ejemplo ya no tenemos que preparar más, por tanto hemos acabado con la función “setup “. Asi pues la funcion “setup” completa ya es puramente comprensible (espero)

void setup() {
// código de configuración, PIN13 como SALIDA, para ejecutar una vez
pinMode(13, OUTPUT);
}

En la funcion “loop” (bucle)

Utilizamos por dos vees dos funciones diferentes, la función “digitalWrite” y la función “delay”.

Función “digitalWrite”

“digitalWrite” actúa igual que lo hace un interruptor de la luz eléctrica, podemos permitir el paso de la corriente o podemos cortar la luz.

La funcion ““digitalWrite” (que puede traducirse como, “escribe-digital”), tiene la siguiente sintaxis

digitalWrite(pin, value)

el nombre de la función es “digitalWrite” escrito exactamente así, y utiliza dos parámetros. El primero es el número del pin al que nos referimos, en nuestro caso el 13 y que necesariamente ha de haber estado previamente configurado como “OUPUT” en la función “setup”. Separado por una como la acción que queremos que ejecute, si queremos que salga corriente escribimos (HIGH = alto), o si queremos que no salga, (LOW = bajo). pues estas palabras reservadas del sistema se refiere al nivel de voltaje que tendrá el circuito, que se inicia en el pin indicado, 5 voltios en HIGH (en la tarjeta model Arduino UNO, las hay que solo producen 3,5 volts) y 0 voltios en LOW.

Nosotros en este ejemplo primero queremos encender la luz y luego apagarla, por lo tanto primero lo utilizaremos el parámetro “HIGH” y posteriormente lo apagaremos utilizandola con el parámetro “LOW”

Función “delay”

“delay” paraliza el avance del programa, (puede traducirse como, “retrasar”), tiene la siguiente sintaxis

delay(ms)

Aunque Arduino dista de ser una maquina rápida comparada con un PC, es aun muy rápida para el hombre, con el “delay”· podemos hacer pausas que nos permitan percibir por ejemplo que una luz se enciende y se apaga, porque si lo hiciéramos así la frecuencia de parpadeo sería tan rápida que no llegaríamos a percibirla.

La función utiliza un solo parámetro, pero a diferencia de los anteriores /excepto el número de pin), que eran solo  palabras reservadas del sistema como, “INPUT” y “OUPUT”, o “HIGH” y “LOW”. Aquí podemos utilizar cualquier numero entero y indicará el tiempo en milisegundos (“ms”) que queremos dejar parado el sistema, en nuestro caso pararemos un segundo, (1000 ms), después de encender la luz y otro segundo después de apagarl0, pero podiamos haber puesto cualquier otra cantidad entera como 1200 milisegundos o 732 nilisegundos, lo que nos viniera mejor en nuestro caso.

Como siempre cuando acabamos de escribir una función, se lo indicamos a la máquina escribiendo punto y como “:” como separador.

Ya podemos escribir la función “loop“. Asi pues la funcion “loop” completa ya es puramente comprensible (espero)

void loop() {
// código principal, encender, esperar, apagar, esperar
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

Bien esto es el programa completo o Sketch que tenemos que escribir en el Menú de inicio de Arduino.

Lo más cómodo y evita errores es que haga “copiar y pegar”, sobre la función completa y lo traslades totalmente a tu pantalla del Menú de Arduino sustituyendo lo que hay,Para facilitartelo. La reescribo a continuacion al completo. Tienes que tener en cuenta de copiar dede la primera palabra “void” de la funcion “setup”, al último signo que es la llave de cierre de la función “loop” o sea el símbolo “}”

void setup() {
// código de configuración, PIN13 como SALIDA, para ejecutar una vez
pinMode(13, OUTPUT);
}

void loop() {
// código principal, encender, esperar, apagar, esperar
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

De modo que la pantalla de su Menu Princuipal de Arduino tendrá ahora un aspecto Más o menos como este.

menu principlal sketch

Observarán como palabras reservadas del sistema como “void” “OUTPUT” “HIGH” y “LOW” aparecen en azul los nombres de las funciones de Arduino “pinMode” “digitalWriter” “delay” aparecen en marrón y los textos libres tanto comentarios como los parámetros “13” y “1000” aparecen en negro. Esto es porque la pantalla del menu donde escribinos inicia un proceso de identificación del texto que vamos escribiendo.

Sketch de Ardunino

Bien, esto que ven aquí. es un programa o Sketch, muy sencillo pero completo, obligatoriamente tiene una función “setup” y una funcion “loop”. Sin embrago este es un “programa fuente” algo que entiende con poca dificultad cualquier humano que trabaje con Arduino, pero que para la máquina es indescifrable, porque la máquina solo entiende de ceros y unos y direcciones de memoria.

Si pinchamos en la barra de menu superir ahí donde dice “Archivo”. Se despliega un submenú que indica todo lo que podemos hacer con el archivo:

menu principlal sketch 2

Con las siguientes opciones:

  • Nuevo.- enpezar otro archivo
  • Abrir .- abrir un archivo que hayamos guardado previmente
  • Abrir reciente .- uno de los últimos que hemos guadado
  • etc….

Nosotros lo primero que vamos a hacer es guardar el sketch que hemos escrito. Por tanto elegimos la opción “Salvar” que nos lleva automáticamente y por defecto a la carpeta Arduino que hicimos para bajar los programas de Arduino, (que aconsejo utilizar), donde podremos guardar el fichero que aconsejo previamente titular, (como yo he hecho), como “Sketch 1 Intermitente” para que más adelante sepamos encontrarlo y luego aprietas a la tecla “Guardar”

menu principlal sketch 3

Si vuelve a repetir el proceso de inchar en “Archivos” vera que se ha producido un cambio sutil

Si pincha en “Salvar” aparentemente no pasa nada, pero si que pasa, automáticamente se reescribe el fichero sobre el que había, aunque como en este caso no hemos cambiado nada no hay forma de demostrarlo. Pero si pinchas en “Guardar como” le vuelve a sacar la pantalla de antes porque le da la posibilidad de guardar los cambios hechos sin machacar los anteriores (por ejemplo si quiere hacer una versión ligeramente diferente del sketch) .

menu principlal sketch5

Pero verás que aparece una carpeta que antes no tenía que precisamente se llama “Sketch 1 Intermitente” el nombre que dimos al programa, que si busca lo que tiene dentro, pinchando encima de ella, verá que tiene un único fichero que se llama “Sketch_1_Intermitente” y es del tipo Arduino file

menu principlal sketch6

Así pues, cada vez que guardamos un nuevo sketch con “Salvar”. automáticamente en la carpeta por defecto Arduino. se abre una nueva carpeta con el nombre que henos dado al sketch y en ella se deposita un “fichero fuente” que lógicamente con las opciones de menú “Abrir” o “Abrir Reciente” podemos recuperar para modificar, copiar etc.

Programa Objeto

Como dije, este “Programa fuente”, es solo para que los lean y escriban los humanos, las máquinas y algunos superespecialistas, son los que leen programas formados por ceros y unos direcciones de memoria. Afortunadamente el trabajo de generar un “programa objeto” a partir de un “programa fuente” se hace automáticamente por un proceso que se llama “compilación”, que principalmente consiste en sustituir las funciones estándar de Arduino por complejas instrucciones de ceros y unos que hacen digitalmente lo que indican las funciones y eliminar los comentarios, porque la máquina para nada los necesita.

Si pinchas en la barra de menú en la opcion “Programa” se despliega otro submenú que tiene

menu principlal sketch7

La primera linea dice “Verificar/Compilar”, esa es nuestra opción, lo que va a hacer automáticamente , (¡gracias a Dios!), es primero comprobar que no hemos cometido ningún error al escribir, por ejemplo poner una minúscula donde debería ir una mayúscula o nos hemos olvidado de un “;” d final de una linea, o pusimos un punto para separar los parámetros en vez de una coma. Si la maquina encuentra algo que e resulta inesperado y no entiende, se para el proceso y envía un mensaje de error para “ayudarte” a corregirlo. Desgraciadamente la Inteligencia Artificial, está aun muy por detrás del desarrollo de la informática y con excesiva frecuencia el mensaje no es acertado e incluso en ciertos caso te lleva más a despistarte que a orientarte para corregir el error, como por desgracia tendrás ocasión de comprobar en tus propias carnes mas adelante cuando intentes hacer algo.

Para que vean lo que les digo es cierto, en la primera versión del programa que he hecho, se me escapó en la linea que aparece en fondo rosa poner dos puntos “:” en vez de punto y como “;” y el programa al de verificación al llegar a esa línea la ha marcado en rojo y en la parte de abajo indica claramente:

menu principlal sketch8

expecte ‘;’ before ‘:’ token (esperaba ‘;’ antes del simblo ‘:’ )

Como ven el mensaje ideal seria, “Se ha confundido y ha puesto ‘:’ en lugar de ‘;’ “ y más aun puesto que es obvio que la misma máquina sustituyera loa “:” por el “;”, pero esto es lo que hay (al menos de momento).

Como corregí el error, si has copiado íntegramente el texto, incluida la última llave de cierre de “loop” “}” , lo razonable es que llegues a una pantalla como esta

menu principlal sketch9

en la que al pie de la pantalla diee en un razonable correcto castellano:

“El Sketch usa 1.030 bytes (3%) del espacio de almacenamiento de programa. El máximo es 32.256 bytes. Las variables Globales usan 9 bytes (0%) de la memoria dinámica,”

O sea que todo ha ido bien y que el programa solo ocupa un 3% del espacio pasible, es decir que sketch muchísimo mas complicados que el presennte caben en tu tarjeta Arduino, solo que, (al menos de momento), la tarjeta Arduino, a diferencia de lo que ocurre en el PC donde podemos guardar muchos sketch , sólo admite un programa en su memoria. Si hay uno y se introduce otro, el primero se borra, desaparece y queda el segundo sustituyendo al que había,otro como veremos en otros capítulos.

Subirlo a la Tarjeta.

Conviene que la tarjeta esté físicamente conectada al PC antes de llamar al Menu principal de Arduino. La razón es que si no es así, podemos tener problemas de identificación del puerto serie o puerto com que nos adjudica el PC.

La forma más sencilla de hacer que los controladores están instalados correctamente, es llamar al Menú de inicio con la placa Arduino previamente conectado al ordenador. Por ello, pido que conectes tu tarjeta al pc y cierres la pantalla del Menú de Arduino, (como has guardado el programa no se perderá) y la vuelvas a abrir nuevamente, o sea, la tradicional chapuza informática de, “apaga y vuelve a empezar”, porque es en la instalación del Menú y teniendo enchufada la Tarjeta Ardunino a un puerto USB, es cuando todo se instala correctamente. Asi que vamos a hacerlo ahora para evitar tener problemas a la hora de “subir” el “programa Objeto” a la tarjeta

Cierre la pantallas de Menú de Inicio de Arduino

Como primera medida Cierre la pantalla de Menú de Inicio de Arduino, pinchando en la X de la esquina superior derecha, La pantalla debe desaparecer de su ordenador.

Conectar la Tarjeta

cable-usb-impresora-ab-hp-brother-epson-xerox-samsung-15mt-22881-MLA20237789084_022015-FCon la tarjeta nos han debido dar un cable con dos terminales macho USB algo diferentes, uno más plano que es el que se conecta al ordenador y otro más cuadrado que se conecta a la tarjeta, tal como se ve eb esta fotografía.

El cable USB tiene por dentro cuatro hilos diferentes, dos de ellos son los que proporcionan corriente continua a la tarjeta uno de ida a 5Voltios y la “tierra” a cero voltios para el retormo. Los otros dos hilos son los que permiten comunicarse al PC con la tarjeta, uno, (TX) es para transmitir los datos y otro (RV) para recibirlos. Por lógico el extremo TX de un lado, acaba en el extremo RX del otro, pues si uno transmite, el otro recibe, el cable ya esta montad de forma que internamente se cruzan los hilos como conviene, por tanto es algo que no nos tenemos que preocupar. Sólo saber que por esos dos hilos, es por los que dialogan automáticamente el Ordenador y la Tarjeta, y es por donde va a pasar el “fichero objeto” que creamos en el ordenador a la tarjeta.

Conecta Arduino

Ahora enchufe físicamente la Tarjeta Arduino al PC, observara que se produce el ruidito típico de haber detectado el PC que se le ha unido un dispositivo USB. Hay un piloto en Tarjeta Arduino, situado en la parte inferior de la imagen, cerca de una de las perforaciones que se usan para sujetar la tarjeta a un soporte, que viene marcado como “ON” Al euchufar la tarjeta al PC, lo primero que hace es recibir energía a 5 voltios y el piloto ON lo indica brillando (en mi caso), una luz de color verde.

tarjeta arduimo_bb

Vuelva a llamar al programa Menú de Inicio de Arduino

Con la tarjeta enchufada vuelva a cargar el Menü de Inicio de Ardunio, verás que aparece una pantalla intermedia, que informa que esta cargargando el programa Menú y además selecciona correctamente el puerto com.

Ahora despliega el submenu “Archivo” y elige la opción “Abrir Reciente” que le debe llevar a otro submenú donde encontrara el programa que guardó “Sketch_1_Intermitente”

Aparecerá una nueva pantalla con el contenido del “programa fuente” que previamente guardamos. Compile primeramente el “programa fuente” como le indicamos antes, es decir seleccionando en el submenú “Programa” la opción “Verificar/Compilar” y vera que nuevamente se le genera el “Programa Objeto” sin problemas, si una vez lo hizo y no ha cambiado nada, tiene que poderse hacer otra vez.

“Subir” el programa a la tarjeta Arduino

Se demomina “subir” el programa lo que en la realidad es copiarlo en la memoria de la tarjeta. Fijémonos ahora en la tarjeta. Verán colocadas detrás de la entrada USB y cerca del logotipo de Arduino, tres pequeñas luces blancas (leds). Las más centrales viene marcadas coma RX y TX y la que está a su derecha solo solo tiene una L.

Las luces TX y RX se encienden cuando se están enviando datos por el cable y si todo va bien, han de parpadear cuando nuestro programa esté siendo transferido al ordenador. La otra luz marcada L es un pequeño piloto asociado al pin13, algo que solo tiene este pin, que luce siempre que se mande salir energía por ese pin.

En nuestro caso parpadeara porque estamos mandando enceder y apagar el pin 13 intermitentemente. Vamos a verlo

Ha de estar atento porque la cosa solo dura unos segundos. Cuando seleccione ahora en el submenu “Programas”, la opcion “Subir” enviaras automáticamente el “Programa Objeto” por los cables de comunicación Tx y RX y los ledes correspondientes a las comunicaciones parapadearán debido al diálogo automático que se establece entre el PC y la Tarjeta para instalar el programa objeto dentro del procesador de la Tarjeta

Finalizado el proceso que solo dura un segundo, el programa se inicia automáticamente y el led L empezará a b parpadear como muestra la filmación. Tu primer programa ha acabado y hace lo que estaba previsto que hiciera.

Posiblementee tendrás que verla varias veces porque todo resulta muy rápido. Inicialmente todas l0s led están apagados excepto el led ON que es de color verde y se encuentra a la derecha de la imagen que permanecerá permanentmente enciendido por que indica que la Tarjeta esta recibiendo corriente eléctrica.

Pasado el primer segundo se encienden los dos led el  RX y TX que indican que el programa se está transfiriendo a la tarjeta. Poco después se apagan y comienza a parpadear el led L, lo que indica que nuestro programa gha sido un éxito, eso es lo que pretendíaamos

¿Y eso es todo?

Si, eso es todo, pero no es más que el comienzo. He querido demostrate que serias u capaz de escribir un programa y hacer que funcionara convenientemente en la tarjeta.  Te aseguro que tan solo en el siguiente capítulo te quedarasasombrado de lo que ya eres capaz de hacer y de lo rápido que progresas.

 

Como repaso final te diré lo que has aprendido hoy

  • El objetivo del programa era familiarizarte con las principales opciones del Menú de Inicio de Arduino. Has aprendido lo siguiente:
  • A abrir em Menú naciendo clik en su icono y a cerrarlo haciendo clik en la esquina de su pantalla.
  • A escribir los “programas fuentes” en la pantallas
  • A comprobar y compilar los “Programas Fuentes” y obtener los “Programas Objeto”
  • A “subir” los “Programas Objeto” y a que funcionen en la Tarjeta.

Adicionalmente has aprendido lo siguiente:

  • Qué es un “sketch” o programa de Arduino
  • Cuál es el flujo de un Sketch, que Arduino realiza automáticamente
  • Qué es una función y que son los parámetros de entrada y salida
  • Para qué vale la funcion “setup”
  • Para qué vale la funcion “loop”
  • Para qué vale la funcion “pinMode” y cual es su sintaxis
  • Para qué vale la funcion “digitalWrite” y cual es su sintaxis
  • Para qué vale la funcion “delay” y cual es su sintaxis
  • Qué indican los parametros estandard “void”, “OUTPUT”, “INPUT”, “HIGH” y “LOW”
  • Quñ significan las dos barras “//” y lo que es un comentario y para que se utiliza

Si alguno de los conceptos que indicom no lo tienes suficientemente claro, repasa la parte del texto correspondiente, porque en el próximo capítulo vas a tenerlos que utilizar con mucha frecuencia y ahi ya no los voy a explicar con el detalle que lo hago aqui.

Félix Maocho

indice

Anuncios

21 marzo 2016 - Posted by | Curso de Arduino, Robotica | ,

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: