bclose

Guia a la programacion de Arduino, Funciones II

Funciones de comunicaciones

 

Funciones de comunicaciones en modo “stream”  

Stream” viene a querer decir algo así como “transmisión de datos en secuencia”. Es la clase de transmisión de base para secuencias de caracteres y binarias. Este modo de transmisión no se usa directamente sino que es invocado cada vez que usas una función que está basada en él (es decir, funciones que heredan de la clase “Stream”).

La clase de transmisión de datos define las funciones de lectura en el Arduino. Cuando uses cualquier función “core” que use read() u otro método similar, puedes asumir sin riesgo a equivocarte que esta función está llamando a la clase “Stream”. Para funciones como print(), la clase “Stream” hereda de la clase “Print”.

Estas son algunas de las librerías basadas en la clase “Stream” incluyen:

 
  • Serial
  • Wire
  • Ethernet Client
  • Ethernet Server
  • SD
 

 

La Función available()  

Descripción:

Esta función devuelve el número de bytes (caracteres u octetos) que se encuentran disponibles en el stream para su lectura. Esta función forma parte de la clase “Stream” y es llamada por cualquier clase que herede de “Stream” (como por ejemplo las clases “Wire” y “Serial” que veremos más tarde).

Sintaxis:

stream.available()

Parameters

stream: una instancia de la clase que hereda de “Stream”.

Devuelve:

int: el número de bytes disponibles para lectura.

Ver también:

-Stream

 

La función read()   

 

Descripción:

Read() lee caracteres de un stream de entrada al buffer. Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de “Stream” (como por ejemplo las clases “Wire” y “Serial” que veremos más tarde).

Sintaxis:

stream.read()

Parámetros:

stream : una instancia de una clase que hereda de Stream.

Devuelve:

El primer byte de datos de entrada disponibles (o -1 si no hay datos disponibles)

Ver también:

Stream

 

La función flush()   

Descripción:

Flush() limpia el buffer una vez que todos los caracteres de salida han sido enviados.  Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream.

Sintaxis:

stream.flush() 

Parámetros:

stream : una instancia de una clase que hereda de Stream.

Devuelve:

Un valor tipo boolean

Ver también:

-Stream

 

 La function find()   

Descripción:

find() lee datos del stream hasta que el string (o secuencia de caracteres) buscado del tamaño especificado se ha encontrado. La función devuelve TRUE si se ha encontrado el string o FALSE si se agotó el tiempo máximo de lectura sin que se hubiera encontrado el string buscado. Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.find(target)

Parámetros:

stream : una instancia de una clase que hereda de Stream.

target : el string buscado. Tipo: char

Devuelve:

Un valor tipo boolean

 Ver también:

-Stream

 

 La function findUntil()   

Description

findUntil() lee datos del stream hasta que el string buscado con la longitud especificada o el carácter terminador de string se han encontrado. La función devuelve TRUE si se ha encontrado el string o FALSE si se agotó el tiempo máximo de lectura sin que se hubiera encontrado el string buscado. Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.findUntil(target, terminal)

Parámetros:

stream : una instancia de una clase que hereda de Stream.

target : el string buscado. Tipo: char

terminal : el carácter terminador de string. Tipo: char 

Devuelve:

Un valor tipo boolean

Ver también:

-Stream

 

 La function peek()   

Descripción:

La función peek() lee un byte del fichero sin avanzar el apuntador hacia el próximo. Es decir, ulteriores llamadas a peek() devolverían el mismo valor. Asimismo, la próxima llamada a read() devolvería también el mismo carácter (es decir, peek() lee un carácter del stream de entrada, pero no mueve el apuntador hacia el siguiente carácter). Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.peek()

Parámetros:

stream : una instancia de una clase que hereda de Stream.

Devuelve:

El próximo byte (o carácter) o -1 si no hay bytes disponibles.

Ver también:

-available() 
-read()

 

 La function readBytes()   

Descripción:

readBytes() lee caracteres de un stream y los deposita en un buffer. La function termina en el momento en que la longitud especificada (del string de caracteres leído) ha sido alcanzada, o si el tiempo máximo de lectura ha expirado (ver la función setTimeout()). readBytes() devuelve el número de bytes depositados en el buffer o un 0 cuando no se encontraron datos válidos en la entrada.

Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.readBytes(buffer, length) 

Parámetros:

stream : una instancia de una clase que hereda de Stream.

buffer: el buffer o zona de almacenamiento intermedia en el que se depositarán los bytes. Tipo: char[] o byte[]

length : el número de bytes que se quieren leer. Tipo: int

Devuelve:

El número de bytes depositados en el buffer

Ver también:

-Stream

 

 La function readBytesUntil()   

Descripción:

readBytesUntil()lee caracteres de un stream y los deposita en un buffer. La función termina si: a) el carácter especificado ha sido encontrado (character), b) se ha leído el número de caracteres especificados (lenght) o c) el tiempo máximo de lectura ha expirado (ver la función setTimeout()). readBytesUntil() devuelve el número de bytes depositado en el buffer. Un 0 significa que no se encontraron datos válidos en la entrada.

Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.readBytesUntil(character, buffer, length) 

Parámetros:

stream : una instancia de una clase que hereda de Stream.
character: el carácter buscado. Tipo: char
buffer: el buffer en el que se depositarán los bytes. Tipo: char[] o byte[]
length : el número de bytes que se quieren leer. Tipo: int

Devuelve:

El número de bytes depositados en el buffer

Ver también:

-Stream

 

  La function readString()   

Descripción:

readString() lee caracteres de un stream y los escribe en un string. La función termina si el tiempo máximo de lectura ha expirado (ver la función setTimeout()).  Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.readString()

Parámetros:

Ninguno

Devuelve:

Un string leído de un stream.

Ver también:

-Stream

 

 La function readStringUntil()   

Descripción:

readStringUntil() lee caracteres de un stream y los escribe en un string. La función termina si el carácter especificado ha sido encontrado (character) o el tiempo máximo de lectura ha expirado (ver la función setTimeout()).  Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.readString(terminator) 

Parámetros:

terminator : el carácter buscado. Tipo: char

 Devuelve:

El string completo leído de un stream, hasta encontrar el carácter terminador.

 Ver también:

-Stream

 

 La function parseInt()   

Descripción:

parseInt() devuelve el primer número entero (de tipo long) válido a partir de la posición actual. Los caracteres iniciales que no son enteros (o el signo menos) son ignorados. parseInt() termina cuando se encuentra el primer carácter que no es un dígito. Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

 Sintaxis:

stream.parseInt(list)

Parámetros:

stream : una instancia de una clase que hereda de Stream.

list : el stream que se está explorando. Tipo: char

 Devuelve:

Un entero. Tipo: int

 Ver también:

-Stream

 

 La function parseFloat()   

Descripción:

parseFloat() devuelve el primer número en coma flotante (de tipo float) válido a partir de la posición actual. Los caracteres iniciales que no son enteros (o el signo menos) son ignorados. parseFloat() termina cuando se encuentra el primer carácter que no es un número en coma flotante. Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.parseFloat(list)

Parámetros:

stream : una instancia de una clase que hereda de Stream.

list : el stream que se está explorando. Tipo: char

Devuelve:

Un número en coma flotante. Tipo: float

Ver también:

-Stream 

 

 La function setTimeout()   

