Paso 2: Programar el Arduino: transmisor
El transmisor de Arduino fue programado para que cuando uno o más de los interruptores conectados a la entrada-salida digital 2-13 presionó que algunas letra del alfabeto se transmitirían sin cables en serie. Por ejemplo, cambie 1 era que se fuera la letra "a" fue enviada inalámbricamente en serie. Si interruptor 1 iba a ser en la letra "b" fue envía inalámbricamente en serie. Si interruptor 2 era que se fuera, la letra "c" fue enviada inalámbricamente en serie. Si el interruptor 2 fue que se convirtió la letra "d" fue enviada. A continuación se muestra un ejemplo de la transmisión serie entera para 12 interruptores:
• Ejemplo 1: 1 y 3 son cerrada, todos los interruptores están abiertos
o "bcfgikmoqsuw"
• Ejemplo 2: 2, 3 y 5 son cerrada, y todos los interruptores están abiertos
o "adfgjkmoqsuw"
Abajo se encuentra el desglose de cómo fue programado el Arduino emisor.
1. Retire el escudo de Proto de Arduino que se elige como el transmisor. El microprocesador ATMEGA debe estar en la placa Arduino.
2. descargar el programa de Arduino desde la Web de Arduino (www.arduino.cc)
3. conectar el Arduino al ordenador mediante el cable USB.
4. Abra el programa de software de Arduino en el ordenador
5. seleccionados Tools -> Serial Port -> y seleccione el puerto COM que se refiere a la placa Arduino. Esto suele ser el primer puerto de COM en la lista.
6. Copie y pegue el código siguiente en la ventana de código de Arduino. Tenga en cuenta que este código es para la transmisión a una velocidad de 19200 baudios. Si necesita transmitir a una velocidad diferente que dondequiera en el código dice 19200, cambie a la velocidad deseada.
Este programa envía información de una radio MaxStream XBee.
serie está en el puerto 1
en es en el puerto 0
una entrada digital es en los puertos 2 a 13
int switchPin2 = 2;
int switchPin3 = 3;
int switchPin4 = 4;
int switchPin5 = 5;
int switchPin6 = 6;
int switchPin7 = 7;
int switchPin8 = 8;
int switchPin9 = 9;
int switchPin10 = 10;
int switchPin11 = 11;
int switchPin12 = 12;
int switchPin13 = 13;
un byte a enviar datos:
char thisByte2 = 0;
char thisByte3 = 0;
char thisByte4 = 0;
char thisByte5 = 0;
char thisByte6 = 0;
char thisByte7 = 0;
char thisByte8 = 0;
char thisByte9 = 0;
char thisByte10 = 0;
char thisByte11 = 0;
char thisByte12 = 0;
char thisByte13 = 0;
void setup () {}
Set pasadores para entrada y salida debidamente
pinMode (switchPin2, entrada);
pinMode (switchPin3, entrada);
pinMode (switchPin4, entrada);
pinMode (switchPin5, entrada);
pinMode (switchPin6, entrada);
pinMode (switchPin7, entrada);
pinMode (switchPin8, entrada);
pinMode (switchPin9, entrada);
pinMode (switchPin10, entrada);
pinMode (switchPin11, entrada);
pinMode (switchPin12, entrada);
pinMode (switchPin13, entrada);
poner en marcha la conexión serie con 19200-8-n-1-verdadero (no invertida):
Serial.Begin(19200);
por alguna razón parece ayudar a enviar primero un carácter arbitrario
a continuación, pausa para el tiempo de guardia antes de solicitar el modo de comando
Serial.Print("X");
Delay(1100);
poner el XBee en modo comando
Serial.Print("+++");
Delay(1100);
esperar una respuesta de lo XBee de 2000 ms, o iniciar
con la instalación si no hay respuesta válida viene
Si (returnedOK() == ' t ') {}
Si recibió una autorización continúe
}
Else {}
Setup(); de lo contrario volver atrás y vuelva a intentarlo configuración
}
configurar la bandeja de número de identificación (red de área personal)
Este ejemplo utiliza 0x3330, pero usted querrá elegir su propio
único número hexadecimal entre 0 x 0 y 0xFFFE
(observe la coma al final del comando que indica que seguirá otro comando)
Serial.Print("ATID3330,");
establece el alto de destino en 0 x 0
para seleccionar el modo de direccionamiento de 16 bits. Estas direcciones pueden
ser asignado y cambiado mediante el envío de comandos de un microcontrolador
Serial.Print("DH0,");
configurada en el bajo de destino (16 bits de dirección)
Este ejemplo utiliza 0 x 0 para enviar y 0 x 1 para recibe sin embargo
quieres elegir tus propios números hexadecimales entre 0 x 0 y 0xFFFE
Serial.Print("DL1,");
salir del modo de comando (note que utilizamos Serial.printLN aquí dar un salto de línea que completa la secuencia de comandos)
Serial.println("cn");
los comandos anteriores también se pueden enviar en una sola línea, con un solo mando con comas:
Serial.println("ATID3330,DH0,DL1,CN");
la línea de comandos anterior también podría ser enviada como comandos separados, por volver a emitir el comando AT:
Serial.println("ATID3330");
Serial.println("ATDH0");
Serial.println("ATDL1");
Serial.println("ATCN");
esperar una respuesta de lo XBee de 2000 ms, o iniciar
con la instalación si no hay respuesta válida viene
Si (returnedOK() == ' t ') {}
Si recibió una autorización continúe
}
Else {}
Setup(); de lo contrario volver atrás y vuelva a intentarlo configuración
}
}
void loop () {}
leer el interruptor:
thisByte2 = digitalRead(switchPin2);
convertir a un valor ASCII legible, enviarlo por el puerto serie:
Delay(20);
Si (thisByte2 == 0) {}
thisByte2 = 'a'; }
Si (thisByte2 == 1) {}
thisByte2 = 'b';}
Serial.Print(thisByte2);
thisByte3 = digitalRead(switchPin3);
Delay(20);
Si (thisByte3 == 0) {}
thisByte3 = 'c'; }
Si (thisByte3 == 1) {}
thisByte3 = había ';}
Serial.Print(thisByte3);
thisByte4 = digitalRead(switchPin4);
Delay(20);
Si (thisByte4 == 0) {}
thisByte4 = 'e'; }
Si (thisByte4 == 1) {}
thisByte4 = 'f';}
Serial.Print(thisByte4);
thisByte5 = digitalRead(switchPin5);
Delay(20);
Si (thisByte5 == 0) {}
thisByte5 = 'g'; }
Si (thisByte5 == 1) {}
thisByte5 = 'h';}
Serial.Print(thisByte5);
thisByte6 = digitalRead(switchPin6);
Delay(20);
Si (thisByte6 == 0) {}
thisByte6 = 'i'; }
Si (thisByte6 == 1) {}
thisByte6 = 'j';}
Serial.Print(thisByte6);
thisByte7 = digitalRead(switchPin7);
Delay(20);
Si (thisByte7 == 0) {}
thisByte7 = 'k'; }
Si (thisByte7 == 1) {}
thisByte7 = 'l';}
Serial.Print(thisByte7);
thisByte8 = digitalRead(switchPin8);
Delay(20);
Si (thisByte8 == 0) {}
thisByte8 = estoy '; }
Si (thisByte8 == 1) {}
thisByte8 = ' n ';}
Serial.Print(thisByte8);
thisByte9 = digitalRead(switchPin9);
Delay(20);
Si (thisByte9 == 0) {}
thisByte9 = ' o '; }
Si (thisByte9 == 1) {}
thisByte9 = 'p';}
Serial.Print(thisByte9);
thisByte10 = digitalRead(switchPin10);
Delay(20);
Si (thisByte10 == 0) {}
thisByte10 = 'q'; }
Si (thisByte10 == 1) {}
thisByte10 = 'r';}
Serial.Print(thisByte10);
thisByte11 = digitalRead(switchPin11);
Delay(20);
Si (thisByte11 == 0) {}
thisByte11 = de '; }
Si (thisByte11 == 1) {}
thisByte11 = ' t ';}
Serial.Print(thisByte11);
thisByte12 = digitalRead(switchPin12);
Delay(20);
Si (thisByte12 == 0) {}
thisByte12 = 'u'; }
Si (thisByte12 == 1) {}
thisByte12 = 'v';}
Serial.Print(thisByte12);
thisByte13 = digitalRead(switchPin13);
Delay(20);
Si (thisByte13 == 0) {}
thisByte13 = 'w'; }
Si (thisByte13 == 1) {}
thisByte13 = 'x';}
Serial.Print(thisByte13);
}
char returnedOK () {}
Esta función comprueba la respuesta en el puerto serie para ver si era un "OK" o no
char incomingChar [3];
char okString [] = "OK";
char el resultado = ' n ';
int startTime = millis();
mientras que (millis() - startTime < 2000 & & resultado == ' n ') {/ / usar un tiempo de espera de 10 segundos
Si (Serial.available() > 1) {}
leer tres bytes de entrada que deben ser "O", "K", un salto de línea:
para (int i = 0; i < 3; i ++) {}
incomingChar [i] = Serial.read();
}
Si (strstr (incomingChar, okString)! = NULL) {/ / comprobar si la respuesta es "OK"
Si (incomingChar [0] == ' o ' & & incomingChar [1] == 'K') {/ / comprobar si los dos primeros caracteres son "OK"
resultado = ' t '; T retorno si "OK" fue la respuesta
}
Else {}
resultado = 'F'; de lo contrario volver F
}
}
}
volver a resultado;
}
7. una vez que el código ha sido copiado en la ventana de código de Arduino, seleccionar "Compile" para verificar que no hay ningún error en el código. Si no hay errores presentes Pulse "Añadir al botón de la placa de E/S".
8. una vez que el código se ha subido a la placa Arduino, desconecte el cable USB y vuelva a colocar el ProtoShield (incluye el módulo Xbee). Ahora termine subiendo el código para el Arduino emisor.