¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Arduino
  3. Conceptos básicos de programación
Extrait - Arduino Aprender a desarrollar para crear objetos inteligentes
Extractos del libro
Arduino Aprender a desarrollar para crear objetos inteligentes Volver a la página de compra del libro

Conceptos básicos de programación

Introducción

La programación informática permite a un ordenador realizar acciones más o menos complejas utilizando un lenguaje común entre el ser humano y la máquina.

El objetivo de este capítulo es presentar el lenguaje utilizado por el entorno de desarrollo, así como las funcionalidades principales disponibles para crear aplicaciones Arduino. Para entender este capítulo no es necesaria ninguna base informática.

El lenguaje Arduino descrito en las siguientes páginas es muy cercano al C o al C++. De hecho, la sintaxis y las principales funciones son comunes. Sin embargo, la organización de un programa en Arduino es diferente. De hecho, la organización se estructura en funciones propias que simplifican el uso: las funciones loops y setup.

Este capítulo tratará del lenguaje de programación, centrándose en la estructura de un programa. Más adelante, se definirán los diferentes aspectos de la programación y las particularidades de la programación Arduino.

Algunas nociones de informática

La informática es la ciencia de hacer ejecutar una sucesión de instrucciones a un ordenador.

En el ámbito de este libro, la programación informática constituirá principalmente la elaboración de un programa para controlar Arduino.

Un programa es una sucesión de instrucciones escritas por un ser humano y ejecutadas por la máquina. Llamamos lenguaje de programación al lenguaje utilizado para escribir un programa. El lenguaje Arduino es el lenguaje de programación utilizado para realizar un programa en el módulo Arduino.

En el lenguaje Arduino, el microprocesador no entiende directamente el lenguaje de programación, por lo que necesita una etapa inicial; esta etapa se llama compilación.

La compilación es la transformación por un compilador del lenguaje de programación en lenguaje máquina. El lenguaje máquina es un lenguaje formado únicamente de unos y ceros, y también se llama lenguaje binario.

La escritura de programas se podría realizar en lenguaje máquina; de hecho, la informática empezó así. Pero las dificultades de escritura de programas en lenguaje máquina hicieron aparecer los lenguajes llamados evolucionados, que se acercan al lenguaje humano. Estos últimos, como el lenguaje C, han permitido la simplificación de la escritura de programas...

Lenguaje de programación

1. Sintaxis de programación

La escritura de un programa informático se rige por reglas de sintaxis básicas. Es importante respetar estas reglas en la elaboración de su programa Arduino para que la etapa de compilación se desarrolle correctamente.

El lenguaje Arduino es muy cercano al lenguaje C; las reglas de sintaxis son comunes.

Cada instrucción debe estar delimitada por un punto y coma. El compilador entenderá que se trata del final de la instrucción actual e irá a tratar la siguiente.

Sintaxis de una instrucción:


<Instrucción>;
 

Ejemplo de una instrucción:


    pinMode(8, HIGH);
 

Solo el punto y coma determina el final de una instrucción. Una instrucción puede ocupar varias líneas de código, y varias instrucciones se pueden agrupar en la misma línea de código.

Varias instrucciones en la misma línea:


    i = 4 + a; pinMode(i, HIGH);  
 

Una instrucción en varias líneas:


    i = 4   
    + a;
 

Para mejorar la legibilidad en el código, la convención es escribir una instrucción por línea de código.

Por otro lado, es posible escribir comentarios en su programa con el objetivo de explicar el funcionamiento del código o realizar observaciones. Cuando hay varias personas trabajando en un mismo...

Variables y constantes

1. Definiciones

Las variables son objetos que permiten almacenar valores durante la ejecución de un programa y reutilizarlas en el programa gracias a su nombre.

Durante toda la ejecución del programa, el valor de una variable se podrá modificar y consultar. El nombre de una variable sirve de clave para acceder al valor.

Declaraciones y asignaciones

La declaración de una variable es su construcción; esta fase permite asignar un tipo a una variable. Durante la declaración, se reserva un espacio de memoria para esta variable. El tipo de variable definirá el espacio de memoria a asignar por el microcontrolador.

La declaración siempre sigue el mismo formalismo.

Sintaxis de declaración de una variable:


<tipo> <nombre_de_variable>
 

<tipo> representa el tipo de la variable (consulte la sección Tipos de variables y constantes).

<nombre_de_variable> representa el nombre de la variable.

Ejemplo de declaración:

La siguiente instrucción permite declarar la variable a de tipo int.


int a; 
 

"int" indica el tipo int, palabra clave para un número entero. "a" es el nombre de la variable. Durante esta declaración, se asigna un espacio de memoria de 16 bits para el almacenamiento de un valor entero. Después de esta etapa, la variable a se puede utilizar, es decir, podemos asignar valores a esta variable.

