Archivo de la etiqueta: Programación

Estructuras de Control

En programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:

  • De acuerdo con una condición, ejecutar un grupo u otro de sentencias (If-Then-Else)
  • De acuerdo con el valor de una variable, ejecutar un grupo u otro de sentencias (Select-Case)
  • Ejecutar un grupo de sentencias mientras se cumpla una condición (Do-While)
  • Ejecutar un grupo de sentencias hasta que se cumpla una condición (Do-Until)
  • Ejecutar un grupo de sentencias un número determinado de veces (For-Next)

Todos los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis; cada lenguaje tiene una sintaxis propia para expresar la estructura.

En Visualino las estructuras de control se encuentran en el apartado “control”:

Estructuras de decisión

if:  es un estamento que se utiliza para probar si una determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima de un cierto número, y ejecutar una serie de declaraciones (operaciones) que se escriben dentro de llaves, si es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/if/

if… else:  viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es baja.

else: puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a cabo dependiendo de la condición probada.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/else/

Tutorial if() – Comparar el valor leido de un potenciometro con un umbral y encender un led si el valor leido es mayor que el umbral https://www.arduino.cc/en/Tutorial/ifStatementConditional

Uso de if con Visualino

Para ampliar más información sobre if…else en Arduino, ver este fantástico artículo de Luis del Valle https://programarfacil.com/blog/arduino-blog/if-else-arduino/

switch..case: Al igual que if, switch..case controla el flujo del programa especificando en el programa que código se debe ejecutar en función de unas variables. En este caso en la instrucción switch se compara el valor de una variable sobre los valores especificados en la instrucción case.

break es la palabra usada para salir del switch. Si no hay break en cada case, se ejecutará la siguiente instrucción case hasta que encuentre un break o alcance el final de la instrucción.

default es la palabra que se usa para ejecutar el bloque en caso que ninguna de las condiciones se cumpla.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/

Uso de switch con Visualino

Tutorial Switch-case – Leer una fotorresistencia y en función de unos valores predefinidos imprimir la cantidad de luz en 4 valores: noche, oscuro, medio, claro https://www.arduino.cc/en/Tutorial/SwitchCase

Estructuras de repetición

for: La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (;). La inicialización de la variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.

Cualquiera de los tres elementos de cabecera puede omitirse, aunque el punto y coma es obligatorio. También las declaraciones de inicialización, condición y expresión puede ser cualquier estamento válido en lenguaje C sin relación con las variables declaradas.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/for/

Tutorial for() – efecto con leds coche fantastico https://www.arduino.cc/en/Tutorial/ForLoopIteration

while: Un bucle del tipo while es un bucle de ejecución continua mientras se cumpla la expresión colocada entre paréntesis en la cabecera del bucle. La variable de prueba tendrá que cambiar para salir del bucle. La situación podrá cambiar a expensas de una expresión dentro el código del bucle o también por el cambio de un valor en una entrada de un sensor.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/while/

Tutorial while() – calibrar el valor de un sensor analógico https://www.arduino.cc/en/Tutorial/WhileStatementConditional

do..while: El bucle do while funciona de la misma manera que el bucle while, con la salvedad de que la condición se prueba al final del bucle, por lo que el bucle siempre se ejecutará al menos una vez.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/dowhile/

goto: transfiere el flujo de programa a un punto del programa que está etiquetado.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/goto/

break: se usa en las instrucciones do, for, while para salir del bucle de una forma diferente a la indicada en el bucle.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/break/

continue: se usa en las instrucciones do, for, while para saltar el resto de las instrucciones que están entre llaves y se vaya a la siguiente ejecución del bucle comprobando la expresión condicional.

Referencia Arduino: https://www.arduino.cc/reference/en/language/structure/control-structure/continue/

En Visualino están disponibles todas las estructuras de repetición

Y por su puesto ante cualquier duda: https://www.arduino.cc/reference/en/

Anuncios

Programación Arduino

¿Qué es la programación/lenguaje de programación?:

El lenguaje de programación de Arduino es C++. No es un C++ puro sino que es una adaptación que proveniente de avr-libc que provee de una librería de C de alta calidad para usar con GCC (compilador de C y C++) en los microcontroladores AVR de Atmel y muchas utilidades específicas para las MCU AVR de Atmel como avrdude: https://learn.sparkfun.com/tutorials/pocket-avr-programmer-hookup-guide/using-avrdude

Las herramientas necesarias para programar los microcontroladores AVR de Atmel son avr-binutils, avr-gcc y avr-libc y ya están incluidas en el IDE de Arduino, pero cuando compilamos y cargamos un sketch estamos usando estas herramientas.