Descripción:

setTimeout() se usa para establecer el número de milisegundos que se debe esperar para que haya datos disponibles en el stream (por defecto 1000 milisegundos = 1 segundo). Esta función forma parte de la clase Stream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc).

Sintaxis:

stream.setTimeout(time)

Parámetros:

stream : una instancia de una clase que hereda de Stream.

time : el tiempo de espera en milisegundos. Tipo: long.

Devuelve:

Nada

Ver también:

-Stream

 

Funciones de comunicaciones en serie (clase “serial”)

 

Los puertos de comunicación serie se usan para la comunicación entre el Arduino y un ordenador u otros dispositivos. Todos los Arduinos tienen por lo menos un puerto serie (también conocido como UART o USART).

El Arduino usa los pins digitales 0 (RX) y 1 (TX) como puerto serie (llamado “serial”). También se puede usar la salida USB para comunicar en serie con el ordenador vía el USB. Recuerda que si utilizas la función serial no puedes usar los pins 0 y 1 como entrada o salida digital. (RX es el pin de recepción y TX en de transmisión)

Puedes usar el monitor serie incorporado en el ambiente de programación del Arduino para comunicar con un Arduino. Haz clic el botón serial del monitor en la barra de herramientas y selecciona la misma velocidad usada con la función begin().

El Arduino Mega tiene tres puertos serie adicionales: Serial1 en los pins 19 (RX) y 18 (TX), Serial2 en los pins 17 (RX) y 16 (TX), Serial3 en los pins 15 (RX) y 14 (TX). Para utilizar estos pins para comunicar con tu ordenador, necesitarás un adaptador USB-serie adicional, pues no están conectados con el adaptador USB-serie del Mega.

Si los quieres usar para comunicar con un dispositivo serial externo TTL, conecta el pin de TX con el pin del RX del dispositivo externo, el RX con el pin del TX del dispositivo externo, y la tierra del mega con la tierra del dispositivo externo. (Importante: no  conectes estos pins directamente con un puerto serie RS232 ya estos funcionan a +/- 12V y pueden dañar tu Arduino).

El Arduino Due tiene tres puertos serie TTL a 3.3V adicionales: Serial1 en los pins 19 (RX) y 18 (TX); Serial2 en los pins 17 (RX) y 16 (TX), Serial3 en los pins 15 (RX) y 14 (TX). Los pins 0 y 1 también están conectados con los pins correspondientes del microprocesador serial de ATmega16U2 USB-TTL, que está conectado con el puerto “debug” del USB. Además, hay un puerto serie USB nativo en el microprocesador de SAM3X.

El Arduino Leonardo utiliza Serial1 para comunicar vía serie TTL #5V# en los pins 0 (RX) y 1 (TX). Serial está reservado para la comunicación de la CDC del USB. Para más información, acceda a la documentación del Leonardo.

Ver el apartado “Ejemplos” en este sitio web donde se muestran una serie de casos prácticos de la utilización de las siguientes funciones.

 

 La function if(Serial)  

Descripción:

Esta función (introducida con el Arduino 1.0.1) indica si el puerto serie especificado está activado.

En el Leonardo esta función indica si la conexión serie USB CDC está activada. En todos los demás casos, incluyendo if(Serial1) en el Leonardo, esta función devolverá siempre “true”.

Sintaxis:

Para todos los modelos:

if (Serial)

Para el Arduino Leonardo:

if (Serial1) 

Para el Arduino Mega:

if (Serial1) 
if (Serial2) 
if (Serial3)

Parámetros:

Ninguno

Devuelve:

Un valor tipo boolean : “true” si el puerto serie especificado está disponible. En el Leonardo esta función sólo devolverá “false” si la conexión serie USB CDC no está activada.

Ejemplo:

void setup() 
   {    //Initializar puerto serie y esperar a que esté activado:
        Serial.begin(9600);
        while (!Serial) 
             ; //esperar a que el puerto se abra. Necesario sólo en el Leonardo
   }

void loop() {
    //aqui va el programa de comunicaciones…
    }

Ver también:

- begin() - end()- available()- read()- peek() - flush()- print() 
- println() - write()- SerialEvent()

 

 La function available   

 Descripción:

Esta función devuelve el número de bytes (caracteres u octetos) disponibles para su lectura desde el puerto serie. Estos son los bytes que han llegado ya al puerto serie y ha sido almacenados en el buffer de recepción en serie (que tiene una capacidad total de 64 bytes). La función available() hereda de la clase Stream.

 Sintaxis:

Serial.available() 

 Para l Arduino Mega solamente:

Serial1.available() 
Serial2.available() 
Serial3.available() 

Parámetros:

None

 Devuelve:

El número de bytes disponibles para su lectura.

 Ejemplo:

int incomingByte = 0;   // para datos llegando por el puerto serie.

void setup() 
    {     Serial.begin(9600);   // abre el Puerto serie y la configura a 9600 bps
    }

void loop() 
   {     // enviar datos solo cuando los has recibido:
         if (Serial.available() > 0) 
                { // lee el byte que ha llegado:
                  incomingByte = Serial.read();
                  // muestra lo que has recibido:
                  Serial.print("He recibido: ");
                  Serial.println(incomingByte, DEC);
                }
   }

Ejemplo para el Arduino Mega:

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

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

Ver también:

-begin() 
-end() 
-available() 
-read() 
-peek() 
-flush() 
-print() 
-println() 
-write() 
-SerialEvent()
-Stream.available()

 

 La función begin  

Descripción:

Configura la velocidad de transmisión serie en bits por segundo (baudios). Para comunicar con el ordenador usa una de estas velocidades: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, o 115200. Puedes también especificar otras velocidades para comunicar a través de los pins 0 y 1 con un componente que requiere una velocidad específica.

Un segundo argumento (opcional) configura el número de bits de datos, la paridad y el (los) bit de stop. La opción por defecto es 8 bits de datos, no paridad y un bit de stop.

Sintaxis:

Serial.begin(speed)
Serial.begin(speed, config) 

Para el Arduino Mega solamente:

Serial1.begin(speed) 
Serial2.begin(speed) 
Serial3.begin(speed) 
Serial1.begin(speed, config) 
Serial2.begin(speed, config) 
Serial3.begin(speed, config)

Parámetros:

speed: en bits por Segundo (baudios) – tipo: long

config: configure los bits de datos, paridad y stop. 

Los valores válidos para el parámetro config son los siguientes:

-SERIAL_5N1
-SERIAL_6N1
-SERIAL_7N1
-SERIAL_8N1 (estos son los parámetros por defecto)
-SERIAL_5N2
-SERIAL_6N2
-SERIAL_7N2
-SERIAL_8N2
-SERIAL_5E1
-SERIAL_6E1
-SERIAL_7E1
-SERIAL_8E1
-SERIAL_5E2
-SERIAL_6E2
-SERIAL_7E2
-SERIAL_8E2
-SERIAL_5O1
-SERIAL_6O1
-SERIAL_7O1
-SERIAL_8O1
-SERIAL_5O2
-SERIAL_6O2
-SERIAL_7O2
-SERIAL_8O2

Devuelve:

Nada

Ejemplo: 

void setup()
   {  Serial.begin(9600); //Abre el puerto serie y configura la velocidad a 9600 bps
   }

