Sei sulla pagina 1di 32

Funciones

E/S Digital

pinMode()
Descripcin
Configura el pin especificado para comportarse como una entrada o una salida. Mira la descripcin de See the
description of pines digitales para ms informacin.
Sintaxis
pinMode(pin, modo)
Parametros
pin: el numero del pin que se desea configurar
modo: INPUT (Entrada) o OUTPUT (Salida)
Devuelve
Nada
Ejemplo
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

// LED conectado al pin digital 13

//configura el pin del LED como salida

//
//
//
//

Enciende el LED
espera un segundo
Apaga el LED
Espera un segundo

Nota
Una entrada analgica puede ser usada como un pin digital, refirindose a ellos desde el nmero 14 (entrada
analgica 0) a 19 (entrada analgica 5).

digitalWrite()
Descripcin
Escribe un valor HIGH o LOW hacia un pin digital.
Si el pin ha sido configurado como OUTPUT con pinMode(), su voltaje ser establecido al correspondiente
valor: 5V ( o 3.3V en tarjetas de 3.3V) para HIGH, 0V (tierra) para LOW.
Si el pin es configurado como INPUT, escribir un valor de HIGH con digitalWrite() habilitar una resistencia
interna de 20K conectada en pullup (ver el tutorial de pines digitales). Escribir LOW invalidar la resistencia.
La resistencia es sufuciente para hacer brillar un LED de forma opaca, si los LEDs aparentan funcionar, pero
no muy iluminados, esta puede ser la causa. La solucin es establecer el pin como salida con la funcin
pinMode().
NOTA: El pin digital nmero 13 es ms difcil de usar que los otros pines digitales por que tiene un LED y una
resistencia adjuntos, los cuales se encuentran soldados a la tarjeta, y la mayora de las tarjetas se encuentran
as. Si habilitas la resistencia interna en pullup, proporcionar 1.7V en vez de los 5V esperados, por que el LED
soldado en la tarjeta y resistencias bajan el nivel de voltaje, significando que siempre regresar LOW. Si debes
usar el pin nmero 13 como entrada digital, usa una resistencia externa conectada a pulldown.
Sintaxis
digitalWrite(pin, valor)
Parameters
pin: el nmero de pin
valor: HIGH o LOW
Devuelve
nada
Ejemplo
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

// LED conectado al pin digital 13

// establece el pin digital como salida

//
//
//
//

enciende el LED
espera por un segundo
apaga el LED
espera por un segundo

Establece el pin nmero 13 a HIGH, hace un retraso con la duracin de un segundo, y regresa el pin a LOW.
Nota
Los pines analogicos pueden ser usados como pines digitales con los nmeros 14 (entrada analogica nmero 0)
hasta 19 (entrada analogica nmero 5).

digitalRead()
Descripcin
Lee el valor de un pin digital especificado, HIGH o LOW.
Sintaxis
digitalRead(pin)
Parmetros
pin: el nmero de pin digital que quieres leer (int)
Devuelve
HIGH o LOW
Ejemplo
int ledPin = 13; // LED conecado al pin digital nmero 13
int inPin = 7;
// botn (pushbutton) conectado al pin digital nmero 7
int val = 0;
// variable donde se almacena el valor ledo
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT);
}
void loop()
{
val = digitalRead(inPin);
digitalWrite(ledPin, val);
}

// establece el pin digital nmero 13 como salida


// establece el pin digital nmero 7 como entrada

// leer el pin de entrada


// establece el LED al valor del botn

Establece el pin nmero 13 al mismo valor que el pin nmero 7, que es una entrada.
Nota
Si el pin no esta conectado a algo, digitalRead() puede regresar HIGH o LOW (y esto puede cambiar
aleatoriamente).
Los pines analogicos pueden ser usados como pines digitales con los nmeros 14 (entrada analogica nmero 0)
hasta 19 (entrada analogica nmero 5).

E/S Analgica

analogReference(tipo)
Descripcin
Configura el voltaje de referencia usado por la entrada analgica.La funcin analogRead() devolver un valor
de 1023 para aquella tensin de entrada que sea igual a la tensin de referencia. Las opciones son:

DEFAULT: Es el valor de referencia analgico que viene por defecto que de 5 voltios en placas Arduino
de y de 3.3 voltios en placas Arduino que funcionen con 3.3 voltios.

INTERNAL: Es una referencia de tensin interna de 1.1 voltios en el ATmega168 o ATmega328 y de


2.56 voltios en el ATmega8.

EXTERNAL: Se usar una tensin de referencia externa que tendr que ser conectada al pin AREF.
Parmetros
tipo: El tipo de referencia que se desea usar (DEFAULT, INTERNAL, or EXTERNAL).
Devuelve.
Nada.
Precaucin
Es recomendable que cuando se use la referencia de tensin externa se conecte al pin AREF usando una
resistencia de 5K. Esto evitar posibles daos internos en el ATmega si se la configuracin de la referencia
analgica es incompatible con el montaje fsico que se ha llevado a cabo. Tenga en cuenta que esa resistencia
afectar la tensin que se use como tensin de referencia ya que el pin AREF posee una resistencia interna de
32K. Ambas resistencias forman un divisor de tensin, por lo tanto, si por ejemplo se conecta una tensin de
2.5V con la resistencia de 5K la tensin que se utilice como tensin de referencia ser de 2.2V ya que esa ser la
tensin que caiga en el pin AREF debido al divisor de tensin al que se ha hecho referencia.
El conectar la tensin de referencia externa a travs de una resistencia permite pasar mediante software de
usar tensin de referencia interna a una tensin de referencia externa sin que la configuracin fsica del
hardware nos afecte la configuracin actual del conversor A/D.
Uso del pin AREF
La tensin aplicada en el pin AREF ser la que haga que el conversor A/D de su mxima lectura (1023) cuando
lea una tensin igual a la aplicada en ese pin. Tensin por debajo de esa tensin conectada a AREF ser
escalada proporcionalmente, as cuando se usa la tensin de referencia por defecto (DEFAULT) el valor que
nos devuelve una tensin de 2.5V en una entrada analgica ser 512.
La configuracin por defecto del Arduino es la de no tener nada conectado de forma externa al pin AREF (El
pin 21 del chip ATmega). En este caso la configuracin de la tensin de referencia sera DEFAULT lo cual
conecta AVCC(Alimentacin positiva +5V) de forma interna al pin AREF. Este pin es un pin de baja
impedancia (mucha corriente) por lo que si usando la configuracin DEFAULT de la tensin de referencia se
conecta otra tensin que no sea la que posee AVCC, podria daar el chip ATmega.
El pin AREF tambin puede conectarse de forma interna a una fuente de referencia de 1.1 voltios (o 2.54 en los
ATmega8) usando el comando analogReference(INTERNAL).Con esta configuracin las tensiones aplicada a
los pines analgicos que sean iguales a la tensin de referencia interna o superior nos devolvern 1023 cuando
se lleva a cabo su lectura con la funcin analogRead(). Tensiones ms bajas devolvern valores proporcionales,
por ejemplo, si tenemos una tensin de 0.55 voltios en el pin analgico, nos devolver 512.
La conexin entre la fuente de 1.1 voltios y el pin AREF es de muy alta impedancia (baja corriente), por lo que
la lectura de la tensin de 1.1 voltios solo se podr hacer con un multmetro que tenga alta impedancia de
entrada. Si se aplicase por error una tensin de referencia externa en el pin AREF mientras se est usando la
configuracin INTERNAL para la tensin de referencia, no daar el chip pero har que la tensin de
referencia sea la externa y no la de 1.1 voltios de la fuente interna. An as es recomendable que cualquier
tensin externa que se conecte al pin AREF se haga a travs de una resistencia de 5K para evitar el problema
mencionado arriba.