Aunque se hable de que hay un lenguaje propio de programación de Arduino, no es cierto, la programación se hace en C++ pero Arduino ofrece unas librerías o core que facilitan la programación de los pines de entrada y salida y de los puertos de comunicación, así como otras librerías para operaciones específicas. El propio IDE ya incluye estas librerías de forma automática y no es necesario declararlas expresamente. Otra diferencia frente a C++ standard es la estructuctura del programa que ya hemos visto anteriormente.

Toda la información para programar Arduino se encuentra en el reference de la web de Arduino: https://www.arduino.cc/en/Reference/HomePage. Este es el core o API de Arduino.

Lenguaje de programación C++

Es posible usar comandos estándar de C++ en la programación de Arduino siempre que estén incluidos en el avr libc:

Características de C:

  • Es el lenguaje de programación de propósito general asociado al sistema operativo UNIX.
  • Es un lenguaje de medio nivel. Trata con objetos básicos como caracteres, números, etc… también con bits y direcciones de memoria.
  • Posee una gran portabilidad
  • Se utiliza para la programación de sistemas: construcción de intérpretes, compiladores, editores de texto, etc

Un buen libro de referencia para C:

Y un libro que se puede descargar gratuitamente Essential C: http://cslibrary.stanford.edu/101/EssentialC.pdf

Por supuesto en Internet hay muchas webs de referencia donde consultar dudas a la hora de programar en C++:

C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.

Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma. Actualmente existe un estándar, denominado ISO C++.

C# es un lenguaje propietario de Microsoft que mezcla las características básicas de C++ (no las avanzadas) simplificandolas al estilo Java y ofreciendo un framework. C# forma parte de la plataforma .NET

Elementos básicos en la programación de Arduino

Un manual sencillo de entender para la programación es el “arduino programming notebook” de brian w. Evans. Puedes consultarlo o descargarlo desde:

Cuando compilamos y cargamos el programa en Arduino esto es lo que ocurre:

{} entre llaves

Las llaves sirven para definir el principio y el final de un bloque de instrucciones. Se utilizan para los bloques de programación setup(), loop(), if.., etc.

Una llave de apertura “{“ siempre debe ir seguida de una llave de cierre “}”, si no es así el compilador dará errores. El entorno de programación de Arduino incluye una herramienta de gran utilidad para comprobar el total de llaves. Sólo tienes que hacer click en el punto de inserción de una llave abierta e inmediatamente se marca el correspondiente cierre de ese bloque (llave cerrada).

Usando programación mediante bloques las llaves no son necesarias ya que todo lo que está dentro de un bloque ejecutar, es lo que va entre llaves.

; punto y coma

El punto y coma “;” se utiliza para separar instrucciones en el lenguaje de programación C. También se utiliza para separar elementos en una instrucción de tipo “bucle for”.

Nota: Si olvidáis poner fin a una línea con un punto y coma se producirá en un error de compilación.

/*… */ bloque de comentarios

Los bloques de comentarios, o comentarios multi-línea son áreas de texto ignorados por el programa que se utilizan para las descripciones del código o comentarios que ayudan a comprender el programa. Comienzan con / * y terminan con * / y pueden abarcar varias líneas.

Debido a que los comentarios son ignorados por el compilador y no ocupan espacio en la memoria de Arduino pueden ser utilizados con generosidad.

En Visualino no es posible poner comentarios.

// línea de comentarios

Una línea de comentario empieza con / / y terminan con la siguiente línea de código. Al igual que los comentarios de bloque, los de línea son ignoradas por el compilador y no ocupan espacio en la memoria. Una línea de comentario se utiliza a menudo después de una instrucción, para proporcionar más información acerca de lo que hace esta o para recordarla más adelante.

Guia de Estilo de programación

A la hora de programar Arduino, es fundamental usar la referencia que disponemos online en http://arduino.cc/en/Reference/HomePage o en la ayuda del IDE de Arduino. Cualquier duda sobre un comando, función, etc… debemos consultar en la referencia de Arduino.

Existe una guía de estilo para escribir código claro de Arduino y que sea fácil de entender. No es obligatorio, pero es una recomendación:

  • Documentar al máximo
  • Usar esquemas
  • Predominar la facilidad de lectura sobre la eficiencia del código
  • Poner el setup() y loop() al principio del programa
  • Usar variables descriptivas
  • Explicar el código al principio
  • Usar identación

Guia de estilo: http://arduino.cc/en/Reference/StyleGuide

También disponemos de varias cheat sheets o chuletas para cuando se empieza a programar:

Una buena guía de estilo de C++: http://informatica.uv.es/iiguia/AED/laboratorio/Estilocpp.pdf

