El hardware Arduino ha incorporado soporte para la comunicación serie en los pines 0 y 1 (que también va al ordenadora través de la conexión USB). El soporte nativo serie pasa a través de un componente de hardware (integrado en el chip) llamado UART. Este hardware permite el chip ATmega recibir la comunicación serie incluso mientras trabaja en otras tareas, siempre que haya espacio en la memoria intermedia serie de 64 bytes.
La biblioteca SoftwareSerial ha sido desarrollada para permitir la comunicación serie en otros pines digitales del Arduino, usando el software para replicar la funcionalidad (de ahí el nombre de "SoftwareSerial"). Es posible tener múltiples puertos serie de programas con velocidades de hasta 115200 bps. Un parámetro permite la señalización invertida para dispositivos que requieren ese protocolo.La versión de SoftwareSerial incluido en la versión 1,0 y posteriores se basa en la biblioteca NewSoftSerial escrita por Mikal Hart.
Limitaciones
La biblioteca tiene las siguientes limitaciones conocidas:
- Si se usa con puertos serie de programas múltiples, sólo uno puede recibir datos a la vez.
- No todos los pines en las placas Mega y Mega 2560 soportan nterrupciones de cambio de nivel, por lo que solamente los siguientes se pueden utilizar 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).
- No todos los pines de las placas Leonardo y Micro soportan interrupciones de cambio de nivel, así que solamente los siguientes se pueden utilizar para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
- En Arduino o Genuino 101 la velocidad máxima actual de RX es de 57600bps
- En Arduino o Genuino 101 RX no funciona en el pin 13
- Si su proyecto requiere flujos de datos simultáneos, consulte la biblioteca AltSoftSerial de Pablo Stoffregen. AltSoftSerial supera una serie de problemas con el núcleo SoftwareSerial, pero tiene sus propias limitaciones. Consulte el sitio AltSoftSerial para más información.
FUNCIONES
SoftwareSerial(rxPin, txPin, inverse_logic)
Descripción:
SoftwareSerial se utiliza para crear una instancia de un objeto SoftwareSerial, cuyo nombre es necesario proporcionar al igual que en el ejemplo siguiente. El argumento inverse_logic es opcional y por defecto es false. Véase más abajo para más detalles acerca de lo que hace. Con SoftwareSerial pueden ser creados objetos múltiples, sin embargo, sólo uno puede estar activo en un momento dado.Es necesario llamar a SoftwareSerial.begin () para permitir la comunicación.
Parámetros:
rxPin: el pin en que se desea recibir datos serie
TxPin: el pin en el que se transmiten los datos
serieinverse_logic: se utiliza para invertir el sentido de los bits entrantes (el valor por defecto es de lógica normal). Si se activa, SoftwareSerial pone un nivel LOW (0 voltios) en el pin Rx como 1 bit (estado de reposo) y un nivel HIGH (5 voltios) como 0 bits. También afecta a la forma en que se escribe en el pin Tx. El valor por defecto es false.
Advertencia: No se debe conectar dispositivos en los que los datos de salida serie estén fuera del rango que el Arduino puede manejar, normalmente de 0 V a 5 V, para una placa alimentada a 5 V y 0 V a 3,3 V para una placa que funciones a 3,3 V.
Ejemplo:
#include <SoftwareSerial.h>
const byte rxPin = 2;
const byte txPin = 3;
// configura un nuevo objeto serie
SoftwareSerial mySerial (rxPin, txPin);
________________________________________________________________________________
const byte rxPin = 2;
const byte txPin = 3;
// configura un nuevo objeto serie
SoftwareSerial mySerial (rxPin, txPin);
________________________________________________________________________________
available()
Descripción:
Obtiene el número de bytes (caracteres) disponibles para la lectura de un puerto serie software. Se trata de datos que ya llegaron y se almacenan en la memoria intermedia de recepción serie.
Sintaxis:
mySerial.available()
Parámetros:
Ninguno
Retornos:
El número de bytes disponibles para leer.
________________________________________________________________________
begin()
Descripción:
Configura la velocidad (baudios) para la comunicación serie. Las velocidades de transmisión admitidas son 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600 y 115200.
Parámetros:
speed: la velocidad de transmisión (long)
Retornos:
Ninguno
Ejemplo:
// incluye la biblioteca SoftwareSerial para poder usar estas funciones:
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
// configura un nuevo puerto serie
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
// defines los modos de pin para tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// configura la velocidad de datos del puerto SoftwareSerial
mySerial.begin(9600);
}
void loop() {
// ...
}
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
// configura un nuevo puerto serie
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
void setup() {
// defines los modos de pin para tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// configura la velocidad de datos del puerto SoftwareSerial
mySerial.begin(9600);
}
void loop() {
// ...
}
________________________________________________________________________
isListening()
Descripción:
Prueba para ver si el puerto serie software solicitado está escuchando activamente.
Sintaxis:
mySerial.isListening()
Parámetros:
Ninguno
Retornos:
boolean
Ejemplo:
#include <SoftwareSerial.h>
// software serial : TX = pin digital 10, RX = pin digital 11
SoftwareSerial portOne(10,11);
void setup()
{
// Inicia el puerto serie hardware
Serial.begin(9600);
// Inicia el puerto serie software
portOne.begin(9600);
}
void loop()
{
if (portOne.isListening()) {
Serial.println("El puerto Uno esta a la escucha!");
}
// software serial : TX = pin digital 10, RX = pin digital 11
SoftwareSerial portOne(10,11);
void setup()
{
// Inicia el puerto serie hardware
Serial.begin(9600);
// Inicia el puerto serie software
portOne.begin(9600);
}
void loop()
{
if (portOne.isListening()) {
Serial.println("El puerto Uno esta a la escucha!");
}
________________________________________________________________________
overflow()
Descripción:
Prueba para ver si se ha producido un desbordamiento de la memoria intermedia serie de software. La llamada a esta función borra la bandera de desbordamiento, lo que significa que las llamadas posteriores retornarán false a no ser que otro byte de datos se haya recibido y se descarte mientras tato.
El buffer serie del software puede contener 64 bytes.
Sintaxis:
mySerial.overflow()
Parámetros:
Ninguno
Retornos:
boolean
Ejemplo:
#include <SoftwareSerial.h>
// software serial : TX = pin digital 10, RX = pin digital 11
SoftwareSerial portOne(10,11);
void setup()
{
// Inicia el puerto serie hardware
Serial.begin(9600);
// Inicia el puerto serie software
portOne.begin(9600);
}
void loop()
{
if (portOne.overflow()) {
Serial.println("Desbordamiento de SoftwareSerial!");
}
________________________________________________________________________________
// software serial : TX = pin digital 10, RX = pin digital 11
SoftwareSerial portOne(10,11);
void setup()
{
// Inicia el puerto serie hardware
Serial.begin(9600);
// Inicia el puerto serie software
portOne.begin(9600);
}
void loop()
{
if (portOne.overflow()) {
Serial.println("Desbordamiento de SoftwareSerial!");
}
________________________________________________________________________________
peek()
Descripción:
Devuelve un carácter que se recibió el pin RX del puerto serie de software. A diferencia de read(), sin embargo, las posteriores llamadas a esta función devolverán el mismo carácter.
Tenga en cuenta que sólo una instancia SoftwareSerial puede recibir datos entrantes a la vez (seleccione uno de ellos con la función listen ()).
Parámetros:
Ninguno
Retornos:
el carácter leído, o -1 si no hay disponibles
Ejemplo:
SoftwareSerial mySerial(10,11);
void setup()
{
mySerial.begin(9600);
}
void loop()
{
char c = mySerial.peek();
}
void setup()
{
mySerial.begin(9600);
}
void loop()
{
char c = mySerial.peek();
}
________________________________________________________________________
read()
Descripción:
Devuelve un carácter que se recibió el pin RX del puerto serie de software.
Tenga en cuenta que sólo una instancia SoftwareSerial puede recibir datos entrantes a la vez (seleccione uno de ellos con la función listen ()).
Parámetros:
Ninguno
Retornos:
el carácter leído, o -1 si no hay disponibles
Ejemplo:
SoftwareSerial mySerial(10,11);
void setup()
{
mySerial.begin(9600);
}
void loop()
{
char c = mySerial.read();
}
void setup()
{
mySerial.begin(9600);
}
void loop()
{
char c = mySerial.read();
}
_________________________________________________________________________________
print(data)
Descripción:
Imprime datos al pin de transmisión del puerto serie software. Funciona igual que la función Serial.print ().
Parámetros:
varian, consulte Serial.print () para más detalles
Retornos:
byte
print () devolverá el número de bytes escritos, la lectura de ese número es opcional
Retornos:
byte
print () devolverá el número de bytes escritos, la lectura de ese número es opcional
Ejemplo:
SoftwareSerial serial(10,11); int analogValue; void setup() { serial.begin(9600); } void loop() { // lee la entrada analogica del pin A0: analogValue = analogRead(A0); // imprime en cualquiera de los formatos: serial.print(analogValue); // imprime como un ASCII-codificado decimal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, DEC); // imprime como un ASCII-codificado decimal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, HEX); // imprime como un ASCII-codificado hexadecimal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, OCT); // imprime como un ASCII-codificado octal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, BIN); // imprime como un ASCII-codificado binary serial.print("\t"); // imprime un caracter tab serial.print(analogValue/4, BYTE); // imprime como un valor byte en bruto (divide el // valor por 4 porque analogRead() devuelve numeros // de 0 a 1023, pero un byte solo puede soportar valores // de hasta 255) serial.print("\t"); // imprime un caracter tab serial.println(); // imprime un caracter de retorno de linea // espera 10 millisegundos antes de la siguiente lectura: delay(10); } _________________________________________________________________________________
println(data)
Descripción:
Imprime datos al pin de transmisión del puerto serie software. Funciona igual que la función Serial.println ().
Parámetros:
varian, consulte Serial.println () para más detalles
Retornos:
byte
println () devolverá el número de bytes escritos, la lectura de ese número es opcional
Retornos:
byte
println () devolverá el número de bytes escritos, la lectura de ese número es opcional
Ejemplo:
SoftwareSerial serial(10,11); int analogValue; void setup() { serial.begin(9600); } void loop() { // lee la entrada analogica del pin A0: analogValue = analogRead(A0); // imprime en cualquiera de los formatos: serial.print(analogValue); // imprime como un ASCII-codificado decimal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, DEC); // imprime como un ASCII-codificado decimal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, HEX); // imprime como un ASCII-codificado hexadecimal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, OCT); // imprime como un ASCII-codificado octal serial.print("\t"); // imprime un caracter tab serial.print(analogValue, BIN); // imprime como un ASCII-codificado binary serial.print("\t"); // imprime un caracter tab serial.print(analogValue/4, BYTE); // imprime como un valor byte en bruto (divide el // valor por 4 porque analogRead() devuelve numeros // de 0 a 1023, pero un byte solo puede soportar valores // de hasta 255) serial.print("\t"); // imprime un caracter tab serial.println(); // imprime un caracter de retorno de linea // espera 10 millisegundos antes de la siguiente lectura: delay(10); }
listen()
Descripción:
Permite al puerto serie software seleccionado escuchar. Sólo un software de puerto serie puede escuchar a la vez; los datos que llegan de otros puertos serán descartados. Cualquier dato recibido se descarta ya durante la llamada a listen () (a menos que la instancia dad ya esté a la escucha).
Sintaxis:
mySerial.listen()
Parámetros:
mySerial: el nombre de la instancia a escuchar
Retornos:
Ninguno
Retornos:
Ninguno
Ejemplo:
#include <SoftwareSerial.h> // software serial : TX = pin digital 10, RX = pin digital 11 SoftwareSerial portOne(10, 11); // software serial : TX = pin digital 8, RX = pin digital 9 SoftwareSerial portTwo(8, 9); void setup() { // Inicia el puerto serie hardware Serial.begin(9600); // Inicia ambos puertos software portOne.begin(9600); portTwo.begin(9600); } void loop() { portOne.listen(); if (portOne.isListening()) { Serial.println("Puerto Uno a la escucha!"); }else{ Serial.println("Puero Uno no esta a la escucha!"); } if (portTwo.isListening()) { Serial.println("Puerto Dos a la escucha!"); }else{ Serial.println("Puero Dos no esta a la escucha!"); } } __________________________________________________________________________________
write(data)
Descripción:
Imprime datos al pin de transmisión del puerto serie software como bytes en bruto. Funciona igual que la función Serial.write ()
Parámetros:
Ver Serial.write () para detalles
Retornos:
byte
write() devolverá el número de bytes escritos, la lectura de ese número es opcional
Retornos:
byte
write() devolverá el número de bytes escritos, la lectura de ese número es opcional
Ejemplo:
SoftwareSerial mySerial(10, 11);
void setup()
{
mySerial.begin(9600);
}
void loop()
{
mySerial.write(45); // envia un byte con el valor 45
int bytesSent = mySerial.write(“Hola”); //envia la cadena “Hola” y devuelve la longitud de la cadena.
}
void setup()
{
mySerial.begin(9600);
}
void loop()
{
mySerial.write(45); // envia un byte con el valor 45
int bytesSent = mySerial.write(“Hola”); //envia la cadena “Hola” y devuelve la longitud de la cadena.
}
EJEMPLOS
Software Serial Example: Utilice esta biblioteca ... porque a veces un puerto serie no es suficiente!
Two Port Receive: Trabaja con múltiples puertos de serie de programas.
Se puede usar con pines analogicos en el arduino UNO?
ResponderEliminarEn Arduino UNO los pines analogos A0~A5 se comportan como digitales 14~19.
EliminarComo hacemos si queremos inicializar el puerto serie en 4800 baudios, 7 bit de datos, paridad par y 2 bit de stop,
ResponderEliminarSerial.begin(4800,7E2) No me funciona.
Gracias
FUNCIONES DE BIBLIOTECA VISUAL
ResponderEliminarhttps://sites.google.com/site/softwareescuela/
Utilizar el programa en varios equipos en red (Uno con la base de datos y varios ejecutables en diferentes equipos)
si lo desea puede hacer que los equipos que no tienen la base de datos sean de solo lectura
Utilizar contraseña si el usuario lo desea, activarla, desactivarla y cambiarla
Utilizar lector de código de barras en el campo inventario o ISBN
Utiliza una sola rejilla de resultados en una sola ventana solo cambian los datos dependiendo de la consulta que
puede ser en cinco tablas ( Existencia, Prestados, Vendidos, Historial y Usuarios ) o consulta en todas las tablas
( La tabla actual se muestra en el titulo del programa )
Las búsquedas pueden ser en cualquier campo, en diferentes tablas, en todas las tablas, y entre un intervalo de
tiempos ( Principio a Fin )
Ver los totales de cantidades y precios al ejecutar las consultas
Agregar el registro seleccionado a prestados o a vendidos, al borrar estos registros de prestados o vendidos se
pasan directamente a la tabla historial, también se pueden borrar del historial
Mostrar todos los registros de una tabla con un solo botón ( Mostrar todos )
Agregar registros a la tabla Existencia y Usuarios desde un solo botón ( Agregar registro ) o desde Internet a la
tabla existencia
Agregar una imagen a cada registro al agregar registros o automáticamente desde Internet
Editar el registro seleccionado directamente o con el botón ( Editar seleccionado )
Borrar el registro seleccionado desde el botón ( Borrar registro )
Agregar o editar la imagen del registro desde el botón ( Seleccionar imagen )
Ver la imagen en tamaño completo desde la imagen del registro seleccionado
Imprimir Nota de venta y cualquier consulta realizada
Traspasar cualquier consulta a Excel
Configurar el programa al gusto ( Nota de venta, Colores, textos, objetos, imágenes etc. )
Ver la ayuda en vídeos en línea
Ordenar los registros por cualquier campo
Cambiarse de tabla en el menú tabla a ( Existencia, Prestados, Vendidos, Historial y Usuarios )
Cambiar el nombre de lugar a todos los registros con ese nombre de lugar en la tabla Existencia
Buscar registros con cualquier texto en el titulo
Si el registro guardado tiene contenido digital en línea url "Uniform Resource Locator" se puede acceder a ella
seleccionando el registro, buscar en, ir a url de registro y abrirá su explorador con la url del registro seleccionado
Agregar registros desde internet desde el botón ( Agregar desde internet )
Respaldar tabla existencia y archivo mdb en Google Drive
Envía mensajes por correo a los usuarios registrados, usuarios con ventas o usuarios con prestamos.
descarga:
https://sites.google.com/site/softwareescuela/
Hola Manuel, me gustaría que me comentaras la siguiente estructura que he encontrado en un programa y no la encuentro en ninguna biblioteca y es la siguiente:
ResponderEliminarString GetLine() // esto es lo que no entiendo "String" funcionando con un "void"
{ String S = "" ;
if (Serial.available())
{ char c = Serial.read(); ;
while ( c != '\n') //Hasta que el caracter sea intro
{ S = S + c ;
delay(25) ;
c = Serial.read();
}
return( S + '\n') ;
}
}
Muchas gracias de antemano.
para arduino UNO se explica cuales pines pueden trabajar como RX, pero hay pines definidos para usar como TX?
ResponderEliminarse puede usar esta libreria en un arduino nano? que pines se pueden usar?
ResponderEliminartus códigos no valen verga deberes pensar en dedicarte a otra cosa perrra
ResponderEliminarse puede ser tan, pero tan zorete mal cagado?
Eliminargracias por su compromiso, compartir y sus buenos aportes.
ResponderEliminar