La operación de asignación permite cambiar el valor de una variable. Esta operación se define por el operador =.

Sintaxis de una asignación:


<variable> = X
 

<variable> representa una variable.

= es el operador que representa una asignación.

X representa el valor a asignar y debe ser del mismo tipo que la variable.

Ejemplo de operación de asignación:


    int a; // se declara la variable a  
    a = 1; // el valor de la variable a es 1
 

En la declaración, una variable no tiene valor definido. De hecho, el espacio se acaba de asignar por el microcontrolador y en su asignación este espacio no se inicializa. De esta manera, si una variable no se inicializa, su valor no se controla.

La primera asignación de un valor a una variable se llama inicialización. Esta etapa es muy importante e indispensable para controlar el valor de una variable y poder utilizarla correctamente. La inicialización...

Operaciones básicas

1. Operaciones matemáticas

La manipulación de números es muy habitual en informática y, de esta manera, las operaciones matemáticas son muy utilizadas en programación.

La suma

Sumar dos números se realiza de la siguiente manera en el código:


a + b
 

El valor de a y de b se suman.

La resta

En el código, la resta se realiza de la siguiente manera:


a - b 
 

Esta instrucción permite restar el valor de b del valor de a.

La división

En el código, la división se realiza de la siguiente manera:


a / b 
 

Esta instrucción permite dividir el valor de a entre el valor de b.

La multiplicación

La multiplicación se realiza de la siguiente manera en el código:


a * b
 

Esta instrucción permite multiplicar el valor de a por el valor de b.

La asignación

En informática, el operador = es un operador de asignación. No se debe confundir con el operador == que es un operador lógico de comparación de valores. El operador de asignación permite asignar el valor de una variable a otra.

Para leer la instrucción del operador de asignación hay que leer de derecha a izquierda.

La instrucción a = b; se interpreta como "el valor de la variable b se asigna a a" o como "el valor de b se copia en a".

El corolario de esta definición es que las dos instrucciones a=b; y b=a; no son la misma. De hecho, en la primera instrucción, el valor de b se copia en a, y después de esta instrucción los dos objetos tendrán el valor de b. En la segunda instrucción, los dos objetos tendrán el valor de a como consecuencia de la instrucción.

Ejemplos de asignación:


int a=1,b=2,c=2,d =1;   
   
int resultados3;   
   
resultados0 = a + b;   
   
resultados1 = a - b;   
   
d = c;   
   
resultados2 = d; 
 

resultados0 cuyo valor es 3, resultados1 cuyo valor es -1 y resultados2 cuyo valor es 2.

Valor absoluto

El valor absoluto de un número es una función matemática que permite extraer la parte positiva de cualquier número.

Además, el valor absoluto...

Estructuras de control

1. Estructuras condicionales

Estructura if-else

La estructura if es una estructura condicional en informática que permite tener en cuenta condiciones.

Si la condición es verdadera, entonces la estructura comprendida entre llaves se ejecutará. Si la condición no es verdadera, entonces la estructura comprendida entre llaves no se ejecutará, sino que se ejecutará la estructura else, que sigue a la estructura if.

La estructura else es una estructura opcional que, cuando está presente, se ejecuta si y solamente si la condición es falsa.

A continuación se muestra cómo se escribe en el código la estructura condicional if-else:


if(condición)   
{   
    // Sección de código ejecutada si la condición es verdadera 
    // ...   
}   
else   
{   
   // Sección de código ejecutada si la condición es falsa  
   // ...   
}
 

Ejemplo de uso de una estructura if-else:


// Generación de un número entre 0 y 9   
int x = rand()%10;   
   
// La condición es verdadera si x vale 0, 1, 2, 3 o 4   
if(x < 5)   
{   
    // Sección de código ejecutada si x está comprendido entre 0 y 4
    // ...   
}   
else   
{   
   // Sección de código ejecutada si x está comprendido entre 5 y 10
   // ...   
}
 

La primera línea de código permite generar un número aleatorio. Después, se puede realizar un tratamiento particular si la condición es verdadera, es decir, si x tiene un valor...

Estructuras de datos

1. Definiciones generales e introducción a la complejidad

Para realizar algoritmos o programas complejos, es necesario almacenar un importante número de datos. Un conjunto de datos almacenados de manera lógica se llama estructura de datos.

Existen varios tipos de estructuras de datos. Cada tipo de estructura de datos tiene características concretas, que van a determinar su uso en algunas situaciones. El objetivo de una estructura de datos es simplificar algunas operaciones, o quizás de manera más precisa, hacer las operaciones lo menos complejas posible.