Para documentar nuestros sketchs: http://busyducks.com/wp_4_1/2015/11/16/ascii-art-arduino-pinouts/

Primeros Pasos Programación Arduino

Aunque se hable de que hay un lenguaje propio de programación de Arduino, no es cierto, la programación se hace en C++ pero Arduino ofrece unas librerías o core que facilitan la programación de los pines de entrada y salida y de los puertos de comunicación, así como otras librerías para operaciones específicas. El propio IDE ya incluye estas librerías de forma automática y no es necesario declararlas expresamente.

Toda la información para programar Arduino se encuentra en el reference de la web de Arduino: https://www.arduino.cc/en/Reference/HomePage. Este es el core o API de Arduino.

Un manual sencillo de entender para la programación es el “arduino programming notebook” de brian w. Evans. Puedes consultarlo o descargarlo desde:

Cuando compilamos y cargamos el programa en Arduino esto es lo que ocurre:

Además de la programación tradicional de Arduino, existen varios proyectos para programar Arduino de forma visual añadiendo bloques al estilo de scratch, blockly o similar.

Vamos a introducir la programación y electrónica con Arduino utilizando los lenguajes de programación por bloques y lenguajes de programación en modo texto:

Proyectos de programación visual:

Plataformas para que los niños aprendan a programar en Arduino y Scratch: http://www.ticbeat.com/educacion/plataformas-para-que-los-ninos-aprendan-a-programar-en-arduino-y-scratch/

Papers sobre la enseñanza de programación con bloques:

Independientemente del sistema operativo que utilicemos y del método de programación, la primera vez que conectamos una tarjeta de Arduino a nuestro equipo, observaremos que será necesario instalar los drivers de la misma. Para instalar el IDE de Arduino seguir las instrucciones de https://aprendiendoarduino.wordpress.com/2018/04/03/instalacion-software-arduino-2/

Primer Sketch con Arduino

Para comprobar su correcto funcionamiento conectamos la tarjeta al ordenador a través del cable USB y automáticamente el ordenador la reconocerá. Además, al instalar Arduino IDE, los drivers de la tarjeta quedan instalados en el PC.

Para comprobar que todo funciona correctamente ejecutar el ejemplo blink en el IDE Arduino que consiste en hacer parpadear el led integrado que lleva Arduino u otro led conectado a un pin digital a través de una resistencia.

NOTA: en caso de usar un led, no olvidar poner una resistencia con un valor entre 220 ohms y 1K ohms

Este es el esquema a usar:

Conexiones internas de la protoboard son así:

Cómo usar una protoboard o breadboard:

Pasos a seguir:

  • Abrir la aplicación Arduino
  • Abrir el ejemplo blink

  • Leer el programar y entender lo que está haciendo
  • Seleccionar la placa y el puerto adecuado

  • Cargar el programa pulsando el botón “subir”. El programa se compila y luego se verá parpadeando los leds Tx y Rx de Arduino, indicando que se está cargando el fichero binario (.hex) en la flash del Arduino. Cuando aparezca el mensaje “subido” habremos acabado.
  • Unos segundos después veremos el LED parpadeando.

Más información:

Operadores

Un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción. Un operador, es un símbolo que indica al compilador que se lleve a cabo ciertas manipulaciones matemáticas o lógicas.

Los operadores son símbolos que representan una operación como las básicas de suma, resta, multiplicación y división, (+, -, *, /) existen las booleanas (true y false) para las operaciones de comparación como AND, O, NOT, o las de comparación ==, !=, =, que son muy utilizados en las instrucciones de tipo if.

Aritméticos

Los operadores aritméticos que se incluyen en el entorno de programación son suma, resta, multiplicación, división, módulo y asignación. Estos devuelven la suma, diferencia, producto, cociente o resto (respectivamente) de dos operandos.

La operación se efectúa teniendo en cuenta el tipo de datos que hemos definido para los operandos (int, double, float, etc..), por lo que, por ejemplo, si definimos 9 y 4 como enteros “int”, 9 / 4 devuelve de resultado 2 en lugar de 2,25 ya que el 9 y 4 se valores de tipo entero “int” (enteros) y no se reconocen los decimales con este tipo de datos.

Esto también significa que la operación puede sufrir un desbordamiento si el resultado es más grande que lo que puede ser almacenada en el tipo de datos. Recordemos el alcance de los tipos de datos numéricos explicado anteriormente.

Si los operandos son de diferente tipo, para el cálculo del resultado se utilizará el tipo más grande de los operandos en juego. Por ejemplo, si uno de los números (operandos) es del tipo float y otra de tipo integer, para el cálculo se utilizará el método de float es decir el método de coma flotante y el resultado será un float..

