Lecture de données de plus de série de l'Arduino et XBee
Je vais avoir le suivant:
Deux Arduinos et deux XBees. Je veux envoyer des données à partir de l'une à l'autre. Le XBees communiquer, parce que j'ai le propose test (connecter un XBee avec l'Arduino et l'autre à l'ordinateur, à écrire à partir de l'un, et de regarder l'autre dans l'autre terminal).
Maintenant, je veux envoyer des données de l'un à l'autre:
Ce sont mes deux scripts:
Pour l'envoi (ce qui est testé dans l'ancien test qui envoie toutes les lettres):
#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 );
}
Le problème est quand j'ai connecté un Arduino pour recevoir des données à partir de l'autre XBee.
Voici mon code:
#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);
}
De sortie est toujours:
Character received: -1.
Si je change le temp
de int
à byte
je vois Character received: (a non-[ASCII][3] symbol)
.
Je suis en utilisant XBee série 1.
Ils sont configurés par le biais de X-CTU, basé sur un tutoriel trouvé sur ladyada.net.
Puis je l'ai connecté le module XBee à un Arduino (TX à la broche 3 RX-2, Vcc et GND, respectivement) et l'autre XBee sur le PC par l'intermédiaire d'un FTDI câble. J'ai été en mesure d'envoyer des caractères de l'Arduino et de les voir dans la série du moniteur de la X-CTU. Est-ce à dire qu'ils sont configurés correctement?
Puis j'ai voulu connecter un Arduino à mon récepteur. Vous pouvez voir le code ci-dessus. Je suis toujours pas de données disponibles.
Retourné -1 signifie qu'il n'y a pas de données dans la série.
J'ai essayé arduino Uno pour Uno et rduino Uno de micro.
OriginalL'auteur ghostrider | 2013-01-07
Vous devez vous connecter pour publier un commentaire.
Changer
int
àbyte
est vraiment changer de type int àchar
. Le non-ASCII symboles sont une raison d'essayer de rendre le personnage (0b11111111
). Négative (-1
) en décimal est tous ceux en binaire carint
's sont signés par défaut. Découvrez Bin/Dec/Hex Converter pour vérifier.Tous, c'est-à-dire que
xbee.read()
renvoie unebyte
/char
. Je n'étais pas en mesure de trouver quoi que ce soit dans la documentation, mais je suppose que le-1
est dû à une erreur (basée sur le matérielSerial
la documentation). C'est parce qu'il n'y a rien à lire.Vous pouvez essayer les suivantes:
Jusqu'à ce que vous ayez une preuve de concept, vous devez le rendre aussi simple que possible. Une fois que ça fonctionne ensuite ajouter des fonctionnalités à la fois. Cela semble correspondre à ce que vous faites déjà, mais cela pourrait être encore simplifié (couper les Arduinos de l'équation en utilisant FTDI seulement, l'utilisation de matériel de série, etc.).
Il ressemble à un joli projet cool. Bonne chance!
Si FTDI fonctionne alors essayez d'utiliser le Matériel Arduino en série. Je soupçonne que le problème est quelque part dans l'utilisation de
SoftwareSerial
ou un problème de la RX/TX lignes. (Probablement les deux). Vous pourriez essayer votre Arduino dans la tristate mode assurez-vous que votre RX/TX lignes sont correctes lors de l'utilisation de matériel de série. Une fois que c'est réglé, vous pouvez commencer à déboguer votre code.J'ai essayé de changer les ports (TX et RX) dans le cas où j'ai connecté le mal, mais toujours pas de changement. Je vais vérifier à nouveau avec cette Série sur le Matériel.
Je ne trouve pas d'exemples sur la façon d'utiliser le matériel biotiques? que voulez-vous dire?
Ici est la documentation du programme. Série matériel signifie que vous vous connectez les lignes série du xbee pour
"tx->1"
et"rx<-0"
(arduino.cc/en/Main/ArduinoBoardUno) (en haut à droite de la carte)OriginalL'auteur ZnArK
essayer ce code.
Je me suis converti votre int temp unsigned char à la poignée de l'ESM. Il fonctionne pour moi. Mais j'ai utilisé Xbee série 2 et la série sur le matériel. De toute façon, le traitement des données est l'homme.
OriginalL'auteur Satheesh Kumar