void loop() {}

Ejemplo para el Mega:

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

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

       Serial.println("Hello Computer");
       Serial1.println("Hello Serial 1");
       Serial2.println("Hello Serial 2");
       Serial3.println("Hello Serial 3");
   }

void loop() {}

(Ejemplo proporcionado por Jeff Gray)

Ver también:

-begin() -end() -available() -read() -peek() -flush() -print() 
-println() -write() -SerialEvent()

 

  La function end()  

Descripción:

Desactiva las comunicaciones en serie y permite usar los pines RX y TX para funciones generales de entrada y salida. Para volver a activar las comunicaciones serie usa la función Serial.begin().

Sintaxis:

Serial.end()

Sólo en el Arduino Mega:

Serial1.end()
Serial2.end() 
Serial3.end() 

Parámetros:

Ninguno.

Devuelve:

Nada

Ver también:

-begin() 
-end() 
-available() 
-read() 
-peek() 
-flush() 
-print() 
-println() 
-write() 
-SerialEvent()

  La function find()  

Descripción:

Serial.find() lee del buffer serie hasta que el string buscado (“target”) haya sido encontrado. La función devuelve le valor TRUE si el string buscado ha sido encontrado y FALSE en caso contrario.

Serial.find() hereda de la clase Stream.

Sintaxis:

Serial.find(target)

Parámetros:

target: El string buscado. Tipo: char

Devuelve:

Un valor boolean

Ver también:

 -Stream 
-Stream.find()

 

  La function findUntil()  

Descripción:

Serial.findUntil() lee del buffer serie hasta que el string buscado (“target”) o un carácter o string específico (“terminal”) haya sido encontrado. La función devuelve le valor TRUE si el string buscado  ha sido encontrado y FALSE en caso contrario.

Serial.findUntil() hereda de la clase Stream.

 Sintaxis:

Serial.findUntil(target, terminal)

Parámetros:

target: El string buscado. Tipo: char

terminal : El carácter o string especifico que detiene la búsqueda (char)

 Devuelve:

Un valor boolean

 Ver también:

 -Stream 
-Stream.findUntil()

 

  La function flush()  

Descripción:

Esta función espera a que se complete la transmisión serie en curso. (Antes del Arduino 1.0, esta función borraba los datos presentes en buffer serie de entrada) 

 

flush() hereda de la clase Stream.

 Sintaxis:

Serial.flush() 

 En el Arduino Mega solamente:

Serial1.flush() 
Serial2.flush() 
Serial3.flush()

Parámetros:

Ninguno

 Devuelve:

Nada

 Ver también:

-begin() 
-end() 
-available() 
-read() 
-peek() 
-flush() 
-print() 
-println() 
-write() 
-SerialEvent()
-Stream.flush()

 

 La function parseFloat()  

Descripción 

Serial.parseFloat() devuelve el primer número válido en coma flotante del buffer serie. Los caracteres que no sean dígitos (o el signo menos) son ignorados. parseFloat() termina cuano encuentra el primer carácter que no sea un número en coma flotante. Serial.parseFloat() hereda de la clase Stream.

Sintaxis:

Serial.parseFloat()

Parámetros:

Ninguno

Devuelve:

Un número en coma flotante (float)

Ver también:

-Stream -Stream.parseFloat()

 

 La function parseInt()  

Descripción:

Serial.parseInt() devuelve el primer número entero válido del buffer serie. Los caracteres que no sean dígitos (o el signo menos) son ignorados. parseInt() termina cuando encuentra el primer carácter que no corresponda a un número entero. Serial.parseInt() hereda de la clase Stream. Si al cabo de un segundo (ajustable con Serial.setTimeout()) no se ha encontrado un entero válido en el buffer de entrada serie, un valor por defecto de 0 será devuelto.

Sintaxis:

Serial.parseInt()

En el Arduino Mega solamente:

Serial1.parseInt() 
Serial2.parseInt()
Serial3.parseInt()

Parámetros:

Ninguno

 Devuelve:

Un número entero (int)

 Ver también:

-begin() -end() -available() -read() -peek() -flush() -print() 
-println() -write() -SerialEvent()-Stream.parseInt()

 

 La function peek()  

Descripción:

La función peek() lee un byte de los datos presentes en el puerto serie sin retirarlo del buffer serie. Es decir, ulteriores llamadas a peek() devolverían el mismo valor. Asimismo, la próxima llamada a read() devolvería también el mismo carácter. peek() hereda de la clase Stream.

 Sintaxis:

serial.peek() 

 En el Arduino Mega solamente:

Serial1.peek() 
Serial2.peek() 
Serial3.peek() 

Parámetros:

Ninguno

 Devuelve:

El próximo byte (o carácter) o -1 si no hay datos disponibles. Tipo: int

Ver también:

-begin() -end() -available() -read()-peek() -flush() -print() -println() 
-write() -SerialEvent()-Stream.peek() 

 

 

 La function print()  

Descripción:

Imprime datos a través de la puerta serie en formato texto ASCII. Esta function (o comando) puede tomar diferentes formas. Los números se imprimen usando un carácter ASCII para cada dígito.  Lo mismo sucede con los números en coma flotante (que por defecto se imprimen con dos decimales). Bytes se imprimen como caracteres individuales. Caracteres y strings se imprimen tal como son. Por ejemplo:

-Serial.print(78) se imprime como "78"
-Serial.print(1.23456) se imprime como "1.23"
-Serial.print('N') se imprime como "N"
-Serial.print("Hello world.") se imprime como "Hello world."

El segundo parámetro de esta función especifica la base (formato) usado. Los valores permitidos son: BIN (binario, o base 2), OCT (octal, o base 8), DEC (decimal, o base 10), HEX (hexadecimal, o base 16). Para números en coma flotante, este parámetro especifica el número de lugares decimales que se van a usar. Por ejemplo:

-Serial.print(78, BIN) se imprime como ”1001110"
-Serial.print(78, OCT) se imprime como “116"
-Serial.print(78, DEC) se imprime como “78"
-Serial.print(78, HEX) se imprime como “4E"
-Serial.println(1.23456, 0) se imprime como “1"
-Serial.println(1.23456, 2) se imprime como “1.23"
-Serial.println(1.23456, 4) se imprime como “1.2346"

Puedes pasar strings almacenados en memoria flash a Serial.print() encapsulándolos con F(). Por ejemplo:

-Serial.print(F(“Hello World”))

Para imprimir un único byte, usa Serial.write().

Sintaxis:

Serial.print(val) 
Serial.print(val, format) 

Parámetros:

val: el valor que se quiere imprimir – de cualquier tipo de datos

format: especifica la base numérica (para enteros) o el número de decimales(para números float)

Devuelve:

size_t (long): print() devuelve el número de bytes escritos, aunque leer este número es opcional.

Ejemplo:

 /*  Usa un bucle FOR para generar valores y escribe un número en diferentes formatos. */

int x = 0;    // variable

void setup() 
   {   Serial.begin(9600);      // abre el puerto serie a 9600 bps:    
   }