Conocer las características principales, así como las ventajas e inconvenientes de las estructuras de datos más utilizadas en Arduino, es imprescindible para utilizar lo mejor posible todas las capacidades del microcontrolador.

Las características principales de una estructura de datos quedan expuestas estudiando la complejidad algorítmica desde varias ángulos:

  • el acceso a un elemento concreto de esta estructura,

  • la inserción de un elemento,

  • la eliminación de un elemento.

La complejidad algorítmica mide la dificultad que tiene un ordenador para realizar una operación. En nuestro caso, la complejidad nos sirve para determinar la dificultad que tiene el microcontrolador para acceder, insertar o eliminar un elemento de una estructura de datos, que permite de esta manera diferenciar las estructuras de datos entre ellas y favorecer su utilización en algunos casos.

Existen diferentes niveles de complejidad algorítmica, y es importante conocerlos.

La complejidad de nivel 1 es el nivel de complejidad más bajo. Hace referencia a una instrucción básica.

Complejidad de nivel 1

Un ejemplo de complejidad de nivel 1 es el acceso a un elemento de una tabla estática.


int i = tab[0]
 

Todos los algoritmos que no tienen bucles son de nivel 1.

Un algoritmo o función de complejidad n es una sección de código que se va a ejecutar como máximo n veces como consecuencia una llamada a este algoritmo o función.

Algoritmo de complejidad de nivel n

A continuación se muestra un ejemplo de algoritmo de nivel n, que permite realizar una suma.


int n = 10;   
   
int number =1;   
   
for(int i = 1; i < n; i++)   
{   
    number = number + 1;   ...

Funciones

1. Definición de una función

Durante la escritura de un programa informático, su tamaño puede crecer mucho, según su complejidad. Es importante poder dividir su código de manera limpia, para hacerlo más legible, no solamente para uno mismo, sino sobre todo para el resto de usuarios susceptibles de volver a leer este trabajo. Para esto, podemos recurrir a las funciones.

Las funciones son estructuras particulares en informática. Son una sucesión de instrucciones que realizan un cálculo particular y devuelven un valor. Hay que verlas como código residente en una máquina, en la que dejamos la información para por un lado recuperarla y por otro tratarla.

Hay dos etapas fundamentales en el uso de una función: la etapa de creación, también llamada declaración de una función, y la etapa de utilización o llamada a la función.

Antes de poder utilizar una función hay que definir lo que esta función debe realizar. Para esto, debemos declararla. Esta declaración es una sección de código independiente del programa principal, generalmente fácil de localizar en un programa, porque tiene una sintaxis particular. Permite definir la sucesión específica de instrucciones que la función deberá realizar cuando se utilice. También permite definir los valores que acepta, así como los que devuelve.

Para utilizar sus funcionalidades, llamamos a la función. Esta llamada generalmente es muy sencilla y se hace en una línea. Es en esta llamada donde hay que situar los valores que queremos tratar. Una vez ejecutada, también permite recuperar los valores de retorno, si los hay.

Las funciones se utilizan generalmente cuando hay algún cálculo recurrente que se usa varias veces en el programa. Utilizar una función puede reducir mucho el tamaño del código.

Igualmente, el uso de una función también puede contribuir a la claridad y comprensión de su programa. Una función bien implementada puede mejorar la legibilidad de su trabajo y permitir a otros usuarios entender mejor el código.

Como toda estructura, dispone de una sintaxis que le es propia y la que se usa en la plataforma Arduino es idéntica a la utilizada en el lenguaje C.

Por tanto, una función...

Compilación

1. Definición

La programación informática, como hemos visto durante la introducción, permite a la máquina realizar tareas más o menos complejas mediante un lenguaje común al ser humano y a la máquina. Este lenguaje se ha creado para permitir al ser humano interactuar con la máquina, pero no es comprensible tal cual por esta última. La máquina utiliza un lenguaje llamado lenguaje máquina que, para resumir, es una sucesión de bits comprensible por el procesador. Evidentemente, este lenguaje es, salvo entrenamiento, incomprensible para el ser humano. Es necesaria una etapa adicional, la etapa de compilación.

El bit es la unidad más sencilla de numeración. Comprende dos valores posibles, el 0 y el 1.

La compilación, de manera general, consiste en hacer pasar un programa informático terminado a través de una herramienta, llamada compilador, para que este último lo transforme en otro lenguaje informático. En nuestro caso, se trata de hacer pasar nuestro programa en C para que se convierta en una sucesión de 0 y de 1. Pueden existir varios compiladores que realicen la misma tarea, con más o menos eficacia.

El objetivo de la compilación no se abordará de manera exhaustiva en esta sección. Es un tema complejo y no es obligatorio conocerlo para poder abordar el resto de temas tratados...