Está en la página 1de 11

Colegio Cristiano de la Villa

ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Conceptos básicos de programación en Arduino


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.
● setup() – http://arduino.cc/en/Reference/Setup
● loop() – http://arduino.cc/en/Reference/Loop

En donde setup() es la parte encargada de recoger la configuración y loop() es la que contiene el


programa que se ejecutará cíclicamente (de ahí el término 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 ejecutará 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.

Los programas de Arduino se pueden dividir en:


● Estructura
● Valores (variables y constantes)
● Funciones
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

{} 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).

; punto y coma
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”.
Nota: Si olvidáis poner fin a una línea con un punto y coma se producirá un error de compilación.

/*… */ bloque de comentarios


Los bloques de comentarios, o comentarios multi-línea son áreas de texto ignoradas 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.

// 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 programa 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.
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

Variables
Una variable es un lugar para almacenar un dato. Tiene un nombre, un valor y un tipo. Por ejemplo, esta
declaración (llamada declaración ): int pin = 13;
crea una variable cuyo nombre es pin, cuyo valor es 13, y cuyo tipo es int. Más adelante en el
programa, puede hacer referencia a esta variable por su nombre, momento en el que se buscará y
utilizará su valor. Por ejemplo, en esta declaración:
pinMode(pin, OUTPUT);
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

es el valor del pin (13) que se pasará a la función pinMode(). En este caso, en realidad no necesita usar
una variable, esta declaración funcionaría igual de bien:

pinMode(13, OUTPUT);

La ventaja de una variable en este caso es que solo necesita especificar el número real del pin una vez,
pero puede usarlo muchas veces. Entonces, si luego decide cambiar del pin 13 al pin 12, solo necesita
cambiar un punto en el código. Además, puede usar un nombre descriptivo para aclarar el significado de
la variable (por ejemplo, un programa que controla un LED RGB puede tener variables denominadas
pinrojo, pinverde y pinazul).
Una variable tiene otras ventajas sobre un valor como un número. Lo que es más importante, puede
cambiar el valor de una variable mediante una asignación (indicada por un signo igual). Por ejemplo:

pin = 12;
cambiará el valor de la variable a 12. Tenga en cuenta que no especificamos el tipo de la variable: no se
cambia por la asignación. Es decir, el nombre de la variable está permanentemente asociado a un tipo;
sólo cambia su valor. [1] Tenga en cuenta que debe declarar una variable antes de poder asignarle un
valor. Si incluye la declaración anterior en un programa sin la primera declaración anterior, obtendrá un
mensaje como: "error: el pin no se declaró en este ámbito".
Cuando asigna una variable a otra, está haciendo una copia de su valor y almacenando esa copia en la
ubicación de la memoria asociada con la otra variable. Cambiar uno no tiene efecto en el otro. Por
ejemplo, después de:

int pin = 13;

int pin2 = pin;

pin = 12;
solo el pin tiene el valor 12; pin2 sigue siendo 13.
Ahora, quizás se esté preguntando, ¿qué significaba la palabra "alcance" en el mensaje de error
anterior? Se refiere a la parte de su programa en la que se puede utilizar la variable. Esto está
determinado por dónde lo declaras. Por ejemplo, si desea poder usar una variable en cualquier parte de
su programa, puede declararla en la parte superior de su código. Esto se llama una variable global ;
aquí hay un ejemplo:

int pin = 13;


void setup()
{
pinMode(pin, OUTPUT);
}
void loop()
{
digitalWrite(pin, HIGH);
}
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Como puedes ver, pin se usa en las funciones setup() y loop(). Ambas funciones se refieren a la
misma variable, por lo que cambiar una afectará el valor que tiene en la otra, como en:
int pin = 13;
void setup()
{
pin = 12;
pinMode(pin, OUTPUT);
}
void loop()
{
digitalWrite(pin, HIGH);
}

Aquí, a la función digitalWrite() llamada desde loop() se le pasará un valor de 12, ya que ese es el valor
que se asignó a la variable en la función setup().
Si solo necesita usar una variable en una sola función, puede declararla allí, en cuyo caso su alcance se
limitará a esa función. Por ejemplo:
void setup()
{
int pin = 13;
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
}

