apostila - arduino (manual de programação) - em espanhol

apostila - arduino (manual de programação) - em espanhol

(Parte 1 de 5)

Arduino: Manual de Programación

Manual de Programación

Arduino

La “inteligencia de Arduino” se expresa mediante su lenguaje de programación

Guía rápida de referencia

Traducido y adaptado: José Manuel Ruiz Gutiérrez

Arduino: Manual de Programación

Datos del documento original

Arduino Notebook: A Beginner’s Reference Written and compiled by Brian W. Evans

With information or inspiration taken from: http://www.arduino.c http://www.wiring.org.co http://www.arduino.c/en/Booklet/HomePage http://cslibrary.stanford.edu/101/

Including material written by: Massimo Banzi

Hernando Barragin David Cuartielles

Tom Igoe Todd Kurt

David Mellis and others

Published: First Edition August 2007

This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.

To view a copy of this license, visit: http://creativecommons.org/licenses/by-nc-/ Or send a letter to:

Creative Commons

171 Second Street, Suite 300 San Francisco, California, 94105, USA

Arduino: Manual de Programación

Índice de contenidos estructura estructura setup() loop() funciones {} uso de llaves ; punto y coma /*… */ bloque de comentarios

// linea de comentario variables variables declaración de variables variable scope tipos de datos byte int long float arrays aritmética aritmética composición de asignaciones operadores de comparación operadores lógicos constantes constantes cierto/falso alto/bajo entrada/salida

Arduino: Manual de Programación control de flujo if if… else for while do… while

E/S digitales pinMode(pin, mode) digitalRead(pin) digitalWrite(pin, value)

E/S analógicas analogRead(pin) analogWrite(pin, value) tiempo delay(ms) millis() matemáticas min(x, y) max(x, y) aleatorio randomSeed(seed) random(min, max)

Puerto serie

Serial.begin(rate) Serial.println(data) Serial.print(data, data type) apéndice salida digital entrada digital salida de alto consumo (corriente) salida analógica (pwm) potenciómetro de entrada Resistencia variable de entrada Salida a servo

Formas de Conexionadode entradas y salidas Como escribir una librería para Arduino Señales analógicas de salida en Arduino (PWM).

Arduino: Manual de Programación

Comunicando Arduino con otros sistemas Comunicación vía puerto Serie: Envio de datos desde el PC (PC->Arduino) a Arduino por puerto de comunicación serie: Envío a petición (toma y dame) Conversor Analógico-Digital (A/D) Comunicación serie Palabras reservadas del IDE de Arduino Circuitos de interface con Arduino

Arduino: Manual de Programación

La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. Estas dos partes necesarias, o funciones, encierran bloques que contienen declaraciones, estamentos o instrucciones.

void setup() { estamentos; } void loop() { estamentos; }

En donde setup() es la parte encargada de recoger la configuración y loop() es la que contienen el programa que se ejecutará cíclicamente (de ahí el termino loop –bucle-). Ambas funciones son necesarias para que el programa trabaje.

La función de configuración debe contener la declaración de las variables. Es la primera función a ejecutar en el programa, se ejecuta sólo una vez, y se utiliza para configurar o inicializar pinMode (modo de trabajo de las E/S), configuración de la comunicación en serie y otras.

La función bucle (loop) siguiente contiene el código que se ejecutara continuamente (lectura de entradas, activación de salidas, etc) Esta función es el núcleo de todos los programas de Arduino y la que realiza la mayor parte del trabajo.

La función setup() se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa aunque no haya declaración que ejecutar.