La correcta confiuguracin del software cuando se utiliza una tensin de referencia externa se hace mediante la
funcin analogReference(EXTERNAL). Eso desconectar ambas tensin de referencia internas del pin AREF y
por tanto ser la externa la cual govierne la tensin mxima leda por el ADC.
analogWrite()
Descripcin
Escribe un valor analgico (PWM) en un pin. Puede ser usado para controlar la luminosidad de un LED o la
velocidad de un motor. Despus de llamar a la funcin analogWrite(), el pin generar una onda cuadrada
estable con el ciclo de trabajo especificado hasta que se vuelva a llamar a la funcin analogWrite() (o una
llamada a las funciones digitalRead() o digitalWrite() en el mismo pin). La frecuencia de la seal PWM
sera de aproximadamente 490 Hz.
En la mayora de las placas Arduino (aquellas con el ATmega168 o ATmega328), se podr generar seales
PWM en los pines 3, 5, 6, 9, 10, y 11. En la placa Arduino Mega, se puede llevar a cabo con los pines desde el 2
hasta el pin 13. Las placas Arduino ms antiguas que posean el chip ATmega8 solo podrn usar la funcin
analogWrite() con los pines 9, 10 y 11. No hace faltar configurar el pin como salida para poder usar la funcin
analogWrite().
La funcin analogWrite no tienen ninguna relacin con los pines de entrada analgicos ni con la funcin
analogRead.
Sintaxis
analogWrite(pin, valor)
Parmetros
pin: Es el pin en el cual se quiere generar la seal PWM.
valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado) y 255 (siempre encendido).
Devuelve
Nada
Notas y problemas conocidos.
Las seales PWM generadas en los pines 5 y 6 poseern ciclos de trabajo superiores a lo esperado. Esto es as
por que para esos dos pines se utiliza el mismo temporizador que se utiliza en las funciones millis() y delay().
Este efecto se notar mucho ms en ciclos de trabajo bajos (por ejemplo de 0 a 10) y puede ser que aunque
configuremos esos pines con una seal de ciclo de trabajo cero no llegue a ser verdaderamente 0.
Ejemplo
Produce una seal donde conectamos el LED, cuyo ciclo de trabajo es proporcional a la tensin leda en el
potencimetro.
int ledPin = 9;
int analogPin = 3;
int val = 0;

// LED conectado al pin digital 9


// potencimetro conectado al pin 3
// variable en el que se almacena el dato ledo

void setup()
{
pinMode(ledPin, OUTPUT);
}

// sets the pin as output

void loop()
{
val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
por eso ajustamos

// lee la tensin en el pin


// los valores de analogRead van desde 0 a 1023 y
//los valores de analogWrite values van desde 0 a 255,
//el ciclo de trabajo a el valor ledo dividido por 4.

analogRead()
Descripcin
Lee el valor de tensin en el pin analgico especificado. La placa Arduino posee 6 canales (8 canalaes en el
Mini y Nano y 16 en el Mega)conectados a un conversor analgico digital de 10 bits. Esto significa que
convertir tensiones entre 0 y 5 voltios a un nmero entero entre 0 y 1023. Esto proporciona una resolucin en
la lectura de: 5 voltios / 1024 unidades, es decir, 0.0049 voltios (4.9 mV)por unidad. El rango de entrada
puede ser cambiado usando la funcin analogReference().
El conversor tarda aproximadamente 100 microsegundos (0.0001 segundos) en leer una entrada analgica por
lo que se puede llevar una tasa de lectura mxima aproximada de 10.000 lecturas por segundo.
Sintaxis
analogRead(pin)
Parmetros
pin: Indica el nmero del pin de la entrada analgica que deseamos leer (0 a 5 en la mayora de las placas, de 0
a 7 en las Mini y Nano y de 0 a 15 en las Mega)
Devuelve
int (0 a 1023)
Nota
Si la entrada analgica que vamos a leer no est conectada a nada, el valor que devolver la funcin
analogRead() fluctuar dependiendo de muchos valores (los valores de otras entradas analgicas, que tan cerca
est tu mano de la entrada en cuestin, etc.)
Ejemplo
int analogPin = 3;
// el pin analgico 3 conectado al dial de un potencimetro
(terminal central del potencimetro)
// los terminales exteriores del potencimetro conectados a +5V y
masa respectivamente
int val = 0;
// declaracin de la variable en la que se almacenar el valor
ledo por el conversor.
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(analogPin);
Serial.println(val);
}

//

Inicializacin del modulo Serial.

// lee el valor de tensin del pin


// enva el valor leido va serial.

analogWrite()
Descripcin
Escribe un valor analgico (PWM) en un pin. Puede ser usado para controlar la luminosidad de un LED o la
velocidad de un motor. Despus de llamar a la funcin analogWrite(), el pin generar una onda cuadrada
estable con el ciclo de trabajo especificado hasta que se vuelva a llamar a la funcin analogWrite() (o una
llamada a las funciones digitalRead() o digitalWrite() en el mismo pin). La frecuencia de la seal PWM
sera de aproximadamente 490 Hz.
En la mayora de las placas Arduino (aquellas con el ATmega168 o ATmega328), se podr generar seales
PWM en los pines 3, 5, 6, 9, 10, y 11. En la placa Arduino Mega, se puede llevar a cabo con los pines desde el 2
hasta el pin 13. Las placas Arduino ms antiguas que posean el chip ATmega8 solo podrn usar la funcin
analogWrite() con los pines 9, 10 y 11. No hace faltar configurar el pin como salida para poder usar la funcin
analogWrite().
La funcin analogWrite no tienen ninguna relacin con los pines de entrada analgicos ni con la funcin
analogRead.
Sintaxis
analogWrite(pin, valor)
Parmetros
pin: Es el pin en el cual se quiere generar la seal PWM.
valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado) y 255 (siempre encendido).
Devuelve
Nada
Notas y problemas conocidos.
Las seales PWM generadas en los pines 5 y 6 poseern ciclos de trabajo superiores a lo esperado. Esto es as
por que para esos dos pines se utiliza el mismo temporizador que se utiliza en las funciones millis() y delay().
Este efecto se notar mucho ms en ciclos de trabajo bajos (por ejemplo de 0 a 10) y puede ser que aunque
configuremos esos pines con una seal de ciclo de trabajo cero no llegue a ser verdaderamente 0.
Ejemplo
Produce una seal donde conectamos el LED, cuyo ciclo de trabajo es proporcional a la tensin leda en el
potencimetro.
int ledPin = 9;
int analogPin = 3;
int val = 0;

