Ejemplo Software Serial

Las placas Arduino y Genuino están construidas para soportar la comunicación serie en los pines 0 y 1, pero a veces se necesitan más puertos serie. La Biblioteca SoftwareSerial ha sido desarrollada para permitir la comunicación serie que tendrá lugar en otros pines digitales de sus placas, utilizando el software para replicar la funcionalidad de las líneas RX y TX. Esto puede ser extremadamente útil cuando surge la necesidad de comunicarse con dos dispositivos serie, o para hablar con un solo dispositivo, dejando el puerto serie principal abierto para propósitos de depuración.

En el siguiente ejemplo, los pines digitales 10 y 11 en las placas Arduino o Genuino se utilizan como líneas serie virtuales RX y TX. El pin RX virtual está configurado para escuchar todo lo que venga de la línea serie principal, y luego hacer eco de los datospor la línea TX virtual. Por el contrario, cualquier cosa recibida en el RX virtual se envía a través del hardware TX.

Hardware necesario

Placa Arduino o Genuino

Circuito
No hay circuito para este ejemplo. Asegúrese de que la placa Arduino o Genuino está conectada al ordenador a través de USB para permitir la comunicación serie a través de la ventana del monitor serie del software de Arduino (IDE).



Código

// Prueba de miltiples puertos serie con SoftwareSerial

// Recibe desde hardware serie, envia al software serie. 
// Recibe desde software serie, envía al hardware serie. 

// Circuito: 
// * RX es pin digital 10 (conectarse a otro dispositivo de TX) 
// * TX es pin digital 11 (conectarse a otro dispositivo de RX) 
// Nota: 
// No todos los pines de la Mega y Mega 2560 soportan interrupciones del cambio de nivel, 
// por lo que solamente los siguientes se puede utilizar para 
//RX: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 
// No todos los pines de Leonardo soportan las interrupciones de cambio de nivel, 
// por lo que solamente la siguiente se pueden utilizar para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). 

// creado tiempo atras 
// modificado el 25 de Mayo de 2012 por Tom Igoe 
// basado en el ejemplo de Mikal Hart 

//Este código es de dominio público.
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  // Abre las comunicaciones serie y espera a que se abra el puerto:
  Serial.begin(57600);
  while (!Serial) {
    ; // espera a que el puerto serie se conecte. Necesario para el puerto USB nativo solamente
  }


  Serial.println("Buenas noches, luna!");

  // configura la velocidad de datos para el puerto SoftwareSerial
  mySerial.begin(4800);
  mySerial.println("Hola, mundo?");
}

void loop() { // se ejecuta una y otra vez
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}




2 comentarios:

  1. Hola disculpa no se si me puedes ayudar, quiero configurar la paridad y bits de parada diferentes, he visto que esta es la sintaxis Serial.begin(speed, config), lo he intentado así: Serial.begin(9600, SERIAL_8E2); pero al compilar sale error "no matching function for call to 'SortwareSerial::begin(int, int)'"

    ResponderEliminar