SoftwareSerial

De ArduWiki
Revisión del 13:17 6 may 2019 de Kike GL (Discusión | contribuciones) (Referencias externas)

Saltar a: navegación, buscar

Descripción

La librería SoftwareSerial.h de Paul Stoffregen no esta en el Administrador de librerias del IDE.

El hardware Arduino tiene soporte incorporado (via un chip UART) para la comunicación en serie en los pines 0 y 1, pero estos pines también van al conector USB por donde se cargan los bocetos por lo que es delicado usarlos. El búfer en serie de 64 bytes.

Esta libreria permitir la comunicación en serie por otros pines digitales del Arduino, usando un software para replicar la misma funcionalidad. Es posible tener múltiples puertos serie de software con velocidades de hasta 115200 bps. Un parámetro habilita la señalización invertida para dispositivos que requieren ese protocolo.

Placas aplicables

Sintaxis

#include <SoftwareSerial.h>
SoftwareSerial BT(2,3);  //RX,TX

Métodos

Metodos disponible con SoftwareSerial.h
Método Descripción
begin() Abre el puerto serie, fija su configuración y velocidad de comunicación.
available() Indica el numero de bytes/caracteres disponibles para lectura.
read() Lee un carácter disponible y lo borra del buffer.
peek() Lee un carácter disponible pero queda disponible en el buffer (no borra).
write() Envia datos binarios al puerto serie.
print() Imprime una representación textual de un dato.
println() Imprime una representación textual de un dato junto con un salto de línea; o solo este último.
overflow() Ejemplo
listen() Ejemplo
isListening() Ejemplo

Limitaciones

La librería tiene las siguientes limitaciones conocidas:

  1. Si utiliza varios puertos serie de software, solo uno puede recibir datos a la vez.
  2. No todos los pines del MEGA admiten interrupciones, por lo que solo se puede usar lo siguiente para RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
  3. No todos los pines del LEONARDO admiten interrupciones, por lo que solo se puede usar lo siguiente para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
  4. En Arduino o Genuino 101, la velocidad máxima de RX actual es 57600 bps
  5. En Arduino o Genuino 101 RX no funciona en Pin 13

Nota: Si su proyecto requiere flujos de datos simultáneos, consulte la biblioteca AltSoftSerial de Paul Stoffregen, que supera una serie de problemas con el SoftwareSerial, pero tiene sus propias limitaciones.


Advertencias

Ejemplo 1

En este ejemplo lo que se reciba por un puesto serie se envía por el otro.

#include <SoftwareSerial.h>
SoftwareSerial miSerial(10, 11);   //Rx, Tx

void setup() {
   Serial.begin(57600);
   miSerial.begin(4800);
}

void loop() {
  if (miSerial.available()) {
    Serial.write(miSerial.read());
  }
  if (Serial.available()) {
    miSerial.write(Serial.read());
  }
}

Ejemplo 2

Aqui un ejemplo de implementacion de bluetooth.

#include <SoftwareSerial.h>
SoftwareSerial BT(2,3);  //RX,TX

void setup()   {
   Serial.begin(115200);
	//pinMode(4, OUTPUT);  //Pin Vcc del HC-05 (On/Off)
	//pinMode(5, OUTPUT);  //Pin KEY del HC-05 (HIGH = AT)
	//digitalWrite(5, HIGH);
	//delay(500);
	//digitalWrite(4, HIGH);
   BT.begin(9600);
   Serial.println("Mete comandos AT: ");
}

void loop()   {
   if (BT.available()){
      Serial.write(BT.read());
	}
   if (Serial.available()){  
		String cadena = "";
		char c = Serial.read(); ;
		while (c != '\n'){
			cadena += c ;
			delay(25) ;
			c = Serial.read();
		}
		cadena += c ;
      BT.print(cadena);
      Serial.println("---> " + cadena);
   }
}

Ejemplo 3

Otro ejemplo con el bluetooth.

#include <SoftwareSerial.h>
SoftwareSerial BT(2,3);  //RX,TX

void setup()   {
   Serial.begin(115200);
   BT.begin(57600);
}

void loop()   {
   if (BT.available()){
	   char c = BT.read();
      switch (c){
		case "A":
		   digitalWrite(10, HIGH);
         Serial.println("Prende 10");
			break;
		case "a":
		   digitalWrite(10, LOW);
         Serial.println("Apaga 10");
			break;
		case "B":
		   digitalWrite(11, HIGH);
         Serial.println("Prende 11");
			break;
		case "b":
		   digitalWrite(11, LOW);
         Serial.println("Apaga 11");
			break;
		}
	}
   if (Serial.available()){  
		String cadena = "";
		char c = Serial.read(); ;
		while (c != '\n'){
			cadena += c ;
			delay(25) ;
			c = Serial.read();
		}
		cadena += c ;
      BT.print(cadena);
      Serial.println("---> " + cadena);
   }
}

Vea también


Referencias externas