// LED conectado al pin digital 9


// potencimetro conectado al pin 3
// variable en el que se almacena el dato ledo

void setup()
{
pinMode(ledPin, OUTPUT);
}

// sets the pin as output

void loop()
{
val = analogRead(analogPin);
// lee la tensin en el pin
analogWrite(ledPin, val / 4); // los valores de analogRead van desde 0 a 1023 y los
valores de analogWrite values van desde 0 a 255, por eso ajustamos el ciclo de trabajo a
el valor ledo dividido por 4.
}

analogWrite()
Descripcin
Escribe un valor analgico (PWM) en un pin. Puede ser usado para controlar la luminosidad de un LED o la
velocidad de un motor. Despus de llamar a la funcin analogWrite(), el pin generar una onda cuadrada
estable con el ciclo de trabajo especificado hasta que se vuelva a llamar a la funcin analogWrite() (o una
llamada a las funciones digitalRead() o digitalWrite() en el mismo pin). La frecuencia de la seal PWM
sera de aproximadamente 490 Hz.
En la mayora de las placas Arduino (aquellas con el ATmega168 o ATmega328), se podr generar seales
PWM en los pines 3, 5, 6, 9, 10, y 11. En la placa Arduino Mega, se puede llevar a cabo con los pines desde el 2
hasta el pin 13. Las placas Arduino ms antiguas que posean el chip ATmega8 solo podrn usar la funcin
analogWrite() con los pines 9, 10 y 11. No hace faltar configurar el pin como salida para poder usar la funcin
analogWrite().
La funcin analogWrite no tienen ninguna relacin con los pines de entrada analgicos ni con la funcin
analogRead.
Sintaxis
analogWrite(pin, valor)
Parmetros
pin: Es el pin en el cual se quiere generar la seal PWM.
valor: El ciclo de trabajo deseado comprendido entre 0 (siempre apagado) y 255 (siempre encendido).
Devuelve
Nada
Notas y problemas conocidos.
Las seales PWM generadas en los pines 5 y 6 poseern ciclos de trabajo superiores a lo esperado. Esto es as
por que para esos dos pines se utiliza el mismo temporizador que se utiliza en las funciones millis() y delay().
Este efecto se notar mucho ms en ciclos de trabajo bajos (por ejemplo de 0 a 10) y puede ser que aunque
configuremos esos pines con una seal de ciclo de trabajo cero no llegue a ser verdaderamente 0.
Ejemplo
Produce una seal donde conectamos el LED, cuyo ciclo de trabajo es proporcional a la tensin leda en el
potencimetro.
int ledPin = 9;
int analogPin = 3;
int val = 0;

// LED conectado al pin digital 9


// potencimetro conectado al pin 3
// variable en el que se almacena el dato ledo

void setup()
{
pinMode(ledPin, OUTPUT);
}

// sets the pin as output

void loop()
{
val = analogRead(analogPin);
// lee la tensin en el pin
analogWrite(ledPin, val / 4); // los valores de analogRead van desde 0 a 1023 y los
valores de analogWrite values van desde 0 a 255, por eso ajustamos el ciclo de trabajo a
el valor ledo dividido por 4.
}

E/S Avanzada

tone()
Descripcin
Genera una onda cuadrada de la frecuencia especificada (y un 50% de ciclo de trabajo) en un pin. La duracin
puede ser especificada, en caso contrario la onda continua hasta que haya una llamada a noTone(). El pin
puede conectarse a un zumbador piezoelctrico u otro altavoz que haga sonar los tonos.
Slo puede generarse un tono cada vez. Si un tono est sonando en un pin diferente, la llamada a tone() no
tendr efecto. Si el tono est sonando en el mismo pin, la llamada establecer la nueva frecuencia.
El uso de la funcin tone() interferir con la salida PWM en los ins 3 y 11 (en otras placas distintas de la Mega).
NOTA: si quieres hacer sonar diferentes tonos en mltiples pins necesitas llamar a noTone() en un pin antes
de llamar a tone() en el siguiente pin.
Sintxis
tone(pin, frecuencia)
tone(pin, frecuencia, duracion)
Parmetros
pin: el pin en el que generar el tono
frecuencia: la frecuencia del tono en hercios.
duracion: la duracin del tono en milisegundos (opcional)
NOTA: las frecuencias audibles por el odo humano van de los 20Hz a los 20KHz por lo que el parmetro
"frecuencia" debera estar comprendido entre estos dos valores.
Retorno
Ninguno

noTone()
Descripcin
Detiene la generacin de la seal cuadrada que se activa al hacer uso de la funcin tone(). No tiene efecto si no
se est generando ningn tono.
NOTA: si quieres generar tonos diferentes en mltiples pines , necesitas usar la funcin noTone() en el pin
antes de llamar a la funcin tone() en el siguiente pin.
Sintaxis
noTone(pin)
Parmetros
pin: el pin en el cual se va a parar de generar el tono.
Devuelve
Nada

shiftOut()
Descripcin
Desplaza un byte de datos bit a bit. Empieza desde el bit ms significante (el de ms a la izquierda) o el menos
significante (el ms a la derecha). Cada bit se escribe siguiendo su turno en un pin de datos, despus de
conmutar un pin de reloj (seal de reloj) para indicar que el bit est disponible.
Esto es conocido como protocolo serie sncrono y es la forma comn que utilizan los microcontroladores para
comunicarse con sensores y con otros microcontroladores. Ambos dispositivos permanecen sincronizados, y se
comunican a velocidades cercanas a las mximas, hasta que ambos compartan la misma linea de reloj. En la
documentacin del harware interno de los chips se hace referencia a menudo a esta caracterstica como Serial
Peripheral Interface (SPI).
Sintaxis
shiftOut(pinDatos, pinReloj, ordenBits, valor)
Parametros
pinDatos: el pin en el cual extraer cada bit (int)
pinReloj: el pin que hay que conmutar cada vez que a un pinDatos le ha sido enviado el valor correcto (int)
ordenBits: en qu orden desplazar los bits; si hacia el MSBFIRST (bit ms significante primero) o hacia el
LSBFIRST (bit menos significante primero).
valor: los datos que rotar. (byte)
Retorno
Ninguno
Nota
El pinDatos y pinReloj deben estar ya configurados como salida con una llamada previa a pinMode().
shiftOut se encuentra actualmente configurada para extraer un byte (8 bits) por lo que necesita realizar una
operacin de dos pasos para extraer valores ms grandes de 255.
// Haz esto para una comunicacin serie MSBFIRST (primero el bit ms significativo)
int datos = 500;
// rota el byte ms alto
shiftOut(pinDatos, pinReloj, MSBFIRST, (datos >> 8));
// rota el byte ms bajo
shiftOut(datos, pinReloj, MSBFIRST, datos);
// O haz esto para una comunicacin serie LSBFIRST (primero el bit menos significativo)
datos = 500;
// rota el byte ms bajo
shiftOut(pinDatos, pinReloj, LSBFIRST, datos);
// rota el bit ms alto
shiftOut(pinDatos, pinReloj, LSBFIRST, (datos >> 8));

