sirve - Lectura de datos en serie Arduino y XBee
para que sirve arduino (2)
Cambiar int
a byte
realmente está cambiando int a char
. Los símbolos que no son ASCII son el resultado de tratar de representar el personaje ( 0b11111111
). Negativo ( -1
) en decimal son todos en binario porque los int
están firmados por defecto. Mira el Conversor Bin / Dec / Hex para verificar.
Todo eso quiere decir que xbee.read()
devuelve un byte
/ char
. No pude encontrar nada en la documentación , pero supongo que el -1
se debe a un error (en función de la documentación en Serial
del hardware). Esto es porque no hay nada que leer.
Podrías probar lo siguiente:
- Asegúrese de que las líneas RX / TX sean correctas. Confía en mí, sucede.
- Verifique si el XBee tiene datos disponibles antes de la lectura. (Obtendrá muchas menos líneas impresas, ya que esperará hasta que un byte esté listo para leerse).
if (xbee.available()) {
byte temp= xbee.read();
Serial.print(temp);
}
- Use el built-in (hardware). SoftwareSerial debería funcionar, pero en mi experiencia, el hardware serial es mucho más confiable.
- Dependiendo de su (s) modelo (s) de Arduino, es posible que deba ( Desactivar reinicio automático en la conexión en serie ). Esto parece ser solo necesario si está intentando enviar datos a través del chip FTDI desde otro lugar que no sea el Monitor Serial del IDE (generalmente hablando).
- Este hilo de Arduino a Arduino XBee Serial Communication tiene una configuración muy similar que parece estar funcionando. Simplifique su esfuerzo tanto como sea posible y luego agregue lentamente la funcionalidad.
- Conecte directamente las líneas XBee RX y TX a un conector USB-a-FTDI, como este cable o esta placa de arranque .
Hasta que tenga una prueba de concepto que funcione, debe hacerlo lo más simple posible. Una vez que esté funcionando, agregue características de a una por vez. Esto parece ser lo que ya está haciendo, pero esto probablemente podría simplificarse aún más (elimine a los Arduinos de la ecuación usando solo FTDI, use hardware de serie, etc.).
Parece un proyecto genial. ¡Buena suerte!
Estoy teniendo lo siguiente:
Dos Arduinos y dos XBees . Quiero enviar datos de uno a otro. Los XBees se comunican, porque tengo la prueba de proposición (conecte un XBee con el Arduino y el otro a la PC, escriba desde uno, y mire al otro en la otra terminal).
Ahora quiero enviar datos de uno a otro:
Estos son mis dos guiones:
Para enviar (que se prueba en la prueba anterior que envía todas las letras):
#include <SoftwareSerial.h>
SoftwareSerial xbee(2, 3); // RX, TX
char c = ''A'';
int pingPong = 1;
void setup()
{
Serial.begin(9600);
Serial.println( "Arduino started sending bytes via XBee" );
//Set the data rate for the SoftwareSerial port
xbee.begin(9600);
}
void loop() {
// Send character via XBee to other XBee connected to Mac
// via USB cable.
xbee.write( c );
//--- Display the character just sent on console. ---
Serial.println( c );
//--- Get the next letter in the alphabet, and reset to ---
//--- ''A'' once we have reached ''Z''.
c = c + 1;
if ( c>''Z'' )
c = ''A'';
//--- Switch LED on Arduino board for every character sent---
if ( pingPong == 0 )
digitalWrite(13, LOW);
else
digitalWrite(13, HIGH);
pingPong = 1 - pingPong;
delay( 1000 );
}
El problema es cuando conecté un Arduino para recibir datos del otro XBee.
Aquí está mi código:
#include <SoftwareSerial.h>
SoftwareSerial xbee(2, 3); // RX, TX
void setup()
{
Serial.begin(9600);
Serial.println( "Arduino started receiving bytes via XBee" );
// Set the data rate for the SoftwareSerial port.
xbee.begin(9600);
}
void loop() {
int temp = xbee.read();
Serial.print("Character received:");
Serial.println(temp);
delay(1000);
}
La salida es siempre:
Character received: -1.
Si cambio la temp
de int
a byte
, veo el Character received: (a non-[ASCII][3] symbol)
.
Estoy usando la serie XBee 1.
Se configuran a través de X-CTU, basado en el tutorial que se encuentra en ladyada.net.
Luego conecté el XBee a un Arduino (TX al pin 3, RX a 2, Vcc y GND, respectivamente) y el otro XBee a la PC a través de un cable FTDI . Pude enviar personajes del Arduino y verlos en el monitor de serie del X-CTU. ¿Esto significa que están configurados correctamente?
Entonces quería conectar un Arduino a mi receptor. Puedes ver el código de arriba. Siempre obtengo datos no disponibles.
Devuelto -1 significa que no hay datos en la serie.
void loop() {
unsigned char temp; =
if (Serial.available() > 0){
temp = xbee.read();
Serial.print("Character received:");
Serial.println(temp,HEX);
}
prueba este código
Convertí tu int temp a unsigned char para manejar MSB. Esto funciona para mi. Pero utilicé Xbee serie 2 y serie de hardware. De todos modos, el manejo de datos es maters.