void setup() { pinMode(pin, OUTPUT); // configura el 'pin' como salida estructura de un programa setup() loop()

Arduino: Manual de Programación

Después de llamar a setup(), la función loop() hace precisamente lo que sugiere su nombre, se ejecuta de forma cíclica, lo que posibilita que el programa este respondiendo continuamente ante los eventos que se produzcan en la tarjeta void loop() { digitalWrite(pin, HIGH); // pone en uno (on, 5v) el pin delay(1000); // espera un segundo (1000 ms) digitalWrite(pin, LOW); // pone en cero (off, 0v.) el pin delay(1000); }

Una función es un bloque de código que tiene un nombre y un conjunto de estamentos que son ejecutados cuando se llama a la función. Son funciones setup() y loop() de las que ya se ha hablado. Las funciones de usuario pueden ser escritas para realizar tareas repetitivas y para reducir el tamaño de un programa. Las funciones se declaran asociadas a un tipo de valor “type”. Este valor será el que devolverá la función, por ejemplo 'int' se utilizará cuando la función devuelva un dato numérico de tipo entero. Si la función no devuelve ningún valor entonces se colocará delante la palabra “void”, que significa “función vacía”. Después de declarar el tipo de dato que devuelve la función se debe escribir el nombre de la función y entre paréntesis se escribirán, si es necesario, los parámetros que se deben pasar a la función para que se ejecute.

type nombreFunción(parámetros) { estamentos; }

La función siguiente devuelve un número entero, delayVal() se utiliza para poner un valor de retraso en un programa que lee una variable analógica de un potenciómetro conectado a una entrada de Arduino. Al principio se declara como una variable local, v recoge el valor leído del potenciómetro que estará comprendido entre 0 y 1023, luego se divide el valor por 4 para ajustarlo a un margen comprendido entre 0 y 255, finalmente se devuelve el valor v y se retornaría al programa principal. Esta función cuando se ejecuta devuelve el valor de tipo entero v

int v;// crea una variable temporal 'v'
v /= 4;// convierte 0-1023 a 0-255
return v;// devuelve el valor final

int delayVal() { v= analogRead(pot); // lee el valor del potenciómetro } funciones

Arduino: Manual de Programación

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.

type funcion() { estamentos; }

Una llave de apertura “{“ siempre debe ir seguida de una llave de cierre “}”, si no es así el programa 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).

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

int x = 13; // declara la variable 'x' como tipo entero de valor 13

Nota: Olvidarse de poner fin a una línea con un punto y coma se traducirá en un error de compilación. El texto de error puede ser obvio, y se referirá a la falta de una coma, o puede que no. Si se produce un error raro y de difícil detección lo primero que debemos hacer es comprobar que los puntos y comas están colocados al final de las instrucciones.

Los bloques de comentarios, o multi-línea de comentarios, 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.

/* esto es un bloque de comentario no se debe olvidar cerrar los comentarios estos deben estar equilibrados */

{} entre llaves

; punto y coma /*… */ bloque de comentarios

Arduino: Manual de Programación

Debido a que los comentarios son ignorados por el programa y no ocupan espacio en la memoria de Arduino pueden ser utilizados con generosidad y también pueden utilizarse para "comentar" bloques de código con el propósito de anotar informaciones para depuración.

bloque de comentarios (usando /**/ )

Nota: Dentro de una misma línea de un bloque de comentarios no se puede escribir otra

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 programa y no ocupan espacio en la memoria.

// esto es un comentario

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.

Una variable es una manera de nombrar y almacenar un valor numérico para su uso posterior por el programa. Como su nombre indica, las variables son números que se pueden variar continuamente en contra de lo que ocurre con las constantes cuyo valor nunca cambia. Una variable debe ser declarada y, opcionalmente, asignarle un valor. El siguiente código de ejemplo declara una variable llamada variableEntrada y luego le asigna el valor obtenido en la entrada analógica del PIN2:

int variableEntrada = 0; // declara una variable y le asigna el valor 0 variableEntrada = analogRead(2);// la variable recoge el valor analógico del PIN2

'variableEntrada' es la variable en sí. La primera línea declara que será de tipo entero “int”. La segunda línea fija a la variable el valor correspondiente a la entrada analógica PIN2. Esto hace que el valor de PIN2 sea accesible en otras partes del código.

Una vez que una variable ha sido asignada, o re-asignada, usted puede probar su valor para ver si cumple ciertas condiciones (instrucciones if..), o puede utilizar directamente su valor. Como ejemplo ilustrativo veamos tres operaciones útiles con variables: el siguiente código prueba si la variable “entradaVariable” es inferior a 100, si es cierto se asigna el valor 100 a “entradaVariable” y, a continuación, establece un retardo (delay) utilizando como valor “entradaVariable” que ahora será como mínimo de valor 100:

// línea de comentarios variables

Arduino: Manual de Programación if (entradaVariable < 100) // pregunta si la variable es menor de 100

{ entradaVariable = 100;// si es cierto asigna el valor 100 a esta

} delay(entradaVariable); // usa el valor como retardo

Nota: Las variables deben tomar nombres descriptivos, para hacer el código más legible. Nombres de variables pueden ser “contactoSensor” o “pulsador”, para ayudar al programador y a cualquier otra persona a leer el código y entender lo que representa la variable. Nombres de variables como “var” o “valor”, facilitan muy poco que el código sea inteligible. Una variable puede ser cualquier nombre o palabra que no sea una palabra reservada en el entorno de Arduino.

Todas las variables tienen que declararse antes de que puedan ser utilizadas. Para declarar una variable se comienza por definir su tipo como int (entero), long (largo), float (coma flotante), etc, asignándoles siempre un nombre, y, opcionalmente, un valor inicial. Esto sólo debe hacerse una vez en un programa, pero el valor se puede cambiar en cualquier momento usando aritmética y reasignaciones diversas.

El siguiente ejemplo declara la variable entradaVariable como una variable de tipo entero “int”, y asignándole un valor inicial igual a cero. Esto se llama una asignación.

int entradaVariable = 0;

Una variable puede ser declarada en una serie de lugares del programa y en función del lugar en donde se lleve a cabo la definición esto determinará en que partes del programa se podrá hacer uso de ella.

Una variable puede ser declarada al inicio del programa antes de la parte de configuración setup(), a nivel local dentro de las funciones, y, a veces, dentro de un bloque, como para los bucles del tipo if.. for.., etc. En función del lugar de declaración de la variable así se determinara el ámbito de aplicación, o la capacidad de ciertas partes de un programa para hacer uso de ella.

Una variable global es aquella que puede ser vista y utilizada por cualquier función y estamento de un programa. Esta variable se declara al comienzo del programa, antes de setup().

Una variable local es aquella que se define dentro de una función o como parte de un bucle. Sólo es visible y sólo puede utilizarse dentro de la función en la que se declaró.

declaración de variables Utilización de una variable

Arduino: Manual de Programación

Por lo tanto, es posible tener dos o más variables del mismo nombre en diferentes partes del mismo programa que pueden contener valores diferentes. La garantía de que sólo una función tiene acceso a sus variables dentro del programa simplifica y reduce el potencial de errores de programación.

El siguiente ejemplo muestra cómo declarar a unos tipos diferentes de variables y la visibilidad de cada variable:

int value; // 'value' es visible para cualquier función void setup() { // no es necesario configurar void loop() { for (int i=0; i<20;) // 'i' solo es visible { // dentro del bucle for i++; } float f; // 'f' es visible solo } // dentro del bucle

Byte almacena un valor numérico de 8 bits sin decimales. Tienen un rango entre 0 y 255 byte unaVariable = 180; // declara 'unaVariable' como tipo byte

Enteros son un tipo de datos primarios que almacenan valores numéricos de 16 bits sin decimales comprendidos en el rango 32,767 to -32,768.

int unaVariable = 1500; // declara 'unaVariable' como una variable de tipo entero

Nota: Las variables de tipo entero “int” pueden sobrepasar su valor máximo o mínimo como consecuencia de una operación. Por ejemplo, si x = 32767 y una posterior declaración agrega 1 a x, x = x + 1 entonces el valor se x pasará a ser -32.768. (algo así como que el valor da la vuelta) byte Int

Arduino: Manual de Programación

El formato de variable numérica de tipo extendido “long” se refiere a números enteros (tipo 32 bits) sin decimales que se encuentran dentro del rango -2147483648 a 2147483647.

long unaVariable = 90000; // declara 'unaVariable' como tipo long

El formato de dato del tipo “punto flotante” “float” se aplica a los números con decimales. Los números de punto flotante tienen una mayor resolución que los de 32 bits con un rango comprendido 3.4028235E +38 a +38-3.4028235E.

float unaVariable = 3.14; // declara 'unaVariable' como tipo flotante

Nota: Los números de punto flotante no son exactos, y pueden producir resultados extraños en las comparaciones. Los cálculos matemáticos de punto flotante son también mucho más lentos que los del tipo de números enteros, por lo que debe evitarse su uso si es posible.

Un array es un conjunto de valores a los que se accede con un número índice. Cualquier valor puede ser recogido haciendo uso del nombre de la matriz y el número del índice. El primer valor de la matriz es el que está indicado con el índice 0, es decir el primer valor del conjunto es el de la posición 0. Un array tiene que ser declarado y opcionalmente asignados valores a cada posición antes de ser utilizado int miArray[] = {valor0, valor1, valor2...}

Del mismo modo es posible declarar una matriz indicando el tipo de datos y el tamaño y posteriormente, asignar valores a una posición especifica:

int miArray[5]; // declara un array de enteros de 6 posiciones miArray[3] = 10; // asigna l valor 10 a la posición 4

Para leer de un array basta con escribir el nombre y la posición a leer:

x = miArray[3]; // x ahora es igual a 10 que está en la posición 3 del array long float arrays

(Parte 1 de 5)

Comentários