Ejemplo
Para ver el circuito asociado a este ejemplo, ver el tutorial para controlar un registro de desplazamiento
74HC595.
//**************************************************************//
// Name
: shiftOutCode, Hello World
//
// Author : Carlyn Maw,Tom Igoe
//
// Date
: 25 Oct, 2006
//
// Version : 1.0
//
// Notes
: Cdigo para utilizar un registro de desplazamiento//
//
: 74HC595 para contar de 0 a 255
//
//****************************************************************
//Pin conectado al pin ST_CP del 74HC595
int latchPin = 8;

10

//Pin connectado al pin SH_CP del 74HC595


int clockPin = 12;
////Pin conectado al pin DS del 74HC595
int dataPin = 11;
void setup() {
// Configura como salida los pines que se direccionan en el bucle principal (loop)
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//rutina de conteo
for (int j = 0; j < 256; j++) {
//pone a nivel bajo el latchPin y lo mantienen a nivel bajo todo el tiempo que ests
transmitindo
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
//vuelve a poner el latchPin a nivel alto para sealizar que
//no sigue siendo necesario eschuchar ms informacin
digitalWrite(latchPin, HIGH);
delay(1000);
}
}

pulseIn()
Descripcin
Lee un pulso (ya sea HIGH alto o LOW bajo) en un pin. Por ejemplo, si value es HIGH, pulseIn()
espera a que el pin sea HIGH, empieza a cronometrar, espera a que el pin sea LOW y entonces detiene la
medida de tiempo. Devuelve la anchura del pulso en microsegundos. Interrumpe la medida y devuelve 0 si el
pulso no ha comenzado en un tiempo especificado.
La medida del tiempo en esta funcin ha sido determinada de forma emprica y est sujeta a errores en pulsos
largos. Funciona correctamente en pulsos con una anchura de 10 microsegundos a tres minutos.
Sintaxis
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Parmetros
pin: el nmero del pin en el que se realiza la medida del pulso. (int)
value: tipo de pulso. Puede ser HIGH o LOW. (int)
timeout (opcional): el tiempo en microsegundos mximo a esperar antes de que se inicie el pulso. (unsigned
long)
Devuelve
el ancho del pulso (en microsegundos) 0 si el pulso no ha empezado antes del timeout (unsigned long)
Ejemplo
int pin = 7;
unsigned long duracion;
void setup()
{
pinMode(pin, INPUT);
}

11

void loop()
{
duracion = pulseIn(pin, HIGH);
}

Tiempo

millis()
Descripcin
Devuelve el tiempo en milisegundos transcurridos desde que se arranco la placa Arduino con el programa
actual. Este nmero de desbordar (volver a cero), despues de aproximadamente 50 das.
Parmetros
Ninguno
Devuelve
Tiempo en milisegundos desde que el programa se inici (long sin signo (unsigned long))
Ejemplo
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Tiempo: ");
time = millis();
//Imprime el tiempo desde que se inici el programa
Serial.println(time);
// espera un segundo para no enviar demasiados datos
delay(1000);
}

Consejo:
Ten en cuenta que el parametro que devuelve millis() es un long sin signo por lo que pueden producirse errores
si el programador intenta llevar a cabo operaciones matemticas con otros tipos de dato como enteros.

micros()
Descripcin
Devuelve el nmero de microsegundos desde que la placa Arduino comenz a correr el programa. Este nmero
eventualmente volver a 0 (overflow), luego de aproximadamente 70 minutos. A 16 MHz, en las placas
Arduino (por ejemplo, Duemilanove Nano), stas funcin tiene una resolucin de cuatro milisegundos (por
ejemplo, el valor devuelto es siempre mltiplo de 4). A 8 MHz, en placas Arduino (como LilyPad), tiene una
resolucin de 8 microsegundos.
Nota: En un milisegundo hay 1.000 microsegundos y 1,000,000 microsegundos en un segundo.
Parmetros
Ninguno.
Devuelve
El nmero de microsegundos desde el inicio del programa (unsigned long)

12

Ejemplo
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Tiempo: ");
time = micros();
//Imprime el tiempo desde el comienzo del programa
Serial.println(time);
// espera un segundo para no enviar datos una cantidad exagerada de datos.
delay(1000);
}

delay()
Descripcin
Pausa el programa por un tiempo determinado (en milisegundos) especificado por un parmetro. Hay 1000
milisegundos en un segundo.
Sintaxis
delay(ms)
Parmetros
ms: el nmero de milisegundos que se desea pausar el programa (unsigned long)
Devuelve
nada
Ejemplo
int ledPin = 13;

// LED conectado al pin digital 13.

void setup()
{
pinMode(ledPin, OUTPUT);
}

// declara que el pin digital se va a usar como salida

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

//
//
//
//

enciende el LED
espera durante un segundo
apaga el LED
espera durante un segundo

Advertencia
Aunque es fcil crear un LED parpadeante con la funcin delay() y muchos sketches usan pausas cortas para
estas tareas, el uso de delay() en un sketch tiene problemas importantes. Mientras se pausa el programa no se
leen sensores, ni se hacen clculos, ni puede haber manipulacin de los pines. En definitiva, hace que (casi)
toda la actividad se pare. Una alternativa para controlar el tiempo es el uso de la funcin millis() y el sketch
mostrado abajo. Normalmente se evita el uso de delay() para tiempos mayores de decenas de milisegundos
excepto en programas muy simples.
Algunas cosas siguen funcionando mientras se ejecuta la funcin delay() porque no se deshabilitan las
interrupciones. La comunicacin serie de los pines RX sigue funcionando, los valores de PWM (analogWrite) y
los estados de los pines se mantienen y las interrupciones siguen funcionando correctamente.

13

delayMicroseconds()
Descripcin
Detiene brevemente el programa por la cantidad en tiempo (en microsegundos) especificada como parmetro.
Existen mil microsegundos en un milisegundo, y un millon de microsegundos en un segundo.
Actualmente, el valor ms grande producir un retraso exacto es 16383. Esto puede cambiar en una futura
versin de Arduino. Para retrazos ms largos que algunos miles de microsegundos, deberas usar delay() .
Sintaxis
delayMicroseconds(us)
Parametros
us: el nmero de microsegundos a detener (unsigned int)
Devuelve
Nada
Ejemplo
int outPin = 8;
void setup()
{
pinMode(outPin, OUTPUT);
}
void loop()
{
digitalWrite(outPin, HIGH);
delayMicroseconds(50);
digitalWrite(outPin, LOW);
delayMicroseconds(50);
}

