Recentemente adquiri um kit XBee, para fazer a comunicação sem fio entre o Arduino e o computador, ou entre dois Arduinos. Desde então, não havia sequer tirado o kit da embalagem.
Hoje finalmente consegui arrumar um tempinho pra investigar esse negócio. Depois de ler o tutorial XBee para iniciantes no site da Sparkfun, e de ler esse artigo no O’Reilly, consegui botar o sistema pra funcionar.
Claro, o experimento é bem simples. Queria era ver se o kit estava funcionando – especialmente porque ele vem com alguns componentes soltos que eu precisei montar e soldar, o que não é muito a minha especialidade. Mas deu tudo certo.
A programação usada em ambos os Arduinos é a mesma.
#define RED 12 // Pino Digital 12, chamar de 'RED', controla o LED vermelho
#define BLUE 11 // Pino Digital 11, chamar de 'BLUE', controla o LED azul
#define BUTTON 7 // Pino Digital 7, chamar de 'BUTTON', controla o botão
int pressureReading; // variável ‘pressureReading’ vai guardar o valor do botão
int incomingByte; // variável ‘incomingByte’ vai carregar o valor S ou N, S=botao ligado, N=botao desligado
void setup ()
{
Serial.begin(9600);
// define a taxa de transferência de dados da porta serial.
// 9600 e’ o padrão default do Xbee
pinMode (RED, OUTPUT); // RED é um dispositivo de saída de dados
pinMode (BLUE, OUTPUT); // BLUE é um dispositivo de saída de dados
pinMode (BUTTON, INPUT); // BUTTON é um dispositivo de entrada de dados
}
void loop ()
{
pressureReading = digitalRead(BUTTON);
// Verifica se o botao esta ativado
// e armazena o resultado em
// ‘pressureReading’
// Se botao estiver ligado, envia sinal ‘S’ pela porta serial.
// Caso contrario, envia sinal ‘N’.
// O XBee envia e recebe dados pela porta serial.
if (pressureReading == HIGH) // HIGH significa que o botão está ativado.
{
Serial.println(‘S’);
digitalWrite(BLUE, HIGH); // acende o LED azul
}
else
{
Serial.println(‘N’);
digitalWrite(BLUE, LOW); // apaga o LED azul
}
// Verifica se chegaram dados pela porta serial.
// Se receber o sinal ‘S’ acende a LED, sinal ‘N’ apaga o LED.
if (Serial.available())
{
incomingByte = Serial.read();
if (incomingByte == ‘S’)
{
digitalWrite(RED, HIGH); // acende o LED vermelho
}
if (incomingByte == ‘N’ )
{
digitalWrite(RED, LOW); // apaga o LED vermelho
}
delay (10);
}
}
— UPDATE —
Novo teste dia 11/10: