#include "Nrf2401.h"
#include
Nrf2401 Radio;
unsigned char SyncByte = 128;
long LastReceiveTime=0;
ByteBuffer CircularBuffer;
byte LastByte;
byte ByteReceived;
int Outstanding=0;
void setup(void)
{
Serial.begin(9600);
pinMode(13, OUTPUT);
// start the random number generator
randomSeed(analogRead(7));
// look for rising edges on digital pin 2
attachInterrupt(0, messageReceived, RISING);
CircularBuffer.init(25);
Serial.println("RC Ping");
Radio.dataRate=0;
Radio.power=3;
Radio.txMode(1);
delay(100);
Radio.rxMode(1);
delay(100);
}//End Setup
void loop(void)
{
if (Outstanding==1)
{
if ((millis()-LastReceiveTime)>5000)
{
Serial.println("Connection Timed Out.");
LastReceiveTime=millis();
Serial.print("Attempting to Re-Send: ");
Serial.println(LastByte);
SendPacket(LastByte);
}//End Check For Timeout
}//Outstanding Packet
else
{
if (Serial.available())
{
SendPacket(Serial.read());
}
}
messageReceived();
ParsePacket();
}//End Loop
void SendPacket(byte Data)
{
Radio.txMode(1);
delay(100);
if (Data!=0x00)
{
Outstanding=1;
LastReceiveTime=millis();
LastByte=Data;
}
//Serial.print("Sending: ");
//Serial.println(Data,BYTE);
Radio.write(Data);
delay(100);
Radio.rxMode(1);
}//End SendPacket
void ParsePacket()
{
if (CircularBuffer.getSize()>0)
{
ByteReceived=CircularBuffer.get();
//ACK Packet
if (ByteReceived==0x00)
{
Outstanding=0;
//Serial.println("Received ACK.");
}
else
{
//Send ACK
Serial.print(ByteReceived,BYTE);
delay(100);
SendPacket(0x00);
}
}
}//End ParsePacket
void messageReceived(void)
{
while(Radio.available())
{
Radio.read();
CircularBuffer.put(Radio.data[0]);
//Serial.print("Received:");
//Serial.println(CircularBuffer.peek(CircularBuffer.getSize()-1),BYTE);
LastReceiveTime=millis();
}
}//End messageReceived