Elegir el tamaño de las variables de tal manera que sea lo suficientemente grande como para que los resultados sean lo precisos que deseamos. Para las operaciones que requieran decimales utilizar variables tipo float, pero hay que ser conscientes de que las operaciones con este tipo de variables son más lentas a la hora de realizarse el cómputo.

En Visualino podemos encontrar los operadores aritméticos en el apartado “Math”

Compuestos

Las operadores compuestos combinan una operación aritmética con una variable asignada. Estas son comúnmente utilizadas en los bucles tal como se describe más adelante. Estas asignaciones compuestas pueden ser:

En Visualino no hay operadores compuestos.

Comparación

Operadores de comparación. Las comparaciones de una variable o constante con otra se utilizan con frecuencia en las estructuras condicionales del tipo if, while, etc.. para testear si una condición es verdadera.

En Visualino los operadores de comparación están en el apartado de “Logic”

Booleanos

Los operadores lógicos o booleanos son usualmente una forma de comparar dos expresiones y devuelve un VERDADERO o FALSO dependiendo del operador. Existen tres operadores lógicos, AND (&&), OR (||) y NOT (!), que a menudo se utilizan en estamentos de tipo if.

En Visualino los operadores booleanos están en el apartado de “Logic”

Curiosa forma de explicar las operaciones lógicas mediante un vídeo: http://es.gizmodo.com/las-funciones-de-los-circuitos-brillantemente-explicad-1570812992

Otras funciones disponibles en el core de Arduino

Conclusión

Un resumen de los operadores en C /C++ y más información:

Programación Visual con Visualino

Visualino es un entorno de programación visual que me permite hacer un programa con bloques tipo scratch y ver el código que se genera.

Al contrario que S4A y mBlock, Visualino está solo centrando en la programación de Arduino con un lenguaje de programación por bloques, como se de un traductor de bloques a código se tratara. Pero además, permite programar directamente la placa de Arduino y por tanto, hace innecesaria la conexión permanente al PC.

Los bloques generan el código de C/C++ en tiempo real en una ventana. El entorno es similar al del IDE de Arduino, con las mismas opciones principales: Verificar, Subir, Guardar, Cargar y Monitor.

Visualino ha sido creado por Víctor Ruiz: http://rvr.linotipo.es/

Visualino está basado en blockly de Google al igual que bitBloq http://bitbloq.bq.com/ de BQ: https://developers.google.com/blockly/

Web del proyecto: http://www.visualino.net/

Código fuente: https://github.com/vrruiz/visualino/

Descargar: http://www.visualino.net/downloads/

Tutorial de uso: http://procomun.educalab.es/es/ode/view/1453974406581

Foro: http://www.visualino.net/forum/

Tutoriales de uso:

Más información

Instalación Visualino

Como instalar Visualino: http://www.visualino.net/docs/windows.es.html

Visualino necesita el Arduino IDE para transferir los programas a la placas de Arduino, para ello es necesario configurar la ruta del IDE de Arduino en Visualino.

Una configuración importante es la ruta del IDE de Arduino. Esta es la ruta al fichero ejecutable (EXE) que Visualino llamará para compilar y transferir los programas a las placas de Arduino. Si este fichero ejecutable no se encuentra, no podrá programar las placas, así que tenga cuidado.

En windows la ruta por defecto es: C:\Program Files (x86)\Arduino\arduino.exe

Entorno de programación:

Bloques en Visualino

Visualino dispone de 12 bloques divididos de la siguiente forma:

  • Functions: para definir y llamar a funciones.
  • Control: estructuras de control if, switch, while, etc…
  • Logic: operaciones lógicas
  • Math: operaciones aritméticas y matemáticas
  • Variables: declaración, uso y asignación de variables
  • Text: uso y manipulación de Strings
  • Communication: uso del puerto serie y módulo bluetooth
  • Zum bloqs: manejo de los módulos de bq https://www.bq.com/es/zum-kit
  • Octopus bloqs: manejo de más módulos de bq
  • Pin functions: uso de las entradas y salidas analógicas y digitales
  • LCD bloqs: manejo de los módulos o pantallas LCD
  • Servo: para manejar servos tanto normales como de rotación continua

LCD bloqs

Communications:

Servo:

Ejercicios

Hacer el ejemplo de blink con Visualino y comparar el código con el de la práctica https://aprendiendoarduino.wordpress.com/2017/06/18/primer-proyecto-blink-3/

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio01-Visualino-Blink

Hacer la versión mejorada del blink enviando al puerto serie el estado del led.

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio02-Visualino-Blink_Mejorado

Otros ejemplos con Visualino: