Thanks for your response.
this is for one Xbee. of course the destination address is different for the 2nd Xbee
Here's the code:
#define sensorPin 0 // input sensor
#define txLed 2 // LED to indicate outdoing data
#define rxLed 3 // LED to indicate incoming data
#define analogLed 9 // LED that changes brightness with incoming value
#define threshold 10 // how much change you need to see on
// the sensor before sending
int lastSensorReading = 0; // previous state of the switch
int inByte= -1; // incoming byte from serial RX
char inString[6]; // string for incoming serial data
int stringPos = 0; // string index counter
void setup() {
// configure serial communication:
Serial.begin(19200);
// configure output pins:
pinMode(txLed, OUTPUT);
pinMode(rxLed, OUTPUT);
pinMode(analogLed, OUTPUT);
// set Xbee's destination address:
setDestination();
// blink the TX LED indicating that the main program's about to start:
blink(3);
}
void setDestination() {
// put the radio in command mode:
Serial.print("+++");
// wait for the radio to respond with "OK\r"
char thisByte = 0;
while (thisByte != '\r') {
if (Serial.available() > 0) {
thisByte = Serial.read();
}
}
// set the destination address with 16-bit addressing. This radio's
// destination should be the other radio's MY address and vice versa:
Serial.print("ATDH0, DL1975\r");
Serial.print("ATMY2010\r"); // set my address (16-bit addressing)
// set the PAN ID. If you're in a place where many people
// are using XBees, choose a unique PAD ID
Serial.print("ATID7375\r");
Serial.print("ATCN\r"); /// go in to data mode:
}
// Blink the tx LED:
void blink(int howManyTimes) {
for (int i=0; i< howManyTimes; i++) {
digitalWrite(txLed, HIGH);
delay(200);
digitalWrite(txLed, LOW);
delay(200);
}
}
void loop() {
// listen for incoming serial data:
if (Serial.available() > 0) {
// turn on the RX LED whenever you're reading data:
digitalWrite(rxLed, HIGH);
handleSerial();
}
else {
// turn off the receive LED when there's no incoming data:
digitalWrite(rxLed, LOW);
}
// listen to the potentiometer:
char sensorValue = readSensor();
// if there's something to send, send it:
if (sensorValue > 0) {
// light the tx LED to say you're sending:
digitalWrite(txLed, HIGH);
Serial.print(sensorValue, DEC);
Serial.print("\r");
// turn off the tx LED:
digitalWrite(txLed, LOW);
}
}
void handleSerial() {
inByte = Serial.read();
// save only ASCII numeric characters (ASCII 0 - 9):
if ((inByte >= '0') && (inByte <= '9')) {
inString[stringPos] = inByte;
stringPos++;
}
// if you get an ASCII carriage return:
if (inByte == '\r') {
// convert the string to a number:
int brightness = atoi(inString);
// set the analog output LED:
analogWrite(analogLed, brightness);
// put zeroes in the array
for (int c = 0; c < stringPos; c++) {
inString[c] = 0;
}
// reset the string pointer:
stringPos = 0;
}
}
char readSensor() {
char message = 0;
// read the sensor:
int sensorReading = analogRead(sensorPin);
// look for a change from the last reading
// that's greater than the threshold:
if (abs(sensorReading - lastSensorReading) > threshold) {
message = sensorReading/4;
lastSensorReading = sensorReading;
}
return message;
}