Paso 4: Configuración y programación Arduino y recibir XBee
Programar la recepción XBee utilizando X-CTU como hiciste con el XBee que transmite pero con la configuración siguiente:
+++
ATRE
ATMY5678
ATDL1234
ATDH0
ATID0
ATWR
El programa que modifiqué de la muy útil libro de Arduino se expone a continuación. Ya que todavía estoy trabajando lo todo se dejo como ejercicio para los usuarios interesados a desglose la manera que el programa saca los datos importantes enviados el marco de la API. Hace falta decir que sin Michael Margolis establecen el marco para recibir a los datos recibidos no habría descubierto que fuera dada una cantidad infinita de tiempo. Estoy seguro de que hay detalles del código que se podría eliminar pero no he probado adelgazar abajo todavía y ya que funciona como por el momento dejo. Transferencia de este programa a tu Arduino y pasar a la etapa final y considerar lo que puede Agregar al proyecto.
/*********
*
* ER_RemoteA (opción remota ingeniería y robótica)
*
* XBee independiente transmisor envía las lecturas de joystick analógico a un Arduino
* receptor conexión XBee. Valores analógicos se pueden leer un par de
* Palancas de mando para conducir un motor izquierdo y derecho en modo"tanque".
*
* Un motorshield Adafruit está conectado a Arduino UNO para manejar el control de la dirección del motor.
* Los motores utilizados son motores VEX.
*
* XBee comunicación ocurre a través de pernos Digital 14 y 15 (A0 y A1) a través de software serie
* al salir de TX y RX para comunicación serial y depuración. Hay mucho
* de depuración leer salidas que pueden ser eliminados del código. Subrutinas también podrían ser utilizados para
* limpiar el código.
*
* Adaptado del recetario de Arduino: Sección 14.4
* Fecha: 15 de agosto de 2013
* Autor: Mylo Hildebrand
*
***********/
#include < AFMotor.h >
#include < SoftwareSerial.h >
SoftwareSerial xbee(14,15); RX, TX
Leftmotor(1) de AF_DCMotor;
Rightmotor(2) de AF_DCMotor;
void setup() {}
Serial.Begin(9600);
Establecer la tarifa de datos para el puerto SoftwareSerial
XBee.Begin(9600);
configureRadio(); Compruebe el valor devuelto si usted necesita tratamiento de errores
}
Boolean configureRadio() {}
poner la radio en modo comando:
while(XBee.Read() > = 0);
XBee.Print("+++");
Delay(100);
String ok_response = "OK\r"; la respuesta que esperamos.
Leer el texto de la respuesta en la variable de respuesta
String respuesta = String("");
mientras que (response.length() < ok_response.length()) {}
Si (xbee.available() > 0) {}
xbee.read() += (char) de respuesta;
}
}
Si tenemos la respuesta correcta, configure la radio y devolver true.
Si (response.equals(ok_response)) {}
XBee.Print("ATAP1\r"); Entrar en el modo API
Delay(100);
XBee.Print("ATCN\r");
verdaderas;
}
Else {}
devuelven el valor false; Esto indica que la respuesta era incorrecta.
}
}
void loop() {}
Si (xbee.available() > = 14) {/ / esperar a que tenemos un bocado de datos
Si (xbee.read() == 0x7E) {/ / comienzo delimitador de un marco de
Saltar sobre los bytes en el marco del API que no nos importa
para (int i = 0; i < 10; i ++) {}
XBee.Read();
}
Los siguientes dos bytes son los bytes altos y bajos de la lectura del sensor
int leftHigh = xbee.read();
Serial.Print ("HL:");
Serial.println(leftHigh);
int leftLow = xbee.read();
Serial.Print ("LL:");
Serial.println(leftLow);
int leftValue = leftLow + (leftHigh * 256);
Serial.Print ("AL:");
Serial.println(leftValue);
int rightHigh = xbee.read();
Serial.Print ("hora:");
Serial.println(rightHigh);
int rightLow = xbee.read();
Serial.Print ("LR:");
Serial.println(rightLow);
derechovalor int = rightLow + (rightHigh * 256);
Serial.Print ("AR:");
Serial.println(rightValue);
Conducir las funciones utilizando palancas de mando análogas. Izquierda para izquierda y derecha para derecha.
int leftjoystick = mapa (leftValue, 0, 1023, -250, 250);
if(leftjoystick > 50) / / valores de impresión palo si bien es cierto
{
leftmotor.setSpeed(leftjoystick);
leftmotor.Run(backward);
}
else if (leftjoystick < -50) / / valores de impresión palo si bien es cierto
{
leftmotor.setSpeed(abs(leftjoystick));
leftmotor.Run(Forward);
}
otra cosa
{
leftmotor.setSpeed(0);
}
int rightjoystick = mapa (derechovalor, 0, 1023, -250, 250);
Si (rightjoystick > 50) / / valores de impresión palo si bien es cierto
{
rightmotor.setSpeed(rightjoystick);
rightmotor.Run(Forward);
}
else if (rightjoystick < -50) / / valores de impresión palo si bien es cierto
{
rightmotor.setSpeed(abs(rightjoystick));
rightmotor.Run(backward);
}
otra cosa
{
rightmotor.setSpeed(0);
}
Delay(50);
}
}
}