void loop() 
   {  // imprimir cabeceras
      Serial.print("NO FORMAT");       // escribe una cabecera
      Serial.print("\t");              // imprime un tabulador
      Serial.print("DEC");  
      Serial.print("\t");      

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

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

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

      for(x=0; x< 64; x++)
         {
              // solo parte del conjunto ASCII. Se puede cambiar
              // imprimir in diferentes formatos:
             Serial.print(x);       // imprimir como un decimal codificado en ASCII = DEC
             Serial.print("\t");    // imprime un tabulador
             Serial.print(x, DEC);  // DEC codificado en ASCII
             Serial.print("\t");    // imprime un tabulador

             Serial.print(x, HEX);  // HEX codificado en ASCII
             Serial.print("\t");    // imprime un tabulador

             Serial.print(x, OCT);  // OCT codificado en ASCII
             Serial.print("\t");    // imprime un tabulador

             Serial.println(x, BIN);  // HEX codificado en ASCII
             //              añade una “vuelta de carro” (nueva línea) con "println"
             delay(200);            // pausa de 200 milliseconds
         }
   Serial.println("");      // imprime otra vuelta de carro
 }

Nota:

A partir de la versión 1.0, la transmisión serie es asíncrona; Serial.print() termina antes de que los caracteres hayan sido realmente transmitidos.

Ver también:

-begin() -end() -available() -read() -peek() -flush() -print() 
-println() -write() -SerialEvent()-Memory

 

 La function println()  

Descripción:

Imprime datos a través de la puerta serie en formato texto ASCII. La impresión se termina con una vuelta de carro (carriage return). Esta función usa las mismas modalidades que Serial.print().

Sintaxis:

Serial.println(val) 
Serial.println(val, format)

Parámetros:

val: el valor que se quiere imprimir – de cualquier tipo de datos

format: especifica la base numérica (para enteros) o el número de decimales(para números float)

Devuelve:

size_t (long): print() devuelve el número de bytes escritos, aunque leer este número es opcional.

Ejemplo:

/* Entrada Analógica:
   Lee una entrada analogical en el pin 0 e imprime el valor leido
   Escrito el  24 de Marzo 2006  por Tom Igoe
*/
int analogValue = 0;    // variable que almacena el valor analógico leído

void setup() 
   {  // abrir el Puerto serie a 9600 bps:
      Serial.begin(9600);
   }

void loop() 
   { // read the analog input on pin 0:
     analogValue = analogRead(0);

     // imprimir en diferentes formatos:
     Serial.println(analogValue);       // imprimir como decimal expresado en ASCII
     Serial.println(analogValue, DEC);  // imprimir como decimal expresado en ASCII 
     Serial.println(analogValue, HEX);  // imprimir como decimal expresado en ASCIIl
     Serial.println(analogValue, OCT);  // imprimir como decimal expresado en ASCII
     Serial.println(analogValue, BIN);  // imprimir como decimal expresado en ASCII
     // pausa de 10 milisegundos entre lecturas:
     delay(10);
   }

Ver también:

-begin() -end() -available() -read() -peek() -flush() -print() -println() 
-write() -SerialEvent()

 

 La function read()  

Descripción

Read() lee los datos de entrada presentes en el puerto serie. Hereda de la clase Stream.

Sintaxis:

Serial.read()

Para el Arduino Mega solamente:

Serial1.read()
Serial2.read() 
Serial3.read() 

Parámetros:

Ninguno

Devuelve:

El primer byte de datos de entrada disponible (o -1 si no hay datos disponibles). Tipo: int

Ejemplo:

int incomingByte = 0;   // variable que almacenará los datos de entrada serie.

void setup() 
   {   Serial.begin(9600);     // abre el Puerto serie a 9600 bps
   }

void loop() 
   {   // imprimir datos solo si se ha leido algo:
       if (Serial.available() > 0) 
           {   // leer byte de entrada:
                  incomingByte = Serial.read();
                 // escribir lo que se ha leido
                 Serial.print("He recibido: ");
                 Serial.println(incomingByte, DEC);
           }
   }

Ver también:

-begin() -end() -available() -read() -peek() -flush() -print() -println()
-write() -SerialEvent()-Stream.read()

 

 La function readBytes()  

Descripción

Serial.readBytes() lee caracteres del puerto serie y los deposita en un buffer. La función termina cuando el número de caracteres especificados han sido leídos o cuando el tiempo de espera ha sido agotado (ver Serial.setTimeout()). Serial.readBytes() devuelve el número de caracteres depositados en el buffer. Un 0 significa que no se pudieron leer datos válidos. Serial.readBytes() hereda de la clase Stream.

Sintaxis:

Serial.readBytes(buffer, length)

Parámetros:

buffer: el buffer en el que se depositan los bytes leidos. Tipo: char[] o byte[]

length : the number of bytes to read (int)

Devuelve:

byte

Ver también:

-Stream 
-Stream.readBytes()

 

 La function readBytesUntil()  

Descripción:

Serial.readBytesUntil() lee caracteres del buffer serie y los deposita en un array. La función termina  La función termina cuando se detecta el carácter terminador, o bien cuando el número de caracteres especificados han sido leídos o cuando el tiempo de espera ha sido agotado (ver Serial.setTimeout()). Serial.readBytesUntil() devuelve el número de caracteres leidos del buffer. Un 0 significa que no se pudieron leer datos válidos. Serial.readBytesUntil() hereda de la clase Stream.

Sintaxis:

Serial.readBytesUntil(character, buffer, length)

Parámetros:

character : El carácter terminador buscado. Tipo: char

buffer: el buffer en el que se depositan los bytes leidos. Tipo: char[] o byte[]

length : the number of bytes to read (int)

Devuelve:

byte

Ver también:

-Stream 
-Stream.readBytesUntil()

 

 La function Timeout()  

Descripción:

Serial.setTimeout() se usa para establecer el número de milisegundos que se debe esperar para que haya datos disponibles en el puerto serie (por defecto 1000 milisegundos = 1 segundo). Esta función hereda de la clase Stream.

Sintaxis:

Serial.setTimeout(time) 

Parámetros:

time : el tiempo de espera en milisegundos. Tipo: long.

 Devuelve:

Nada

 Ver también:

-Stream
-Stream.setTimeout()

 

 La function write()  

Descripción:

Esta función escribe datos binarios a través del puerto serie. Los datos son enviados como uno o varios bytes; para enviar los caracteres representando los dígitos de un número usa la función print() en vez de esta.

Sintaxis:

Serial.write(val)
 Serial.write(str)
 Serial.write(buf, len)

En el Arduino Mega: Serial1, Serial2, Serial3 (en vez de Serial)

Parámetros:

val: un valor a enviar como un byte individual

str: un string que se envía como una serie de bytes

buf: un array a enviar como una serie de bytes

len: la longitud del buffer

Devuelve:

byte

write() devuelve el número de bytes escritos (leer este número es opcional).

Ejemplo:

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

void loop()
   {  Serial.write(45); // enviar un byte con el valor 45
 
     int bytesSent = Serial.write(“hola”); 
     //enviar el string “hola” y devolver la longitude del string.
   }

Ver también:

-begin() 
-end() 
-available() 
-read() 
-peek() 
-flush() 
-print() 
-println() 
-write() 
-SerialEvent()

 

  La function serialEvent()  

Descripción:

Se llama a esta función cuando hay datos disponibles en el puerto serie. Esta función se ejecuta entre dos ejecuciones del loop(). Hay que usar Serial.read() para leer los datos disponibles en el puerto serie.

 

