Receiver Code :
#include <LiquidCrystal.h>
const int ledPin = 13;
//const int signalStrengthPin = 9;
//byte incomingByte, val_read;
int val_read;
int emitter2;
//int RSSIpin = 9;
//unsigned long rssiDur;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(38400);
lcd.begin(16,2);
lcd.noAutoscroll();
pinMode(ledPin, OUTPUT);
// pinMode(signalStrengthPin, INPUT);
}
void loop()
{
//rssiDur = pulseIn(RSSIpin, LOW, 200);
// print signal strength
//Serial.println(rssiDur);
if (Serial.available()>0)
{
// if ((int(val_read) == 'B'))
val_read = Serial.read();
Serial.println(int(val_read));
delay(100);
//delay(100);
//Serial.print(int(inches));
lcd.setCursor(0,0);
lcd.print("Bike1 = ");
lcd.print(int(val_read), DEC);
emitterTwo();
}
}
void emitterTwo(){
if ((int(val_read) == 1))
{
emitter2 = Serial.read();
Serial.println(int(emitter2));
delay(100);
lcd.setCursor(0,1);
lcd.print("Bike2 = ");
lcd.print(int(emitter2), DEC);
}
}
...and Emitter Code for only of the modules (basically same exact code) :
//Transmitter modules. These are the bike units intended to show signal strength indication in correlation to a central networked hub.
//x bees have been configured with personal ID's to avoid interference with other networks (encryption).
//optimal xbee use is outdoors, no wall interference/metal(close contact). range is 300ft at optimal conditions.
//
const int rssi_pin = 9; //RSSI Pin of the XBee Module
int rssiDur; //variable to read pin
byte inches_val;
//LED pins//////////////////////////
const int led3 = 3;
const int led4 = 4;
const int led5 = 5;
const int led6 = 6;
const int led7= 7;
const int led8= 8;
const int led10= 10;
const int led11= 11;
const int led12= 12;
const int led13= 13;
/////////////////////////////////////
///Averager Variables///////////////////////////////
//this is intended to place first 10 read incoming RSSI values in an array and average. smoother readings
const int numReadings = 10;
int readings[numReadings]; // the readings from the RSSI
int index = 0; // the index of the current reading
int total = 0; // the running total
int average = 0; // the average
///////////////////////////////////////////////////
void setup(){
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
pinMode (led5, OUTPUT);
pinMode (led6, OUTPUT);
pinMode (led7, OUTPUT);
pinMode (led8, OUTPUT);
pinMode (led10, OUTPUT);
pinMode (led11, OUTPUT);
pinMode (led12, OUTPUT);
pinMode (led13, OUTPUT);
//Serial1.begin(38400);
Serial.begin(38400); //Xbee communicating at this baud
}
void loop(){
rssiDur = pulseIn(rssi_pin, LOW, 200); //this is set to 200ms with ATRP @ 2
inches_val = rssiDur; // XBee times out 10-12 inches apart, so added 11
inches_val = rssiDur + 24; // XBee times out 10-12 inches apart, so added 11
min(inches_val, 1);
//min(inches_val, 18);
total= total - readings[index];
// read from the sensor:
readings[index] = inches_val;
// add the reading to the total:
total= total + readings[index];
// advance to the next position in the array:
index = index + 1;
// if we're at the end of the array...
if (index >= numReadings)
// ...wrap around to the beginning:
index = 0;
// calculate the average:
average = total / numReadings;
//Serial.print("Signal Strength distance inches = ");
//Serial.println(average );
Serial.write(1);
//Serial.write("emitter two");
Serial.write(average);
delay(100); // delay in between rea
// value 10 = 1 meter
if (average > 24 && average < 124){ //1-5 meters
// Serial.write(1);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led10, HIGH);
digitalWrite(led11, HIGH);
digitalWrite(led12, HIGH);
digitalWrite(led13, HIGH);
}
if (average > 124 && average < 224){ //5-10 meters
//Serial.write(2);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led10, HIGH);
digitalWrite(led11, HIGH);
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
if (average > 224 && average < 324){ //10- 15 meters
//Serial.write(3); //this is 10 meters. write to reciever
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
if (average > 324 && average < 424){ //15-20 meters
//Serial.write(4);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
if (average > 424 ){ //20-30 meters
// Serial.write(5);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
//isolated instances below
if (average == 24 ){ //if their is no signal
Serial.write(9);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led10, LOW);
digitalWrite(led11, LOW);
digitalWrite(led12, LOW);
digitalWrite(led13, LOW);
}
both emitter values show up, but overlapping each other. and not mixed together, I mean with this code It shows one value, clears, then shows another value from other emitter, but all in same line.
And Im sure API mode would be useful, but I am not too comfortable right now to take on a new beast. If it is a must, and their isn't a good suggestion for what I am doing now, I need a push in the right direction for API mode aside from configuring AT command and installing an arduino library.