// selecciona el pin 8

// establece el pin digital como salida

//
//
//
//

establece en encedido el pin


espera por 50 microsegundos
establece en apagado el ping
espera por 50 microsegundos

configura el pin nmero 8 para trabajar como pin de salida. Envia una serie de pulsos con 100 microsegundos
de perodo.
Advertencias y problemas conocidos
Esta funcin trabaja de manera exacta en el rango de 3 microsegundos y valores superiores. No podemos
asegurar que la funcin dealyMicroseconds funcionar de forma precisa para valores menores de retraso.
As of Arduino 0018, delayMicroseconds() no longer disables interrupts. A partir de Arduino 0018,
delayMicroseconds() ya no invalida las interrupciones

14

Clculo

min(x, y)
Descripcin
Calcula el mnimo de dos nmeros.
Parametros
x: el primer nmero, cualquier tipo de dato
y: el segundo nmero, cualquier tipo de dato
Devuelve
El ms pequeo entre los dos nmeros.
Ejemplos
sensVal = min(sensVal, 100); // asigna sensVal al menor entre sensVal y 100
// asegurando que nunca pasar de 100.

Nota
La funcin max() es usualmente usada para limitar el lmite inferior del rango de una variable, mientras que la
funcin min() es usada para limitar el lmite superior del rango de una variable.
Advertencia
Debido a la forma en la que se ha implementado la funcin min(), evite realizar operaciones en el argumentos
de la funcin ya que podra producir errores.
min(a++, 100);
a++;
min(a, 100);
parntesis

// evite esto - puede producir errores

// use este mtodo en cambio - mantenga cualquier operacin fuera de los

max(x, y)
Descripcin
Calcula el mximo de dos nmeros.
Parmetros
x: El primer nmero, cualquier tipo de dato.
y: El segundo nmero, cualquier tipo de dato.
Devuelve
El mayor de ambos parmetros.
Ejemplo
sensVal = max(senVal, 20); // asigna a sensVal su propio valor o, de ser superior, 20.

15

// (una forma efectiva de asegurarse que el valor mnimo de


senVal sea 20)

Nota
max() suele ser usado para restringir el valor ms bajo del rango de una variable, mientras que min() es
utilizado para restringir el valor mximo del rango.
Atencin
Debido a la forma en que la funcin max() es implementada, debes evitar usar otras funciones al definir los
parmetros, puede derivar en resultados incorrectos.
max(a--, 0);

// evitar esto - puede dar resultados incorrectos.

a--;
max(a, 0);

// en su lugar, hacerlo as // mantener cualquier operacin fuera de los parntesis.

abs(x)
Descripcin
Calcula el valor absoluto de un nmero.
Parmetros
x: El numero cuyo valor absoluto deseamos calcular
Devuelve
x: si x is mayor o igual que 0.
-x: si x es menor que 0.
Precaucin
Debido a la forma en la que se ha implementado la funcin abs(), evite usar otras funciones como parmetro
debido a que puede ocasionar que se devuelva un resultado incorrecto.
abs(a++);
a++;
abs(a);

// evite esto - produce errores en el resultado

// hazlo de esta manera // mantenga cualquier otra operacin fuera de la funcin

constrain(x, a, b)
Descripcin
Restringe un nmero a un rango definido.
Parmetros
x: el nmero a restringir, cualquier tipo de datos.
a: El nmero menor del rango, cualquier tipo de datos.
b: El nmero mayor del rango, cualquier tipo de datos.
Retorna
x: si x est entre a y b
a: si x es menor que a
b: si x es mayor que b

16

Ejemplo
sensVal = constrain(sensVal, 10, 150);
// limita el valor del sensor entre 10 y 150

map(value, fromLow, fromHigh, toLow, toHigh)


Descripcin
Re-mapea un nmero desde un rango hacia otro. sto significa que, un valor (value) con respecto al rango
fromLow-fromHight ser mapeado al rango toLow-toHigh.
No se limitan los valores dentro del rango, ya que los valores fuera de rango son a veces objetivos y tiles. La
funcin constrain() puede ser usada tanto antes como despus de sta funcin, si los lmites de los rangos
son deseados.
Ten en cuenta que los lmites "inferiores" de algn rango pueden ser mayores o menores que el lmite
"superior" por lo que map() puede utilizarse para revertir una serie de nmeros, por ejemplo:
y = map(x, 1, 50, 50, 1);

La funcin maneja correctamente tambin los nmeros negativos, por ejemplo:


y = map(x, 1, 50, 50, -100);

tambin es vlido y funciona correctamente.


La funcin map() usa matemtica de enteros por lo que no generar fracciones, aunque fuere el resultado
correcto. Los resultados en fracciones se truncan, y no son redondeados o promediados.
Parmetros
value: el nmero (valor) a mapear.
fromLow: el lmite inferior del rango actual del valor.
fromHigh: el lmite superior del rango actual del valor.
toLow: lmite inferior del rango deseado.
toHigh: lmite superior del rango deseado.
Devuelve
El valor mapeado.
Ejemplo
/* Mapea un valor anlogo a 8 bits (0 a 255) */
void setup() {}
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}

Apndice
Para los interesados en el funcionamiento de la funcin, aqu est su cdigo:

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

17

pow(base, exponente)
Descripcin
Calcula el valor de un nmero elevado a otro nmero. Pow() puede ser usado para elevar un nmero a una
fraccin. Esta funcin es til para generar datos exponenciales o curvas.
Parmetros
base: base que queremos elevar (float) (Coma flotante)
exponente: la potencia a la que se quiere elevar la base (float) (Coma flotante)
Devuelve
El resultado de la exponenciacin (double)(Doble)
Ejemplo
Mira la funcin fscale en la librera del cdigo.

sqrt(x)
Descripcin
Calcula la raz cuadrada de un numero.
Parmetros
x: el numero, cualquier tipo de dato
Devuelve
doble, la raz cuadrada del numero.

Trigonometra

sin(rad)
Descripcin
Calcula el seno de un ngulo (en raianes). El resultado ser entre -1 y 1.
Parametros
rad: el ngulo en radianes (float)

18

Retorno
El seno del ngulo (double)
Nota
Serial.print() y Serial.println() no soportan la impresin de valores de tipo float.

cos(rad)
Descripcin
Calcula el coseno de un ngulo (en radianes). El resultado estar entre -1 y 1.
Parmetros
rad: el ngulo en radianes (float)
Retorna
El coseno del ngulo ("double")
Nota
Serial.print() y Serial.println() no soportan actualmente la impresin de nmeros con decimales.