NB : Esta función no es compatible con los modelos Esplora, Leonardo, o Micro

Sintaxis:

void serialEvent()
   {   //statements
   }

En el Arduino Mega solamente: 

void serialEvent1()
   {   //statements
   }
void serialEvent2()
   {  //statements
   }
void serialEvent3()
   {  //statements
   }

Parámetros:

statements: cualquier instrucción válida

Ver también:

- SerialEvent Tutorial
- begin()-end()-available()-read()-peek()-flush() -print() 
-println() -write()-SerialEvent()

 

Librerías de funciones de comunicación: Ratón y Teclado

 

Estas librerías “core” permiten usar un Arduino Leonardo, Micro o Due como si fueran un teclado o un ratón conectados a un ordenador.

Una advertencia: cuando uses estas librerías ten en cuenta que si tienes una de estas funciones ejecutándose de forma continua, será difícil programar tu Arduino. Funciones como Mouse.move() y Keyboard.print() tienen como efecto un movimiento de cursor o una recepción de pulsaciones de teclas en tu ordenador.

Por lo tanto sólo deben de ser usadas cuando el ordenador esté preparado para recibirlas. Se recomienda usar un sistema de control para activar esta funcionalidad (un interruptor por ejemplo) o responder a una entrada específica que puedas controlar.

Al usar esta librería es recomendable verificar las salidas del Arduino usando Serial.print(). De esta manera puedes estar seguro de los valores producidos por tu sketch. Los ejemplos disponibles muestran algunas maneras de controlar este proceso.

Ver ejemplos de uso de estas funciones en el apartado “EJEMPLOS” de este sitio web.

 

 Funciones de emulación de un Ratón (“Mouse”)  

 

Las funciones de emulación de un ratón permiten al Arduino Leonardo, Micro o Due controlar el movimiento del cursor en un ordenador conectado. Cualquier movimiento de ratón es siempre relativo a la última posición conocida.

 

La función Mouse.begin()   

Descripción:

Esta función comienza la emulación del ratón conectado al ordenador. Begin() tiene que ser llamado antes de que comience el control del ordenador desde el Arduino. Para devolver el control al ordenador usa la función Mouse.end().

Sintaxis:

Mouse.begin()

Parámetros:

Ninguno

Devuelve:

Nada

Ejemplo:

void setup()
   {  pinMode(2, INPUT);
   }

void loop()
   {   //iniciar la librería Mouse (Ratón) cuando se pulse el botón
       if(digitalRead(2) == HIGH)
          {    Mouse.begin();
          } 
   }

Ver también:

-Mouse.click() -Mouse.end() -Mouse.move() -Mouse.press() 
-Mouse.release() -Mouse.isPressed()

 

La función Mouse.click()   

Descripción:

Envía un clic puntual al ordenador desde la ubicación del cursor. Equivale a pulsar y soltar el botón (por defecto, el izquierdo) del ratón

ADVERTENCIA: cuando uses el comando Mouse.click(),el Arduino retoma el control del ratón! Asegúrate de que tienes el control del ratón antes de usar el comando. Un clic basta para retomar el control del ratón desde el ordenador.

Sintáxis:

Mouse.click();
Mouse.click(button); 

Parámetros:

button: el botón que se quiere emular – tipo: char

-MOUSE_LEFT (izquierdo, defecto)

-MOUSE_RIGHT (derecho)

-MOUSE_MIDDLE (central)

 Devuelve:

Nada

 Ejemplo:

 void setup()
   {   pinMode(2,INPUT);
       //iniciar la librería Mouse
       Mouse.begin();
   }

 void loop()
   {   //si se aprieta el botón enviar un clic botón izquierdo
       if(digitalRead(2) == HIGH)
          {   Mouse.click();
          } 
   }

Ver también:

-Mouse.begin() -Mouse.end() -Mouse.move() -Mouse.press() 
-Mouse.release() -Mouse.isPressed()

 

La función Mouse.end()   

Descripción:

Cesa la emulación del Arduino como un ratón conectado al ordenador. Para devolver control al Arduino usa Mouse.begin().

Sintaxis:

Mouse.end()

Parámetros:

Ninguno

Devuelve:

Nada

Ejemplo:

 void setup()
   {   pinMode(2,INPUT);
      //inicia librería Mouse
      Mouse.begin();
   }

void loop()
   {   //Si se ha pulsado el botón envía una señal de “clic botón izquierdo”
       //y después finaliza la emulación 
       if(digitalRead(2) == HIGH)
           {   Mouse.click();
               Mouse.end();
           } 
    }

Ver también:

-Mouse.begin() -Mouse.click() -Mouse.move() -Mouse.press() 
-Mouse.release() -Mouse.isPressed()

 

La función Mouse.move()   

Descripción:

Mueve el cursor en el ordenador al que está conectado el Arduino. El movimiento en la pantalla es siempre relativo a la posición inicial del cursor. Antes de usar Mouse.move() tienes que llamar a Mouse.begin().

ADVERTENCIA: cuando uses el comando Mouse.move(),el Arduino retoma el control del ratón! Asegúrate de que tienes el control del ratón antes de usar el comando. Un clic basta para retomar el control del ratón desde el ordenador.

Sintaxis:

Mouse.move(xVal, yPos, wheel);

Parámetros:

xVal: movimiento en el eje x- tipo: signed char

yVal: movimiento en el eje y – tipo: signed char

wheel: movimiento de la rueda central – tipo: signed char

Devuelve:

Nada.

Ejemplo:

 const int xAxis = A1;         //sensor analógico eje X 
const int yAxis = A2;         // sensor analógico eje Y
int range = 12;               // rango de valores de salida para un movimiento en X o Y
int responseDelay = 2;       // retardo de respuesta del ratón en ms
int threshold = range/4;      // umbral de descanso
int center = range/2;         // valor de la posición de descanso
int minima[] = {  1023, 1023};    // lectura mínima de analogRead para {x, y}
int maxima[] = {  0,0};           // lectura máxima de analogRead para {x, y}

int axis[] = {   xAxis, yAxis};              // números de pin para {x, y}
int mouseReading[2];          // lectura final de posición del ratón {x, y}

void setup() 
   {  Mouse.begin();
   }

void loop() 
   {  // lee y escala los dos ejes:
      int xReading = readAxis(0);
      int yReading = readAxis(1);
     // mueve el ratón:
      Mouse.move(xReading, yReading, 0);
      delay(responseDelay);
   } 
/*    Lee un eje (0 o 1 para x o y) y escala la entrada analógica
      En un rango de 0 a  <range>
*/
      int readAxis(int axisNumber)
          {   int distance = 0;    // distancia desde el centro del rango de salida
              // leer la entrada analógica:
              int reading = analogRead(axis[axisNumber]);

// si la lectura presente sobrepasa el máx o mín para este eje,
// inicializa el máx o mín:
       if (reading < minima[axisNumber]) 
             {  minima[axisNumber] = reading;
             }

      if (reading > maxima[axisNumber]) 
            {     maxima[axisNumber] = reading;
            }
      // mapea la lectura del rango de entrada analógica al rango de salida:
      reading = map(reading, minima[axisNumber], maxima[axisNumber], 0, range);
 
      // si la lectura de salida está fuerea del umbral de la , usa:
      if (abs(reading - center) > threshold) 
           {   distance = (reading - center);
           }

     // el eje Y necesita ser invertido para mapear el movimiento correctamente:
     if (axisNumber == 1) 
          {    distance = -distance;
          }

     // devuelve la distancia para este eje:
     return distance;
}

