Buenas, en el ejemplo de la carpeta SotwareSerial, viene dos ejemplos, uno de ellos es el siguiente, alguien me puede aclarar si el objetivo del ejemplo, es escribir por el puerto serie creado, y leerlo por el puerto serie emulado atraves del usb? De ser asi, una manera de testear el propio puerto serie seria puentear los pines TX y RX en placa de Arduino ??
/*
Software serial multple serial test
Receives from the hardware serial, sends to software serial.
Receives from software serial, sends to hardware serial.
The circuit:
* RX is digital pin 10 (connect to TX of other device)
* TX is digital pin 11 (connect to RX of other device)
Note:
Not all pins on the Mega and Mega 2560 support change interrupts,
so only the following can be used for RX:
10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
Not all pins on the Leonardo support change interrupts,
so only the following can be used for RX:
8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
created back in the mists of time
modified 25 May 2012
by Tom Igoe
based on Mikal Hart's example
This example code is in the public domain.
*/
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Muchas gracias, he cogido este codigo como ejemplo, su conexion, seria la siguiente; del dispositvo el pin TX al pin 10 y el RX del dispositvo al 11 de arduino??
Bueno... creo que no fui muy claro al explicar la conexión. Voy de nuevo:
Pin 10 al TX del cual-sea el dispositivo (si es al mismo Arduino, ese sería el pin 1).
Pin 11 al RX del cual-sea el dispositivo (si es al mismo Arduino, ese sería el pin 0).
Si, lo he entendido, gracias, pero, no logro entender porque no funciona, salvo que el dispositivo este defectuoso. Cuando lo hago con arduino, escribir y leer asigo mismo, funciona correctamente.
En el monitor serie, me devuelve unos caracteres raros, como si no estuvieran ajustados los baudios correctamente, el caso, es que en el datasheet, expecifica los 9600. He cambiado la velocidad de arduino por si las moscas y probado todas las velocidades en el monitor serie. Cuando se suministra corriente a arduino, se enciende el led durante un segundo, y ya no vuelve a volcar nada mas.
Asegúrate de que ambos dispositivos tienen configurada la misma velocidad, si tienes configurado 9600 baudios en uno tiene que tener la misma velocidad configurada en el otro.
Puedes usar otros más rápidos o más lentos, según tus necesidades, pero siempre tiene que ser la misma velocidad en ambos.
Si, esta ajustado a 9600. Pero, devuelve valores extraños por el monitor serie, en cuanto mas velocidad, mas caracteres y en cuanto menos velocidad, menos ... aunque no siempre son los mismos.
Oskar_Sanchez:
Me da este error, he estado revisando la informacion, y acerca de SoftwareSerial, no he encontrado si se puede expecificar estos parametros.
no matching function for call to 'SoftwareSerial::begin(int, int)'
¡Houston, tenemos un problema!
Y uno complicado de resolver. Si tienes un convertidor USB a TTL, te salvaste; sino... vas a tener que encontrar una manera alternativa de mostrar texto (LCD, archivo en una SD, etc.)
Lo que ocurre es lo siguiente: SoftwareSerial no tiene cómo configurar el formato de datos; por lo tanto, sólo te queda conectar el dispositivo a los pines 0 y 1 del Arduino (0 a TX, 1 a RX)
Aquí viene la parte complicada: usar el monitor serie cuando hay algo conectado en los pines 0 y 1, es motivo de conflicto en la comunicación. Si tuvieras un Arduino Mega o un convertidor USB a TTL, ya el problema estaría resuelto; pero si no... tendrás que recurrir a las alternativas que te mencioné anteriormente.
Tengo ambas alternativas, por lo general, uso Mega por las necesidades fisicas. Si no he entendido mal, me recomiendas, que deje de usar softwareSerial, siga usando Serial0 para la comunicacion del monitor serie, y utilize los demas puertos ttl como por ejemplo Serial1 para la comunicacion entre el dispositivo y arduino, verdad? Asi, ya podría quedar y probar la comunicacion Serial1.begin(9600, ....)
Algo se ha avanzado, con la siguiente configuracion, por el monitor serie, muestra el numero 7. Que quiere decir, no lo se, no hay ninguna etiqueta cerca que pueda leer, y cuando se acerca una, no muestra ningun sintoma.
Hola.
Acabo de echar un vistazo somero al datasheet y hay dos cosillas:
1- El cacharro, al parecer, trabaja a 3V, con lo que supongo que las señales también.
2- No se envían/reciben caracteres ascii legibles, sino directamente valores.
Es decir, que no esperes recibir por serial nada reconocible. La configuración del puerto es 9600 y la típica (sin paridad, 1 bit start y 1 bit stop).
De momento muestra lo que recibes por serial, en lugar de tal y como viene, como bytes en hexadecimal, a ver si reconocemos la cabecera (AABB).
if (Serial1.available()) {
Serial.print(Serial1.read(), HEX);
}
Buenas, gracias Noter. He modificado el programa, por el monitor serial aparece "AABB60001302". Esto con la configuracion SERIAL_8N1, con SERIAL_8E1 "3712", con SERIAL_8O1 "AA10020". No se si puede servir de ayuda.
noter:
2- No se envían/reciben caracteres ascii legibles, sino directamente valores.
Argh. Esa parte de que envía datos binarios fue la que no capté, por eso las pruebas.
Si con SERIAL_8N1 se lee correctamente la cabecera "AABB", entonces ya no será necesario el segundo parámetro en begin (también SoftwareSerial se podrá utilizar sin problemas).
En resumidas cuentas: noter fue quién dio la solución, yo solo te dije que hicieras cosas que al final NO SIRVIERON PARA NADA
Por eso nos devolvemos otra vez a lo de usar el SoftwareSerial...
Gracias a ambos, todo proceso conlleva su aprendizaje, por ahora, hemos avanzado bastante, apriori, parece que estamos escribiendo sobre una etiqueta, o llevo mal las cuentas? Porque, por el momento, las etiquetas son solo de lectura, es bueno saberlo para un futuro, por ahora no le puedo dar salida. En el datasheet, el punto 4 es de lectura.
Read ID
Command code: 0x0104
Parameters: NONE
Remarks: Please make sure that the antenna has been opened before to send command
Answer data: 12 bytes of data.
1 to 5 bytes: National ID, 38 bits, High 2 bits as invalid data.
6 to 7 bytes: Country ID,10 bits, High 6 bits as invalid data.
8th byte: Data Flag, 1 bit,High 7 bits to retain data. If the Data Flag = 1,
additional data is valid; otherwise, additional data is invalid.
9 bytes: Animal Flag, 1 bit,High 7 bits to retain data.
10 to 12 bytes: additional data.
Esto quiere decir, que debo escribir el codigo de comando 0x0104 para que me devuelva la lectura de la etiqueta? Gracias por aclarar la comunicacion por los demas puertos series.