tan(rad)
Descripcin
Calcula la tangente de un ngulo (en radianes). El resultado estar entre el menos infinito y el infinito.
Parmetros
rad: el ngulo en radianes (float)
Retorno
La tangente del ngulo (double)
Nota
Serial.print() y Serial.println() no soportan actualmente imprimir variales de tipo float.

Nmeros aleatorios

randomSeed(seed)
Descripcin
randomSeed() inicializa el generador de nmeros pseudoaleatorios, hacindole empezar en un punto arbitrario
de su secuencia aleatoria. Esta secuencia, aunque muy larga y aleatoria, es siempre la misma.
Si es importante que la secuencia de valores generada por random() difiera en ejecuciones sucesivas de un
programa, es recomendable utilizar randomSeed() (seed en ingls, semilla) para inicializar el generador de
nmeros aleatorios con una entrada mnimamente aleatoria como analogRead() en un pin desconectado.

19

No obstante, puede ser til usar secuencias pseudoaleatorias que se repitan exactamente. Esto se consigue
llamando a randomSeed() con un nmero fijo antes de empezar la generacin de la secuencia.
Parmetros
long, int - recibe un nmero para generar la semilla.
Devuelve
no devuelve nada
Example
long numAleatorio;
void setup(){
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop(){
randNumber = random(300);
Serial.println(numAleatorio);
delay(50);
}

random()
Descripcin
La funcin random genera nmeros pseudoaleatorios.
Sintaxis
random(max)
random(min, max)
Parmetros
min - lmite inferior del valor aleatorio, inclusive (opcional)
max - lmite superior del valor aleatorio, exclusive (se devuelve hasta el anterior)
Devuelve
un nmero aleatorio entre min y max (long)
Nota:
Si es importante que la secuencia de valores generada por random() difiera en ejecuciones sucesivas de un
programa, es recomendable utilizar randomSeed() (seed en ingls, semilla) para inicializar el generador de
nmeros aleatorios con una entrada mnimamente aleatoria como analogRead() en un pin desconectado.
No obstante, puede ser til usar secuencias pseudoaleatorias que se repitan exactamente. Esto se consigue
llamando a randomSeed() con un nmero fijo antes de empezar la generacin de la secuencia.
Ejemplo
long numAleatorio;
void setup(){
Serial.begin(9600);
// si la entrada analgica 0 no est conectada,
// la llamada a randomSeed() recibir ruido esttico
// (analgico) y se generarn diferentes semillas
// cada vez que se ejecute el sketch.
randomSeed(analogRead(0));
}

20

void loop() {
// escribe un nmero aleatorio de 0 a 299
numAleatorio = random(300);
Serial.println(numAleatorio);
// escribe un nmero aleatorio de 10 a 19
numAleatorio = random(10, 20);
Serial.println(numAleatorio);
}

delay(50);

Bits y Bytes

lowByte()
Descripcin
Extracts the low-order (rightmost) byte of a variable (e.g. a word). Extrae el byte de orden inferior (derecha) de
una variable (por ejemplo, una palabra).
Sintaxis
lowByte(x)
Parmetros
x: un valor de cualquier tipo.
Devuelve
byte

highByte()
Descripcin.
Extrae el byte de orden superior (el ms a la izquierda) de una palabra (o del segundo byte ms bajo de un tipo
de dato largo)
Sintaxis.
highByte(x)
Parametros.
x: un valor de cualquier tipo.
Retorna:
byte

bitRead()
Descripcin
Lee un bit de un nmero.

21

Sintaxis
bitRead(x, n)
Parmetros
x: el nmero en el que queremos leer
n: cual de los bits queremos leer, empezando por el 0 para el bit menos significativo (el que est ms a la
derecha)
Devuelve
el valor del bit (0 o 1).

bitWrite()
Descripcin
Escribe un bit de una variable numrica.
Sintaxis
bitWrite(x, n, b)
Parmetros
x: la variable numrica en la que vamos a escribir
n: en cual de los bits vamos a escribir, empezando en el 0 para el bit menos significativo (el que est ms a la
derecha)
b: el valor a escribir en el bit (0 o 1)
Devuelve
nada

bitSet()
Descripcin
Pone a uno un bit de una variable numrica.
Sintaxis
bitSet(x, n)
Parmetros
x: la variable numrica en la que est el bit a poner a uno
n: cual de los bits queremos poner a uno, empezando en el 0 para el bit menos significativo (el que est ms a
la derecha)
Devuelve
nada

bitClear()
Descripcin
Limpia (pone a cero) un bit de una variable numrica.

22

Sintaxis
bitClear(x, n)
Parmetros
x: la variable numrica con el bit a limpiar
n: cual de los bits queremos limpiar, empezando en el 0 por el bit menos significativo (el que est ms a la
derecha)
Devuelve
nada

bit()
Descripcion
Calcula el valor del bit especificado (bit 0 es el 1, bit1 es el 2, bit2 es 4, etc.).
Sintaxis
bit(n)
Parmetros
n: el bit cuyo valor se quiere calcular.
Devuelve
El valor del bit.

Interrupciones externas

attachInterrupt(interrupcion, funcion, modo)


Descripcin
Especifica la funcin a la que invocar cuando se produce una interrupcin externa. Reemplaza cualquier
funcin previa que estuviera enlazada a la interrupcin. La mayora de las placas Arduino tienen dos
interrupciones externas: Las nmero 0 (en el pin digital 2) y la 1 (en el pin digital 3). La Arduino Mega tiene
otras cuatro: Las nmero 2 (pin 21), 3 (pin 20), 4 (pin 19) y 5 (pin 18).

Parmetros
interrupcion: el nmero de la interrupcin (int)
funcion: la funcin a la que invocar cuando la interrupcin tiene lugar; esta funcin no debe tener parmetros
ni devolver nada. Esta funcin es a veces referenciada como rutina de interrupcin de servicio
modo define cuando la interrupcin debe ser disparada. Hay cuatro constantes predefinidas como valores
vlidos:
LOW para disparar la interrupcin en cualquier momento que el pin se encuentre a valor bajo(LOW).
CHANGE para disparar la interrupcin en culquier momento que el pin cambie de valor.
RISING para disparar la interrupcin cuando el pin pase de valos alto (HIGH) a bajo (LOW).
FALLING para cuando el pin cambie de valor alto (HIGH) a bajo (LOW)
Retorno
Ninguno

23

Nota
Dentro de la funcin enlazada, la funcin delay() no funciona y el valor devuelto por la funcin millis() no se
incrementar. Los datos serie recibidos en el transcurso de esta interrupcin pueden perderse. No deberas
declarar como voltil cualquier variable que modifiques dentro de la funcin.
Usando las interrupciones
Las interrupciones son tiles para hacer que las cosas sucedan automticamente en programas para
microcontroladores, y puedan ayudar a resolver problemas de temporizacin. Una buena tarea en la que
utilizar interrupciones podra ser leer un encoder rotacional, monitorizando la entrada del usuario.
Si quisieras asegurarte de que un programa siempre captura los pulsos de un encoder rotacional, sin perder
nunca un pulso, sera muy complicado escribir un programa que haga otra cosa, puesto que el programa
debera estar constantemente consultando las lneas del sensor del encoder, de forma que capture los pulsos
cuando tienen lugar. Otros sensores tienen un interfaz dinmico similar, como intentar leer un sensor de
sonido que intenta capturar un click, o un sensor de ranuras por infrarrojos (fotointerruptor) tratando de
capturar el paso de una moneda. En todas estas situaciones, usar una interrupcin, libera al microcontrolador
de realizar otras tareas sin echar en falta el "timbre".
Ejemplo
int pin = 13;
volatile int estado = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, parpadeo, CHANGE);
}
void loop()
{
digitalWrite(pin, estado);
}
void parpadeo()
{
estado = !estado;
}