Ver también:

-Mouse.begin() -Mouse.click() -Mouse.end() -Mouse.press() 
-Mouse.release() -Mouse.isPressed()

 

La función Mouse.press()   

Descripción:

Envía una señal de “botón pulsado” al ordenador conectado con el Arduino (por defecto el botón izquierdo). Esta señal es equivalente a pulsar y mantener el botón pulsado en el ratón. Este estado se cancela con la función Mouse.release(). Antes de usar Mouse.press(), necesitas usar la función Mouse.begin().

ADVERTENCIA: ¡cuando uses el comando Mouse.press(),el Arduino retoma el control del ratón! Asegúrate de que tienes el control del ratón antes de usar el comando. Un clic basta para retomar el control del ratón desde el ordenador.

Sintaxis:

Mouse.press();
Mouse.press(button)

Parámetros:

button: el botón que se quiere emular – tipo: char

-MOUSE_LEFT (izquierdo, defecto)

-MOUSE_RIGHT (derecho)

-MOUSE_MIDDLE (central)

 Devuelve:

Nada

 Ejemplo:

void setup()
   {  //El conmutador que iniciará “pulsar-botón”
      pinMode(2,INPUT);
      //El conmutador que terminará la acción “pulsar-botón”
      pinMode(3,INPUT);
      //iniciar la librería Mouse

      Mouse.begin();
   }
void loop() 
   {   //si el conmutador conectado al pin 2 está cerrado, pulsar y 
       //mantener pulsado en botón izquierdo del ratón.

       if(digitalRead(2) == HIGH)
          {  Mouse.press();
          }

      //si el conmutador conectado al pin 3 está cerrado, libera 
      //el botón izquierdo del ratón
      if(digitalRead(3) == HIGH)
         {   Mouse.release();
         }
   }

Ver también:

-Mouse.begin() -Mouse.click() -Mouse.end() -Mouse.move() 
-Mouse.release() -Mouse.isPressed()

 

La función Mouse.release()  

Descripción:

Envía al ordenador el mensaje de que un botón previamente pulsado (activado previamente con Mouse.press()) ha sido liberado. Por defecto Mouse.release() libera el botón izquierdo.

ADVERTENCIA: ¡cuando uses el comando Mouse.release(),el Arduino retoma el control del ratón! Asegúrate de que tienes el control del ratón antes de usar el comando. Un clic basta para retomar el control del ratón desde el ordenador.

Sintaxis:

Mouse.release();
Mouse.release(button)

Parámetros:

button: el botón que se quiere emular – tipo: char

-MOUSE_LEFT (izquierdo, defecto)

-MOUSE_RIGHT (derecho)

-MOUSE_MIDDLE (central)

 Devuelve:

Nada

 Ejemplo:

void setup()
    { //El conmutador que iniciará “pulsar-botón”
      pinMode(2,INPUT);
      //El conmutador que terminará la acción “pulsar-botón”
      pinMode(3,INPUT);
      //iniciar la librería Mouse
      Mouse.begin();
   }

void loop()
   {  // si el conmutador conectado al pin 2 está cerrado,
      // pulsar y mantener pulsado el botón izquierdo del ratón
      if(digitalRead(2) == HIGH)
           {   Mouse.press();
           }

// si el conmutador conectado al pin 3 está cerrado, libera el botón izquierdo del ratón
      if(digitalRead(3) == HIGH)
           {   Mouse.release();
           }
   }

Ver también:

-Mouse.begin()-Mouse.click()-Mouse.end()-Mouse.move()
-Mouse.press()-Mouse.isPressed()

 

La función Mouse.isPressed()   

Description

Verifica el estado actual de todos los botones del ratón e informa si están pulsados o no.

Sintaxis:

Mouse.isPressed();
Mouse.isPressed(button);

Parámetros:

Cuando no se pasan parámetros verifica el botón izquierdo por defecto.

button: el botón que se quiere verificar – tipo: char

-MOUSE_LEFT (izquierdo, defecto)

-MOUSE_RIGHT (derecho)

-MOUSE_MIDDLE (central)

 Devuelve:

boolean: informa del estado (pulsado, libre) del botón

Ejemplo:

void setup()
   {  //El conmutador que iniciará “botón pulsado”
      pinMode(2,INPUT);
      //El conmutador que terminará con el estado “botón pulsado”
      pinMode(3,INPUT);
      //Comenzar comunicación serie con el ordenador
      Serial1.begin(9600);
      //iniciar la librería Mouse
      Mouse.begin();
   }

void loop()
   {   //la variable que contiene el estado del botón

       int mouseState=0;
       //si el conmutador conectado con el pin 2 está cerrado, pulsa y 
       //mantén el botón izquierdo y salva el estado en una variable
       if(digitalRead(2) == HIGH)
          {  Mouse.press();
             mouseState=Mouse.isPressed();
          }

       //si el conmutador conectado con el pin 3 está cerrado libera 
       //el botón izquierdo y salva el estado en una variable.

       if(digitalRead(3) == HIGH)
          {  Mouse.release();
             mouseState=Mouse.isPressed();
          }

       //imprime el estado actual del botón
       Serial1.println(mouseState);
       delay(10);
   }

Ver también:

-Mouse.begin() -Mouse.click()-Mouse.end()-Mouse.move() 
-Mouse.press() -Mouse.release()

 

Funciones de emulación del Teclado (Keyboard)

 

Las funciones de teclado (“keyboard”) permiten al Arduino Leonardo, Micro o Due enviar pulsaciones de teclas al ordenador conectado.

Nota:

No todos los caracteres ASCII (en particular los no imprimibles) pueden ser enviados con la librería “Keyboard”. Esta librería soporta el uso de teclas de modificación (“modifier keys”). Estas son teclas que pulsadas simultáneamente con otra tecla cambian el comportamiento de ésta.

 

Modifier keys”: teclas modificadoras

 

 Las funciones Keyboard.write(), Keyboard.press() y Keyboard.release() no funcionan con todos los caracteres ASCII. Por ejemplo, la tecla de retroceso (“backspace”) funciona, pero muchos de los caracteres no imprimibles producen resultados impredecibles. Para las mayúsculas, lo que se envía es el carácter “shift” (la flecha hacia arriba) más el carácter )(es decir, el equivalente de pulsar ambas teclas simultáneamente en el teclado).

Una tecla modificadora (modifier key) es una tecla especial en el teclado que al ser pulsada simultáneamente con otra tecla modifica la acción que normalmente desencadenaría dicha tecla de haber sido pulsada en solitario. Usa la función keyboard.press() para emular pulsaciones de teclas modificadoras combinadas con teclas normales.

Puedes acceder a la tabla con todos los códigos ASCII en asciitable.com

Las definiciones del Leonardo para las teclas modificadoras son:

 

