// It is designed to work with the other example rf95_client
// Tested with Anarduino MiniWirelessLoRa, Rocket Scream Mini Ultra Pro with
// the RFM95W, Adafruit Feather M0 with RFM95

#include <SPI.h>
#include <RH_RF95.h>
#include <SoftwareSerial.h>
// LORA Radio PINs 
#define RFM95_CS  10
#define RFM95_RST 2
#define RFM95_INT 3
// Set frequency, must match RX's freq!
#define RF95_FREQ 915.0

#define rxPin 4
#define txPin 5
//#define wmSerial Serial1  //ultrasonic wind meter
//#define wmSerial Serial  //ultrasonic wind meter
//SoftwareSerial wmSerial(rxPin, txPin); // RX, TX
int nbytes=0;  // number bytes returned
int icnt = 0;
char ibuf[256];  // serial data from wind meter

// Singleton instance of the radio driver
// ADA Fruit
//RH_RF95 rf95(RFM95_CS, RFM95_INT);
// Motino
RH_RF95 rf95;

//RH_RF95 rf95(5, 2); // Rocket Scream Mini Ultra Pro with the RFM95W
//RH_RF95 rf95(8, 3); // Adafruit Feather M0 with RFM95 

// Need this on Arduino Zero with SerialUSB port (eg RocketScream Mini Ultra Pro)
//#define Serial SerialUSB

//int led = 13;
int led = 9; //Moteino

void setup() 
{
  // Rocket Scream Mini Ultra Pro with the RFM95W only:
  // Ensure serial flash is not interfering with radio communication on SPI bus
  memset( ibuf, 0, sizeof(ibuf) );
  pinMode(RFM95_RST, OUTPUT);
  digitalWrite(RFM95_RST, HIGH);
  pinMode(led, OUTPUT); 
    
  Serial.begin(9600);
  //while (!Serial) ; // Wait for serial port to be available
  Serial.println("Start RF95 test");
 // wind meter serial
//  while (!wmSerial);
//  wmSerial.begin(38400);  //ULP

  // manual reset
  digitalWrite(RFM95_RST, LOW);
  delay(10);
  digitalWrite(RFM95_RST, HIGH);
  delay(10);
  
  if (!rf95.init())
    Serial.println("init failed"); 
        
  // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM
  // You can change the modulation parameters with eg
  // rf95.setModemConfig(RH_RF95::Bw500Cr45Sf128);

  if (!rf95.setFrequency(RF95_FREQ))    
    Serial.println("setFrequency failed");
      
  rf95.setTxPower(20, false);
  Serial.println("Finished setup");
}

uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t data[]  = "1234567890123456789012*\r\n";
uint8_t data2[] = "abcdefghijklmnopqrstuvwxyz*\r\n";
uint8_t len = sizeof(buf);

void loop()
{
    bool rv;
 
    // Send data
    rv=rf95.send(data, sizeof(data));
    if( rv == true ) 
       {       
          Serial.print("Sent "); Serial.println(sizeof(data));
       }
       else
       {
          Serial.print("Error Sending "); Serial.println(sizeof(data));
       }
    rf95.waitPacketSent();
    Serial.println("Ack ");
    
    digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);
    delay(1000);
 
    // send longer data
    rv = rf95.send(data2, sizeof(data2));
    if( rv == true )      
       {       
          Serial.print("Sent "); Serial.println(sizeof(data2));
       }
       else
       {
          Serial.print("Error Sending "); Serial.println(sizeof(data2));
       }
    rf95.waitPacketSent();
    Serial.println("Ack "); 
    digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);
   
    delay(1000);
   
}