detachInterrupt(interrupt)
Descripcin
Apaga la interrupcin dada.
Parmetros
interrupt: el nmero de interrupcin a invalidar (0 o 1).

Interrupciones

interrupts()
Descripcin
Activa las interrupciones (despus de haberlas desactivado con noInterrupts(). Las interrupciones permiten
que se ejecuten ciertas tareas en segundo plano que estn activadas por defecto. Algunas funciones no
funcionarn correctamente mientras las interrupciones estn desactivadas y la comunicacin entrante puede

24

ser ignorada. Las interrupciones pueden perturbar ligeramente la temporizacin en el cdigo y deben ser
desactivadas slo para partes particularmente crticas del cdigo.
Parmetros
Ninguno
Devuelve
No devuelve nada
Ejemplo
void setup() {}
void loop()
{
noInterrupts();
// cdigo crtico y sensible al tiempo
interrupts();
// otro cdigo
}

noInterrupts()
Descripcin
Desactiva las interrupciones (pueden reactivarse usando interrupts()). Las interrupciones permiten que las
operaciones importantes se realicen de forma transparente y estn activadas por defecto. Algunas funciones no
funcionarn y los datos que se reciban sern ignorados mientras que las interrupciones estn desactivadas. Las
interrupciones pueden perturbar ligeramente el tiempo de temporizado, sin embargo puede que sea necesario
desactivarlas para alguna parte crtica del cdigo.
Parmetros
Ninguno
Devuelve
Nada
Ejemplo
void setup() {}
void loop()
{
noInterrupts();
// Cdigo dependiente crticamente del tiempo
interrupts();
// resto del cdigo aqu
}

Comunicacin

Serial
Se utiliza para la comunicacin entre la placa Arduino y un ordenador u otros dispositivos. Todas las placas
Arduino tienen al menos un puerto serie (tambin conocido como UART o USART): Serial. Se comunica a
travs de los pines digitales 0 (RX) y 1 (TX), as como con el ordenador mediante USB. Por lo tanto, si utilizas
estas funciones, no puedes usar los pines 0 y 1 como entrada o salida digital.

25

Puedes utilizar el monitor del puerto serie incorporado en el entorno Arduino para comunicarte con la placa
Arduino. Haz clic en el botn del monitor de puerto serie en la barra de herramientas y selecciona la misma
velocidad en baudios utilizada en la llamada a begin().
La placa Arduino Mega tiene tres puertos adicionales de serie: Serial1 en los pines 19 (RX) y 18 (TX), Serial2
en los pines 17 (RX) y 16 (TX), Serial3 en los pines 15 (RX) y 14 (TX). Para utilizar estos pines para
comunicarse con el ordenador personal, necesitars un adaptador USB adicional a serie, ya que no estn
conectados al adaptador USB-Serie de la placa Arduino Mega. Para usarlos para comunicarse con un
dispositivo serie externo TTL, conecta el pin TX al pin RX del dispositivo, el RX al pin TX del dispositivo, y el
GND de tu Arduino Mega a masa del dispositivo. (No conectes estos pines directamente a un puerto serie
RS232, que operan a +/- 12V y esto puede daar la placa Arduino.)

Funciones
begin()
end()
available()
read()
flush()
print()
println()
write()

begin()
Descripcin
Establece la velocidad de datos en bits por segundo (baudios) para la transmisin de datos en serie. Para
comunicarse con el computador, utilice una de estas velocidades: 300, 1200, 2400, 4800, 9600, 14400, 19200,
28800, 38400, 57600 o 115200. Sin embargo, puedes especificar otras velocidades - por ejemplo, para
comunicarte a travs de los pines 0 y 1 con un componente que requiere una velocidad de transmisin en
particular.
Sintaxis
Serial.begin(speed)
Solamente en Arduino Mega:
Serial1.begin(speed)
Serial2.begin(speed)
Serial3.begin(speed)
Parmetros
speed: Velocidad en bits por segundo (baudios) - long
Devuelve
nada
Ejemplo:
void setup() {
Serial.begin(9600);
bps
}

// abre el puerto serie y establece la velocidad en 9600

void loop() {}

Ejemplo para Arduino Mega:


// Arduino Mega usando sus 4 puertos serie
// (Serial, Serial1, Serial2, Serial3),
// con diferentes velocidades de datos:

26

void setup(){
Serial.begin(9600);
Serial1.begin(38400);
Serial2.begin(19200);
Serial3.begin(4800);

Serial.println("Hola ordenador");
Serial1.println("Hola Serial 1");
Serial2.println("Hola Serial 2");
Serial3.println("Hola Serial 3");

void loop() {}

end()
Descripcin
Desactiva la comunicacin serie, permitiendo a los pines RX and TX ser usados como entradas o salidas
digitales. Para reactivar la comunicacin serie, llama al mtodo Serial.begin().
Sintaxis
Serial.end()
Solamente en Arduino Mega:
Serial1.end()
Serial2.end()
Serial3.end()
Parmetros
ninguno
Devuelve
nada

available()
Descripcin
Devuelve el nmero de bytes (caracteres) disponibles para ser leidos por el puerto serie. Se refiere a datos ya
recibidos y disponibles en el buffer de recepcin del puerto (que tiene una capacidad de 128 bytes).
Sintaxis
Serial.available()
Slo para Arduino Mega:
Serial1.available()
Serial2.available()
Serial3.available()

27

Parametros
ninguno
Devuelve
el nmero de bytes disponibles para ser ledos
Ejemplo
int incomingByte = 0;

// para los datos de entrada serie

void setup() {
Serial.begin(9600);
}

// abre el puerto serie, establece la velocidad a 9600 bps

void loop() {
// enva datos solo cuando recibe datos:
if (Serial.available() > 0) {
// lee el byte de entrada:
incomingByte = Serial.read();
// muestra lo que tiene:
Serial.print("He recibido: ");
Serial.println(incomingByte, DEC);
}

Ejemplo Arduino Mega:


void setup() {
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
// lee desde el puerto 0, enva al puerto 1:
if (Serial.available()) {
int inByte = Serial.read();
Serial1.print(inByte, BYTE);

}
// lee del puerto 1, enva al puerto 0:
if (Serial1.available()) {
int inByte = Serial1.read();
Serial.print(inByte, BYTE);
}

read()
Descripcin
Lee los datos entrantes del puerto serie.
Sintaxis
Serial.read()
Solamente en Arduino Mega:
Serial1.read()
Serial2.read()
Serial3.read()

28

Parmetros
Ninguno
Devuelve
el primer byte disponible recibido por el puerto serie (devuelve -1 si no hay datos disponibles) - int
Ejemplo
int incomingByte = 0;

// para el byte leido

void setup() {
Serial.begin(9600);
}

// abre el puerto serie a 9600 bps

void loop() {
// envia datos solamente cuando recibe datos
if (Serial.available() > 0) {
// lee el byte entrante:
incomingByte = Serial.read();
// dice lo que ha recibido:
Serial.print("He recibido: ");
Serial.println(incomingByte, DEC);
}

flush()
Descripcin
Vaca el bfer de entrada de datos en serie. Es decir, cualquier llamada a Serial.read () o Serial.available ()
devolver slo los datos recibidos despus la llamada ms reciente a Serial.flush ().
Sintaxis
Serial.flush()
Solamente en Arduino Mega:
Serial1.flush()
Serial2.flush()
Serial3.flush()
Parmetros
ninguno
Retorna
nada

print()
Descripcin
Imprime los datos al puerto serie como texto ASCII. Este comando puede tomar muchas formas. Los nmeros
son impresos mediante un juego de caracteres ASCII para cada dgito. Los valores de tipo "float" son impresos
en forma de dgitos ASCII con dos decimales por defecto. Los valores tipo "byte" se envan como un nico
carcter. Los caracteres y las cadenas se envan tal cual. Por ejemplo:

Serial.print(78) imprime "78"

Serial.print(1.23456) imprime "1.23"

29

Serial.print(byte(78)) imprime "N" (cuyo cdigo ASCII es 78)


Serial.print('N') imprime "N"
Serial.print("Hello world.") imprime "Hello world."
Un segundo parmetro opcional especifica la base (formato) a usar; los valores permitidos son BYTE, BIN
(binarios o base 2), OCT (octales o base 8), DEC (decimales o base 10), HEX (hexadecimales o base 16). Para
nmeros de coma flotante, este parmetro especifica el numero de posiciones decimales a usar. Por ejemplo:
Serial.print(78, BYTE) imprime "N"
Serial.print(78, BIN) imprime "1001110"
Serial.print(78, OCT) imprime "116"
Serial.print(78, DEC) imprime "78"
Serial.print(78, HEX) imprime "4E"
Serial.println(1.23456, 0) imprime "1"
Serial.println(1.23456, 2) imprime "1.23"
Serial.println(1.23456, 4) imprime "1.2346"
Sintaxis
Serial.print(val)
Serial.print(val, format)
Parmetros
val: el valor a imprimir - de cualquier tipo
format: especifica el nmero de la base (para nmeros enteros) o el nmero de posiciones decimales (para
nmeros de coma flotante o tipo "float")
Devuelve
Nada
Ejemplo:
/*
Usa un bucle FOR para los datos e imprime un nmero en varios formatos.
*/
int x = 0;
// variable
void setup() {
Serial.begin(9600);
}

// abre el puerto serie a 9600 bps:

void loop() {
// print labels
Serial.print("SIN FORMATO");
Serial.print("\t");

// imprime un texto
// imprime un tabulado

Serial.print("DEC");
Serial.print("\t");
Serial.print("HEX");
Serial.print("\t");
Serial.print("OCT");
Serial.print("\t");
Serial.print("BIN");
Serial.print("\t");
Serial.println("BYTE");
for(x=0; x< 64; x++){

// solo una parte de la tabla

// imprime en varios formatos:


Serial.print(x);
// imprime como codificado ASCII decimal - igual que "DEC"
Serial.print("\t");
// imprime un tabulado

30

Serial.print(x, DEC);
Serial.print("\t");

// imprime como codificado ASCII decimal


// imprime un tabulado

Serial.print(x, HEX);
Serial.print("\t");

// imprime como codificado ASCII hexadecimal


// imprime un tabulado

Serial.print(x, OCT);
Serial.print("\t");

// imprime como codificado ASCII octal


// imprime un tabulado

Serial.print(x, BIN);
Serial.print("\t");

// imprime como codificado ASCII binario


// imprime un tabulado

Serial.println(x, BYTE);
// imprime el valor en bruto del byte,
//
y aade el salto de linea con "println"
delay(200);
// espera 200 milisegundos

}
Serial.println("");

//imprime otro salto de linea

println()
Descripcin
Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13, o '\r') y un
carcter de avance de lnea (ASCII 10, o '\n'). Este comando tiene la misma forma que Serial.print ().
Sintaxis
Serial.println(val)
Serial.println(val, format)
Prarmetros
val: el valor a imprimir - de cualquier tipo
format: especifica el nmero de la base (para nmeros enteros) o el nmero de posiciones decimales (para
nmeros de coma flotante o tipo "float")
Devuelve
Nada
Example:
/*
Analog input
Lee el pin analgico 0, e imprime su valor por el puerto serie.
created 24 March 2006
by Tom Igoe
*/
int analogValue = 0;

// variable para guardar el valor analogico

void setup() {
// abre el puerto serie a 9600 bps:

31

Serial.begin(9600);
}
void loop() {
// lee la entrada analogica en el pin 0:
analogValue = analogRead(0);
// imprime el valor en varios formatos:
Serial.println(analogValue);
// imprime
Serial.println(analogValue, DEC); // imprime
Serial.println(analogValue, HEX); // imprime
Serial.println(analogValue, OCT); // imprime
Serial.println(analogValue, BIN); // imprime
Serial.println(analogValue, BYTE); // imprime

como ASCII decimal


como ASCII decimal
como ASCII hexadecimal
como ASCII octal
como ASCII binario
el valor del byte

// espera 10 milisegundos antes de la siguiente lectura.


delay(10);
}

write()
Descripcin
Escribe datos binarios en el puerto serie. Estos datos se envan como un byte o una serie de bytes; para enviar
los caracteres que representan los dgitos de un nmero usar funcion print () en su lugar.
Syntax
Serial.write(val)
Serial.write(str)
Serial.write(buf, len)
Arduino Mega tambien soporta: Serial1, Serial2, Serial3 (en lugar de Serial)
Parmetros
val: un valor para enviar como un solo byte
str: una cadena 'string' para enviar como una serie de bytes
buf: un 'array' para enviar como una serie de bytes
len: longitud del bfer

32

Potrebbero piacerti anche