TeclaHexadecimalDecimal
KEY_LEFT_CTRL0x80128
KEY_LEFT_SHIFT0x81129
KEY_LEFT_ALT0x82130
KEY_LEFT_GUI0x83131
KEY_RIGHT_CTRL0x84132
KEY_RIGHT_SHIFT0x85133
KEY_RIGHT_ALT0x86134
KEY_RIGHT_GUI0x87135
KEY_UP_ARROW0xDA218
KEY_DOWN_ARROW0xD9217
KEY_LEFT_ARROW0xD8216
KEY_RIGHT_ARROW0xD7215
KEY_BACKSPACE0xB2178
KEY_TAB0xB3179
KEY_RETURN0xB0176
KEY_ESC0xB1177
KEY_INSERT0xD1209
KEY_DELETE0xD4212
KEY_PAGE_UP0xD3211
KEY_PAGE_DOWN0xD6214
KEY_HOME0xD2210
KEY_END0xD5213
KEY_CAPS_LOCK0xC1193
KEY_F10xC2194
KEY_F20xC3195
KEY_F30xC4196
KEY_F40xC5197
KEY_F50xC6198
KEY_F60xC7199
KEY_F70xC8200
KEY_F80xC9201
KEY_F90xCA202
KEY_F100xCB203
KEY_F110xCC204
KEY_F120xCD205

 

 

La función Keyboard.begin()   

Descripción:

Esta función (usada solamente en el Leonardo y en el Due) comienza la emulación de un teclado (keyboard) conectado a un ordenador. Para finalizar la emulación usa Keyboard.end().

Sintaxis:

Keyboard.begin()

Parámetros

Ninguno

Devuelve:

Nada

Ejemplo:

void setup() 
   {   // usa pin 2 como entrada y active la Resistencia “pullup” de manera que 
       // el pin permanezca en alta salvo que esté conectado a tierra.
       pinMode(2, INPUT_PULLUP);
       Keyboard.begin();
    }

void loop() 
   {   //si se ha pulsado el botón
       if(digitalRead(2)==LOW)
          {   //enviar un mensaje
              Keyboard.print("Hello!");
          }
   }

Ver también:

-Keyboard.end() -Keyboard.press() -Keyboard.print() -Keyboard.println() 
-Keyboard.release()-Keyboard.releaseAll() -Keyboard.write()

 

 La función Keyboard.end()  

Descripción:

Finaliza la emulación del Arduino como un teclado conectado al ordenador. Para (re)comenzar la emulación usa Keyboard.begin().

Sintaxis:

Keyboard.end()

Parámetros:

Ninguno

Devuelve:

Nada.

Ejemplo:

 void setup() 
   {   //comenzar comunicación en modo emulación
       Keyboard.begin();
       //enviar una pulsación
       Keyboard.print("Hello!");
       //terminar emulación
       Keyboard.end();
   }