En este caso, el pin variable solo se puede usar dentro de la función setup(). Si intentas hacer algo
como esto:
void loop()
{
digitalWrite(pin, LOW); // wrong: pin is not in scope here.
}
obtendrá el mismo mensaje que antes: "error: 'pin' no se declaró en este ámbito". Es decir, aunque haya
declarado pin en algún lugar de su programa, está tratando de usarlo en algún lugar fuera de su
alcance.
¿Por qué, quizás se pregunte, no haría que todas sus variables fueran globales? Después de todo, si no
sé dónde podría necesitar una variable, ¿por qué debo limitar su alcance a una sola función? La
respuesta es que puede hacer que sea más fácil averiguar qué le sucede. Si una variable es global, su
valor podría cambiarse en cualquier parte del código, lo que significa que debe comprender todo el
programa para saber qué sucederá con la variable. Por ejemplo, si su variable tiene un valor que no
esperaba, puede ser mucho más fácil averiguar de dónde proviene el valor si la variable tiene un
alcance limitado.
[alcance del bloque][tamaño de las variables]
[1] En algunos lenguajes, como Python, los tipos están asociados con valores, no con nombres de
variables, y puede asignar valores de cualquier tipo a una variable. Esto se conoce como escritura
dinámica .
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Ámbito de una variable


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 determinará 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().
Recordad que al declarar una variable global, está un espacio en memoria permanente en la zona de
static data y el abuso de variables globales supone un uso ineficiente de la memoria.
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ó. 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.
El modificador de variable static, es utilizado para crear variables que solo son visibles dentro de una
función, sin embargo, al contrario que las variables locales que se crean y destruyen cada vez que se
llama a la función, las variables estáticas mantienen sus valores entre las llamadas a las funciones.
Las variables estáticas solo se crean e inicializan la primera vez que la función es llamada.

Arduino digitalWrite uso, ejemplos y aplicaciones

