Paso 6: programación
Usted puede hablar con uno usando un programa de terminal ordinario, pero esto es inconveniente en OS X porque el XBee no devolver el comando de línea derecha nueva y todas las respuestas Haz mezcladas. Afortunadamente Tom Igoe ha caminado con un programa de terminal simple escrito en el proceso (y varias personas han ampliado desde entonces). Estoy usando una versión modificada del programa original de Tom, que entró con la mano fuera el texto en su libro "Hablar de cosas que hace."
Aquí está la versión actual del código que estoy usando:
Import processing.serial.*;
Serie myPort;
Cadena portnum;
OutString cadena = "";
InString de cadena = "";
int receivedLines = 0;
int bufferedLines = 8;void setup()
{
tamaño (400, 300);
PFont myFont = createFont(PFont.list() [3], 14);
textFont(myFont);
println(serial.List());
portnum = Serial.list() [3];
myPort = serie nueva (este, portnum, 9600);
}void draw()
{
Background(0);
texto ("Puerto de serie:" + portnum, 10, 20);
texto ("escribió:" + outString, 10, 40);
texto ("recibido:" + inString, 10, 80);
}keyPressed() vacío
{
interruptor (llave)
{
caso '\n':
myPort.write (outString + "\r");
outString = "";
rotura;
caso 8:
outString = outString.substring (0, outString.length() -1);
rotura;
caso 65535:
rotura;
caso '+':
myPort.write(key);
outString += clave;
rotura;
por defecto:
outString += clave;
rotura;}
Si (outString == "+++")
{
Delay(2000);
outString = "/ n";
}
}void serialEvent(Serial myPort)
{
inString = "Serial evento recibido!";
Delay(2000);
int inByte = myPort.read();
inString += char(inByte);
Si (inByte == '\r')
{
inString += '\n';
receivedLines ++;
Si (receivedLines > bufferedLines)
{
deleteFirstLine();
}
}
}void deleteFirstLine()
{
aPartirDe int = inString.indexOf('\n');
inString = inString.substring(firstChar + 1);
}
Forma corta aquí. Utiliza en los comandos, que comienzan con un código de atención (+++, ningún retorno de carro) para conseguir la atención de la viruta, a continuación, una serie de comandos cada uno sufijo por "AT." Se encuentran documentados en el manual para el XBee, y si no quieres ir tan lejos, se copian los comandos básicos para configurar un modo de pasar de la línea en varios lugares en la web - aquí, por ejemplo.
Según recuerdo, lo único que tuve que fijar en el extremo transmisor fueron:
+++ //gets atención del nodo, responderá con "OK"
ATMY2 //this es la identidad del nodo
ATDL3 //this es el byte bajo de la dirección con que del nodo quiere hablar
ATID5555 //this es la ID de la cacerola; el ID de la red en que ambos dispositivos están
ATD03 //this configura pin 20--E/S digitales 0, como una entrada digital
ATICFF / supervisa todos los pines de I/O y envía una transmisión cuando alguno de ellos cambia. Se trata de un campo de bits, si no quieren a todos.
ATWR / / no olvidar este comando! Escribe las configuraciones en la memoria
ATAC / / este comando hace que el nodo empezar a utilizar la nueva configuración (y modo de comando cercano).
Usted puede también muestra la fuerza utilizando los comandos y IR a intervalos, así como--mediante el uso de la clavija de la derecha, tienen el sueño de nodo cuando no hay entrada presente.
Mi recieiver es necesario tener las identificaciones recíprocas, y establecer para la salida del pin:
+++
Doméstico / / reset de fábrica, vamos a estar seguro!
ATMY3
ATDL2
ATID5555
ATD05 / / ahora pin 20 es para cambiar de estado dependiendo de datos recibidos desde el transmisor
ATWR
ATAC
Como habrás dado cuenta, no hay nada que las fuerzas de la transmisión al ser unidireccional solamente. Nodos se felizmente comunicarse bidireccionalmente con las líneas de serie (que no han sido afectados por este modo de pasar de la línea, me dejó Nota!) y felizmente hace eco de líneas de la entrada-salida en ambas direcciones así.
Recomiendo obtener los nodos de XBee hablando en el protoboard antes de empezar a atornillar el botón volver juntos.
Oh; ¿y el otro extremo? Detecta un "tirado bajo" es tan fácil como ejecutar un alambre del correspondiente pin de I/O en el XBee a un pin de I/O abierto en un Arduino y la escritura;
const int xbeePin = 8;
const int ledPin = 13;void setup()
{
pinMode (xbeePin, entrada);
pinMode (ledPin, salida);
}void loop()
{
Si (digitalRead(xbeePin) == LOW)
{
digitalWrite (ledPin, HIGH);
}
otra cosa
{
digitalWrite (ledPin, LOW);
}
}
(El código anterior debería funcionar pero he escrito por ojo aquí en el Instructable. He llegado ahora a usa para tener el control IDE Arduino - o procesamiento - mi sintaxis para mí!)
El primer uso para que pongo mi botón fácil es conectar el receptor XBee a un Arduino ya había establecido para escupe hacia fuera un mensaje de nota MIDI cuando vio la señal de disparo apropiado. Casi lo usamos como zumbador tipo demostración del juego para el musical "suerte pato". Poco después conecté el cable MIDI en nuestra consola de iluminación y era capaz de ejecutar señales de luz de fuera de la cabina de luz en un show donde el personal de tecnología fue Short-handed.
El horrible desastre en la segunda foto es utilizando el botón para cambiar programas en el BlinkM yo estoy modificando (aka conectado a mi ISP de Adafruit y escribió de nuevo software en el IDE de Arduino). Este último puede ser un poco derrochadora de un radio de 20 dólares, pero muestra la flexibilidad de un botón sin hilos autónomo.