void loop() 
   {  //no hagas nada }

Ver también:

-Keyboard.begin() -Keyboard.press() -Keyboard.print() -Keyboard.println() 
-Keyboard.release() -Keyboard.releaseAll() -Keyboard.write()

 

  La función Keyboard.press()  

Description

Esta función emula la pulsación constante de una tecla (pulsarla sin soltarla). Es la función indicada si queremos emular la pulsación de una tecla modificadora y una normal. Para finalizar de pulsar la tecla usar las funciones Keyboard.release() o Keyboard.releaseAll().

Nota: Es necesario llamar la función Keyboard.begin() antes de usar before using Keyboard.press().

Sintaxis:

Keyboard.press()

Parámetros

char : la tecla que se quiere emular

Devuelve

Nada

Ejemplo:

 // usa esta opción para OSX:
char ctrlKey = KEY_LEFT_GUI;
// y esta para Windows and Linux:
//  char ctrlKey = KEY_LEFT_CTRL;  

void setup() 
   { // usa pin 2 como entrada y activa la resistencia “pullup” de manera que 
     // el pin permanezca en alta salvo que esté conectado a tierra.
     pinMode(2, INPUT_PULLUP);
     // inicia control del teclado: 
     Keyboard.begin();
   }                 

void loop() 
   {  while (digitalRead(2) == HIGH) 
         {   // no hacer nada hasta que el pin 2 pase a baja
             delay(500);
         }
      delay(1000);
      // Nuevo documento:
      Keyboard.press(ctrlKey);
      Keyboard.press('n');
      delay(100);
      Keyboard.releaseAll();
      // espera a que se abra una nueva ventana:
      delay(1000);
   }

Ver también:

-Keyboard.begin()-Keyboard.end()-Keyboard.print()-Keyboard.println() 
-Keyboard.release() -Keyboard.releaseAll()-Keyboard.write()

 

La función Keyboard.print()  

Descripción:

Envía una pulsación de una tecla al ordenador conectado. Esta función debe de ser llamada tras haber iniciado la comunicación con el ordenador con Keyboard.begin().

ADVERTENCIA: ¡cuando usas el comando Keyboard.print(),el Arduino toma el control del teclado! Asegúrate de que tienes el control del teclado antes de usar el comando. Una pulsación de una tecla en el teclado real basta para retomar el control del teclado desde el ordenador

Sintaxis:

Keyboard.print(character)
Keyboard.print(characters) 

Parámetros:

character : un char o int que será enviado al ordenador como la pulsación de una tecla.

characters : un string que será enviado al ordenador como pulsaciones de teclas.

Devuelve:

int: número de bytes enviados

Ejempl0:

void setup() 
   {   // usa pin 2 como entrada y activa la resistencia “pullup” de manera que 
       // el pin permanezca en alta salvo que esté conectado a tierra.
       pinMode(2, INPUT_PULLUP);
       Keyboard.begin();
   }

void loop() 
   {   //si se ha pulsado el botón
       if(digitalRead(2)==LOW)
           { //enviar el mensaje
              Keyboard.print("Hello!");
           }
   }

Ver también:

-Keyboard.begin() -Keyboard.end() -Keyboard.press() -Keyboard.println() 
-Keyboard.release() -Keyboard.releaseAll() -Keyboard.write()

 

La función Keyboard.println()   

Descripción:

 Envía una pulsación de una tecla seguida de un carácter “newline” y un “carriage return” al ordenador conectado. Esta función debe de ser llamada tras haber iniciado la comunicación con el ordenador con Keyboard.begin().

ADVERTENCIA: ¡cuando usas el comando Keyboard.println(),el Arduino toma el control del teclado! Asegúrate de que tienes el control del teclado antes de usar el comando. Una pulsación de una tecla en el teclado real basta para retomar el control del teclado desde el ordenador

 Sintaxis:

Keyboard.println()
Keyboard.println(character)
Keyboard.println(characters) 

Parámetros:

character : un char o int que será enviado al ordenador como la pulsación de una tecla, seguido de un carácter “newline” y un “carriage return”.

characters : un string que sera enviado al ordenador como pulsaciones de teclas,  seguido de un carácter “newline” y un “carriage return”.

 Devuelve:

int: número de bytes enviados

 Ejemplo:

void setup() 
   { // usa pin 2 como entrada y activa la resistencia “pullup” de manera que 
     // el pin permanezca en alta salvo que esté conectado a tierra.
     pinMode(2, INPUT_PULLUP);
     Keyboard.begin();
   }

void loop() 
   {   //si se ha pulsado el botón
       if(digitalRead(2)==LOW)
          { //enviar el mensaje
            Keyboard.println("Hello!");
          }
   }

Ver también:

-Keyboard.begin() -Keyboard.end() -Keyboard.press() -Keyboard.print() 
-Keyboard.release() -Keyboard.releaseAll() -Keyboard.write()

 

La función Keyboard.release()   

Descripción:

Libera la tecla especificada. Ver Keyboard.press() para más información.

Sintaxis:

Keyboard.release(key)

Parámetros:

key: la tecla que se quiere liberar. Tipo: char

Devuelve:

int : el número de teclas liberadas

Ejemplo:

// usa esta opción para OSX:
char ctrlKey = KEY_LEFT_GUI;
// y esta para Windows and Linux:
//  char ctrlKey = KEY_LEFT_CTRL;  

void setup() 
   {  // usa pin 2 como entrada y activa la resistencia “pullup” de manera que 
      // el pin permanezca en alta salvo que esté conectado a tierra.
      pinMode(2, INPUT_PULLUP);
      // inicia control del teclado:
      Keyboard.begin();
   }                 

void loop() 
   {   while (digitalRead(2) == HIGH) 
          {  // no hacer nada hasta que el pin 2 pase a baja
             delay(500);
          }
       delay(1000);
       // Nuevo documento:
       Keyboard.press(ctrlKey);
       Keyboard.press('n');
       delay(100);
       Keyboard.release(ctrlKey);
       Keyboard.release('n');
       // espera a que se abra una nueva ventana:
       delay(1000);
   }

Ver también:

-Keyboard.begin()-Keyboard.end() -Keyboard.press() -Keyboard.print() 
-Keyboard.println() -Keyboard.releaseAll() -Keyboard.write() 
-Keyboard Modifiers

 

La función Keyboard.releaseAll()   

Descripción:

Desactiva todas las teclas pulsadas en ese momento. Ver la función Keyboard.press() para más información.

Sintaxis:

Keyboard.releaseAll ()

Parámetros:

Ninguno

Devuelve:

int: el número de teclas liberadas.

 Ejemplo:

// usa esta opción para OSX:
char ctrlKey = KEY_LEFT_GUI;
// y esta otra para Windows y Linux:
//  char ctrlKey = KEY_LEFT_CTRL;  

void setup() 
   {  // configure el pin 2 como entrada y active la Resistencia pullup  
      // de manera que el pin este en alta salvo que esté conectado a tierra:
      pinMode(2, INPUT_PULLUP);
      // inicializa el control del teclado:
      Keyboard.begin();
   }

void loop() 
   {   while (digitalRead(2) == HIGH) 
          {  // no hagas nada hasta que el pin 2 esté en baja
             delay(500);
           }
       delay(1000);
       // Nuevo documento:
       Keyboard.press(ctrlKey);
       Keyboard.press('n');
       delay(100);
       Keyboard.releaseAll();
       // espera a que se abra la nueva ventana
       delay(1000);
   }

Ver también:

-Keyboard.begin() -Keyboard.end()-Keyboard.press()-Keyboard.print()
-Keyboard.println() -Keyboard.release()-Keyboard.write()-Keyboard Modifiers

 

La función Keyboard.write()  

Descripción:

Envía una pulsación de una tecla al ordenador conectado. Esto equivale a pulsar y soltar una tecla en tu teclado. Puedes enviar caracteres ASCII o los caracteres modificadores y aquellos generados por las teclas especiales.

Solamente los caracteres ASCII que están en el teclado pueden ser enviados con esta función. Por ejemplo ASCII 8 (“backspace” = retroceso) funcionaría, pero no ASCII 25 (substitución). Para enviar caracteres en mayúsculas, Keyboard.write()envía primero un commando “shift” y después el carácter deseado, como haríamos desde el teclado. Si se envía un valor numérico, lo escribe como un carácter ASCII (por ejemplo, keyboard.write(97) enviará ‘a’).

 Para obtener una lista completa de caracteres ASCII ver asciitable.com

 ADVERTENCIA: ¡cuando uses el comando Keyboard.write(),el Arduino toma el control del teclado! Asegúrate de que tienes el control del teclado antes de usar el comando. Una pulsación de una tecla en el teclado real basta para retomar el control del teclado desde el ordenador

 Sintaxis:

Keyboard.write(character)

  Parámetros:

character : un char o int que será enviado al ordenador. Puede ser enviado en cualquier notación aceptable para un tipo char. Por ejemplo, todos las siguientes maneras son aceptables y envían el mismo valor 65 o ASCII A:

Keyboard.write(65);         //envía el código ASCII 65, o A
Keyboard.write('A');         //lo mismo como carácter entre comillas
Keyboard.write(0x41);       // lo mismo en hexadecimal
Keyboard.write(0b01000001); // lo mismo en binario (extraño, pero funciona)

Devuelve:

int: número de bytes enviados

Ejemplo:

void setup()
  {   // configure el pin 2 como entrada y active la Resistencia pullup  
      // de manera que el pin este en alta salvo que esté conectado a tierra:
      pinMode(2, INPUT_PULLUP);
      // inicializa el control del teclado:
      Keyboard.begin();
  }

void loop() 
   {   //si se ha pulsado el botón
       if(digitalRead(2)==LOW)
         { //Enviar un caracter ASCII 'A', 
           Keyboard.write(65);
         }
   }

Ver también:

-Keyboard.begin() -Keyboard.end() -Keyboard.press()-Keyboard.print() 
-Keyboard.println() -Keyboard.release() -Keyboard.releaseAll()
- Tutorial ASCIITable

 

Funciones de Conversion

 

La función char()   

Descripción:

Convierte un valor al tipo “char”.

Sintaxis:

char(x)

Parámetros:

x: un valor de cualquier tipo

Devuelve:

Un valor de tipo “char

Ver también:

-char

 

La función byte()   

Descripción:

Convierte un valor al tipo “byte”.

Sintaxis:

byte(x)

Parámetros:

x: un valor de cualquier tipo

Devuelve:

Un valor de tipo “byte

Ver también:

-byte

 

La función int()   

Descripción:

Convierte un valor al tipo “int”.

Sintaxis:

int(x)

Parámetros:

x: un valor de cualquier tipo

Devuelve:

Un valor de tipo “int

Ver también:

-int

 

La función word()   

Descripción:

Convierte un valor al tipo “char” o crea un valor tipo word a partir de dos bytes.

Sintaxis:

word(x) 
word(h,l)

Parámetros:

x: un valor de cualquier tipo

h: el byte de mayor peso (el de la izquierda) de la palabra (word)

l: el byte de menor peso (el de la derecha) de la palabra (word)

 Devuelve:

Un valor de tipo “word

 Ver también:

-word

 

La función long()   

Descripción:

Convierte un valor al tipo “long”.

Sintaxis:

long(x)

Parámetros:

x: un valor de cualquier tipo

Devuelve:

Un valor de tipo “long

Ver también:

-long

 

La función float()   

Descripción:

Convierte un valor al tipo “float”.

Sintaxis:

float(x)

Parámetros:

x: un valor de cualquier tipo

Devuelve:

Un valor de tipo “float

Nota:

Ver en la referencia “float” en el manual de programación los detalles sobre la precisión y las limitaciones de los números en coma flotante en el Arduino.

Ver también:

-float

 

¡Ofertón!

Robot Rover 4×4

Ahora por sólo

50€ + IVA

¡Lo quiero!