La función Arduino digitalWrite permite escribir valores lógicos digitales en un pin de Salida de una
tarjeta Arduino. Entonces, está función requiere que el pin haya sido declarado como salida previamente.
Para empezar, esté elemento del lenguaje Arduino, requiere de dos parámetros de entrada. El primero es
el numero de pin (0-13 para un Arduino UNO R3) y el segundo es la condición logica (HIGH ó LOW).
digitalWrite(#PIN, ESTADO);

Parámetros de entrada:
1. #PIN, se refiere al número del PIN de la tarjeta Arduino correspondiente.
2. ESTADO, aquí se colocara cualquiera de dos palabras: LOW o HIGH. LOW indica una condición
logica 0, es decir 0V, HIGH indicaría entonces lo opuesto, un 1 lógico, es decir VCC.

Funciones complementarias:
● pinMode()
● digitalRead()

De acuerdo al voltaje de alimentación de la tarjeta (VCC) será el voltaje de salida lógico de la tarjeta
Arduino. Si se usa en una tarjeta cuya alimentación sea 3.3V entonces HIGH implicaría este voltaje. De
igual forma, estas condiciones lógicas dependerán de la arquitectura del microcontrolador. No siempre
un LOW será 0V, sino que puede comprender, para el caso de un Arduino UNO R3, es un rango que va
desde los 0 V hasta los 0.8V. Para más información consultar la tabla » 28.2 DC Characteristics » de la
página 258 de la hoja de datos [1].

Aplicaciones
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

La función digitalWrite del lenguaje Arduino es usada para los dispositivos de salida. Por ejemplo,
algunos elementos o actuadores incluyen: motores de dc, motores a pasos, leds, pantallas LCD,
servomotores, buzzer, bocinas, etc.
Voltajes lógicos de salida
● Arduino UNO R3.
○ VOH (Voltaje de salida en alto) ‘1’ lógico: 4.1V a Vcc
○ VOL (El voltaje de salida en 0 lógico) ‘0’: 0V a 0.8V
○ VIL (Voltaje de entrada en bajo) ‘0’ : -0.5V a 0.3Vcc (Si VCC = 5vdc, 0.3VCC = 1.5V)
○ VIH (Voltaje de entrada para señales en alto) ‘1’ : 0.6VCC ( 3V para VCC = 5Vdc) a
Vcc+0.5V

Ejemplo-1. Rotabit de 4-bits con Arduino digitalWrite… 4 LEDs encendidos…

El Ejemplo-1 es una aplicación para un rotabit de 4-bits. Entonces, estos cuatro leds estarían conectados en los
pines con números, 13, 12, 11 y 10. Para poder utilizar la función de Arduino digitalWrite, primero es necesario
declarar estos puertos como salida. Es importante aclarar la capacidad de corriente que puede suministrar cada
pin. Es decir, la potencia que puede suministrar (V*I) es limitada. Por consiguiente, es importante establecer que la
corriente máxima por pin es de 40mA. De tal manera, no podemos tener los 14 pines digitales de un Arduino UNO
R3 con ese consumo. Existe un tope límite de 200mA para todos los pines del microcontrolador. Para resumir esta
restricción, verifica cuanta corriente consumen tus circuitos, leds, motores, etc.
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Ejemplo-2. Control de temperatura on-off, sensor analógico y una salida digital para el control de un
ventilador.
Se diseñará una aplicación para un control de temperatura con Arduino digitalWrite. El sensor utilizado
es un sensor analógico MCP9700. Este sensor proporciona un voltaje en función a la temperatura
medida. Tiene un offset de 500 mV y cada 10mV representa 1 grado centrado. Se utiliza la función
Arduino digitalWrite para encender o apagar los actuadores. En este caso, los actuadores son dos, un
ventilador y un foco. Estos elementos al funcionar a un voltaje distinto del que usa arduino, requieren de
una etapa de potencia. Se puede usar para el ventilador a un transistor 2N2222 como switch.
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Arduino pinMode, sintaxis y ejemplos


La función de Arduino pinMode permite configurar a cada pin, de forma individual, como entrada o como
salida. Aquí te explicamos su uso con ejemplos.También está función es usada en conjunto con
digitalWrite y digitalRead. Por lo general, pinMode es usado sólo en la función setup().

Sintaxis:
pinMode(#PIN, Modo);

Parámetros de entrada:
#PIN. Es el número del pin que se quiere configurar, este número está escrito en la tarjeta Arduino que se
usará.

Modo. Puede ser tres opciones:


INPUT. Configura el pin como entrada.
INPUT_PULLUP. Se le agrega al pin una resistencia de pull-up interna y se configura como entrada.
OUTPUT. El pin se configura como salida digital.

Funciones complementarias:
digitalWrite();
digitalRead();

La función Arduino pinMode usada para las tarjetas, es indispensable para cualquier aplicación donde
se requiere usar entradas o salidas digitales. Previamente, la historia de está función comienza con la
forma en la que se configuran a las entradas y salidas usando el lenguaje C para un microcontrolador
AVR. Esta arquitectura es la que utiliza un Arduino UNO R3. Originalmente la función de configuración
está controlada por el registro de propósito específico llamado DDRX, donde la X representa el puerto a
configurar. Por ejemplo, si tomamos en cuenta a un Arduino UNo, cuyo micro es el ATMEGA328P, vemos
que los pines del 0 al 13 están conectados en realidad a los puertos D, C y B. Finalmente, la Figura-1,
muestra las banderas de los registros B, C y D conectadas a cada pin.

Arduino pinMode pinout


Figura-1. Puerto B, C y D conectados a los pines de Arduino. Se muestran las banderas asociadas a cada pin.
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

En otras palabras, para controlar la configuración de entrada/salida la función de Arduino pinMode


escribe y configura a los registros DDRB, DDRC y DDRD. Por ejemplo, la bandera 0 del registro DDRB
configura directamente al pin 8 para una tarjeta Arduino UNO R3. Entonces, si esta bandera vale ‘1’ el pin
se configura como salida. Por el contrario si vale ‘0’ se configura como entrada.

Arduino pinMode Códigos de ejemplo

int LEDR 13

void setup() {

pinMode(LEDR ,OUTPUT);
}

void loop() {
digitalWrite(LEDR , HIGH);
delay(1000);
digitalWrite(LEDR , LOW);
delay(1000);
}

Arduino Delay
En Arduino Delay es una función que hace que el procesador espere. Por ejemplo, esta espera permite
no hacer nada y esperar hasta la ejecución de la siguiente instrucción durante un retardo de tiempo
definido. Entonces esta función tiene un parámetro de entrada del tipo entero, que es la espera en
milisegundos. De hecho, esta es una de las instrucciones más usadas en el lenguaje Arduino.

La función de Arduino Delay está basada en el uso de timers. Por ejemplo, la idea es que el procesador
espera a que el timer le notifique de su desbordamiento. Cuando esto ocurre se genera una interrupción
por Hardware. Esta interrupción ocurre en un tiempo conocido lo cual permite detener al procesador
durante un tiempo definido. Quizás la palabra detener no sea la más apropiada, es más una espera y
mientras espera está verificando o esperando a las interrupciones del timer.

Sintaxis:

delay( retardoMilisegundos );

Donde:
retardoMilisegundos. Entonces es un número entero que representa el valor del retardo en milisegundos.
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Definiendo el nivel del Pin: HIGH y LOW


Cuando leemos o escribimos en un pin digital solo hay dos posibles valores que el pin puede tomar:
HIGH o LOW.

HIGH
El significado de HIGH (en referencia a un pin) es un poco diferente dependiendo si el pin está
configurado como INPUT(de entrada) o OUTPUT(de salida). Cuando un pin está configurado como
INPUT con pinMode(), y leído con digitalRead(), el Arduino (ATmega) reportara HIGH si:

un voltaje mayor a 3 voltios está presente en el pin (tarjetas de 5V)

un voltaje mayor a 2 voltios está presente en el pin (tarjetas de 3.3V)

Un pin también puede ser configurado como INPUT con pinMode(), y subsecuentemente puesto a HIGH
con digitalWrite(). Esto habilitará los resistores internos de acoplamiento a positivo de 20K, que pondrán
el pin de entrada a HIGH a menos que sea bajado a LOW por el circuito externo. Así es como el
INPUT_PULLUP funciona y se describe en detalle más abajo.

Cuando un pin está configurado como OUTPUT con pinMode(), y puesto a HIGH con digitalWrite(), el pin
está a:

5 voltios (tarjetas de 5V)

3.3 voltios (tarjetas de 3.3V)

En este estado puede ser fuente de corriente, por ejemplo, encender un LED que esta conectado a tierra
mediante una resistencia en serie.

LOW
El significado de LOW tambien tiene puede ser diferente dependiendo si el pin esta puesto a INPUT o
OUTPUT. cuando un pin es configurado como INPUT con pinMode(), y leido con digitalRead(), el Arduino
(ATmega) reportara LOW si:

un voltaje menor que 3 voltios esta presente en el pin (tarjetas de 5V)

un voltaje menor que 2 voltios esta presente en el pin (tarjetas de 3.3V)

Cuando un pin esta configurado como OUTPUT con pinMode(), y puesto a LOW con digitalWrite(), el pin
esta a 0 voltios (tarjetas de 5V o de 3.3V). En este estado puede drenar corriente, por ejemplo, encender
un LED que esta conectado a +5 voltios (o +3.3 voltios) mediante un resistor en serie.
Colegio Cristiano de la Villa
ccvmanager@gmail.com – 02942-498-130 – Centro Cívico, Villa Pehuenia – Neuquén. PATAGONIA ARGENTINA

Definiendo el modo de los Pines Digitales: INPUT, INPUT_PULLUP, y OUTPUT


Los pines digitales pueden ser usados como INPUT, INPUT_PULLUP, o OUTPUT. Al cambiar un pin con
pinMode() cambiamos el comportamiento eléctrico del mismo.

Pines Configurados como INPUT (entrada)


Los pines del Arduino (ATmega) configurados como INPUT con pinMode() se dice que están en un
estado de alta-impedancia . Pines configurados como INPUT hacen muy poca demanda en el circuito en
el que se usan, equivalente a una resistencia en serie de 100 Megohms en frente del pin. Esto los hace
útiles para leer un sensor.

Si tienes tu pin configurado como tipo INPUT, y estás leyendo un switch, cuando el switch esté en estado
abierto el pin de entrada estará "flotando", con resultados impredecibles. Para asegurarse que la lectura
sea correcta cuando el switch está abierto, se debe usar una resistencia de acoplamiento a positivo o a
tierra. El propósito de esta resistencia es la de jalar al pin a un estado conocido cuando el switch está
abierto. Una resistencia de 10 K ohm es generalmente escogida, ya que es lo suficientemente baja para
prevenir una entrada flotante, y al mismo tiempo lo suficientemente alta para no usar demasiada
corriente cuando el switch está cerrado.
Si se usa una resistencia con acoplamiento a tierra, el pin de entrada será LOW cuando el switch está
abierto y HIGH cuando el switch este cerrado.
Si se usa una resistencia con acoplamiento a positivo, el pin de entrada será HIGH cuando el switch esté
abierto y LOW cuando el switch esté cerrado.

Pines Configurados comos INPUT_PULLUP (entrada con acoplamiento a positivo)


El microcontrolador ATmega microcontroller en el Arduino tiene resistencia acopladas a positivo
internamente (resistencias que se conectan al poder internamente) que puedes usar. Si deseas usar
estos en vez de resistencias externas, puedes usar el argumento INPUT_PULLUP en pinMode().
Los pines configurados como INPUT o INPUT_PULLUP se pueden dañar o destruir si son conectados a
voltajes bajo tierra ( negativos) o sobre el positivo (5V or 3V).

Pines Configurados como OUTPUT (salida)


Pines configurados como OUTPUT con pinMode() se dice que están en un estado de baja-impedancia.
Esto significa que pueden proveer una substancial cantidad de corriente a otros circuitos.Los pines del
ATmega pueden originar (proveer corriente) o consumir (absorber corriente) hasta 40 mA (milliamps) de
corriente hacia otros dispositivos/circuitos. Esto los hace útiles para dar energía a LEDs porque los LEDs
típicamente usan menos de 40 mA. Cargas mayores a 40 mA (por ejem. motores) necesitaran un
transistor u otro circuito de interfaz.
Los pines configurados como salidas se pueden dañar o destruir si son conectados a tierra o el canal
positivo de energía.

Eclesiastés 11:9-10 Alégrate, joven, en tu juventud, y tome placer tu corazón en los días de tu
adolescencia; y anda en los caminos de tu corazón y en la vista de tus ojos; pero sabe, que
sobre todas estas cosas te juzgará Dios. Quita, pues, de tu corazón el enojo, y aparta de tu
carne el mal; porque la adolescencia y la juventud son vanidad.

También podría gustarte