SPI_CLOCK_DIV and internal oscillator

Thanks Nick.

The sketch relays packets from other RFM22B nodes on a network. It uses Mike McCauleys library RF22: RF22 library for Arduino. Sketch as follows:

#include <RF22Datagram.h>
#include <RF22.h>
#include <SPI.h>

#define BUFFERLENGTH 8

char SoftwareVersion[] = "Centre version 1.0";
uint8_t PumpAddress = 1;
uint8_t RelayAddress = 2;
uint8_t CentreAddress = 3;
uint8_t BoomAddress = 4;
uint8_t SSpin = 10;
uint8_t Intpin = 0;
uint8_t ErrorCount = 0;

long interval = 5000;
long previousMillis = 0;

uint8_t RfBuffer[BUFFERLENGTH];
RF22Datagram rf22(RelayAddress, SSpin, Intpin);

void setup() 
{  
  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);
  delay(3000);
  digitalWrite(8, LOW);
  Serial.begin(1200);
  Serial.println(F("Setup"));
  SPI.setClockDivider(SPI_CLOCK_DIV4);
  InitialiseRF();  
}

void loop()
{
  rf22.waitAvailableTimeout(2000);
  uint8_t len = sizeof(RfBuffer);
  uint8_t from;
  uint8_t to;
  if (rf22.recvfrom(RfBuffer, &len, &from, &to))
  {
    Serial.print(F("got request from: "));
    Serial.println(from, HEX);
    Serial.print(F("  Type: "));
    Serial.print((char)RfBuffer[1]);
    Serial.print(F("  "));
    Serial.print(F("Dest: "));
    Serial.print(RfBuffer[2]);
    Serial.print(F("  "));
    Serial.print(F("Payload: "));
    Serial.println(RfBuffer[3]);
    test_rssi();
    digitalWrite(8, HIGH);
    delay(150);    
    digitalWrite(8, LOW);
    if(to == RelayAddress)
    {
      if(RfBuffer[2] == CentreAddress)
      {
        rf22.sendto(RfBuffer, sizeof(RfBuffer), CentreAddress);
        rf22.waitPacketSent();
        Serial.print(F("Relayed1 from "));
        Serial.print(from, DEC);
        Serial.println(F(" to Centre"));         
      }
      else if(RfBuffer[2] == BoomAddress)
      {
        rf22.sendto(RfBuffer, sizeof(RfBuffer), CentreAddress);
        rf22.waitPacketSent();
        Serial.print(F("Relayed2 from "));
        Serial.print(from, DEC);
        Serial.println(F(" to Boom"));        
      }
      else if(RfBuffer[2] == PumpAddress)
      {
        rf22.sendto(RfBuffer, sizeof(RfBuffer), PumpAddress);
        rf22.waitPacketSent();
        Serial.print(F("Relayed from "));
        Serial.print(from, DEC);
        Serial.println(F(" to Pump"));        
      }
      else if(RfBuffer[2] == RelayAddress)
      {
        ClearBuffer();
        uint8_t x = random(250);
        RfBuffer[0] = '<';
        RfBuffer[1] = 'A';
        RfBuffer[2] = from;
        RfBuffer[3] = 2;
        RfBuffer[4] = x;
        RfBuffer[5] = '>';
        rf22.sendto(RfBuffer, sizeof(RfBuffer), from);
        rf22.waitPacketSent();
        Serial.print(F("Ping replied to: "));
        Serial.println(from, DEC );       
      }
      Serial.println(F("--------"));
      ErrorCount = 0;      
    }
  }
  else
  {
    Serial.println(F("recv failed"));
    ErrorCount ++;
    if (ErrorCount > 4)
    {
      Serial.println(F("Re initialising"));
      ErrorCount = 0;
      //InitialiseRF();
      //delay(3000);
    }
  }
}

int ClearBuffer()
{
  for (int i = 0; i < BUFFERLENGTH; i++)
  {
    RfBuffer[i]= 0;
  }
}

void InitialiseRF()
{
  if (!rf22.init())
    Serial.println(F("RF22 init failed"));
  else
  {
    rf22.setModemConfig(RF22::GFSK_Rb2_4Fd36);
    rf22.setTxPower(RF22_TXPOW_20DBM);
  }
}

void test_rssi()
{
  rf22.setModeRx();
  uint8_t rssi = rf22.lastRssi();
  Serial.print(F("RSSI"));
  Serial.print(F(": "));
  Serial.println(rssi, DEC);
  rf22.setModeIdle();
}