From d6308537840608231d3cf5ac9d5ce36c985d52bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Grome=C5=A1?= <jgromes@users.noreply.github.com>
Date: Sat, 14 Jul 2018 10:00:31 +0200
Subject: [PATCH] RF69 - Updated examples

---
 .../RF69_Receive_Address.ino                  | 117 ++++++++++++++++++
 examples/RF69_Transmit/RF69_Transmit.ino      |   8 +-
 .../RF69_Transmit_Address.ino                 | 114 +++++++++++++++++
 3 files changed, 235 insertions(+), 4 deletions(-)
 create mode 100644 examples/RF69_Receive_Address/RF69_Receive_Address.ino
 create mode 100644 examples/RF69_Transmit_Address/RF69_Transmit_Address.ino

diff --git a/examples/RF69_Receive_Address/RF69_Receive_Address.ino b/examples/RF69_Receive_Address/RF69_Receive_Address.ino
new file mode 100644
index 00000000..dcdec4ef
--- /dev/null
+++ b/examples/RF69_Receive_Address/RF69_Receive_Address.ino
@@ -0,0 +1,117 @@
+/*
+ * KiteLib RF69 Receive with Address Example
+ * 
+ * This example receives packets using RF69 FSK radio module.
+ * Packets can have 1-byte address of the destination node.
+ * After setting node (or broadcast) address, this node will 
+ * automatically filter out any packets that do not contain 
+ * either node address or broadcast address.
+ */
+
+// include the library
+#include <KiteLib.h>
+
+// RF69 module is in slot A on the shield
+RF69 rf = Kite.ModuleA;
+
+void setup() {
+  Serial.begin(9600);
+
+  // initialize RF69 with default settings
+  Serial.print(F("[RF69] Initializing ... "));
+  // carrier frequency:                   434.0 MHz
+  // bit rate:                            48.0 kbps
+  // Rx bandwidth:                        125.0 kHz
+  // frequency deviation:                 50.0 kHz
+  // output power:                        13 dBm
+  // sync word:                           0x2D  0x01
+  byte state = rf.begin();
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+
+  // set node address
+  // NOTE: calling this method will autmatically enable
+  // address filtering (node address only)
+  Serial.print(F("[RF69] Setting node address ... "));
+  state == rf.setNodeAddress(0x02);
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+
+  // set broadcast address
+  // NOTE: calling this method will autmatically enable
+  // address filtering (node or broadcast address)
+  Serial.print(F("[RF69] Setting broadcast address ... "));
+  state == rf.setBroadcastAddress(0xFF);
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+
+  // address filtering can also be disabled
+  // NOTE: calling this method will also erase previously set
+  // node and broadcast address
+  /*
+  Serial.print(F("[RF69] Disabling address filtering ... "));
+  state == rf.disableAddressFiltering();
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+  */
+}
+
+void loop() {
+  Serial.print(F("[RF69] Waiting for incoming transmission ... "));
+
+  // you can receive data as an Arduino String
+  String str;
+  byte state = rf.receive(str);
+
+  // you can also receive data as byte array
+  /*
+  byte byteArr[8];
+  byte state = rf.receive(byteArr, 8);
+  */
+
+  if(state == ERR_NONE) {
+    // packet was successfully received
+    Serial.println(F("success!"));
+
+    // print the data of the packet
+    Serial.print(F("[RF69] Data:\t\t"));
+    Serial.println(str);
+    /*
+    for(int i = 0; i < 8; i++) {
+      Serial.print("0x");
+      Serial.print(byteArr[i], HEX);
+      Serial.print(' ');
+    }
+    Serial.println();
+    */
+    
+  } else if(state == ERR_RX_TIMEOUT) {
+    // timeout occurred while waiting for a packet
+    Serial.println(F("timeout!"));
+    
+  } else if(state == ERR_CRC_MISMATCH) {
+    // packet was received, but is malformed
+    Serial.println(F("CRC error!"));
+    
+  }
+}
diff --git a/examples/RF69_Transmit/RF69_Transmit.ino b/examples/RF69_Transmit/RF69_Transmit.ino
index a9d72c9c..98f6e3f9 100644
--- a/examples/RF69_Transmit/RF69_Transmit.ino
+++ b/examples/RF69_Transmit/RF69_Transmit.ino
@@ -34,12 +34,12 @@ void setup() {
 void loop() {
   Serial.print(F("[RF69] Transmitting packet ... "));
 
-  // you can transmit C-string or Arduino string up to 256 characters long
+  // you can transmit C-string or Arduino string up to 64 characters long
   byte state = rf.transmit("Hello World!");
-
-  // you can also transmit byte array up to 256 bytes long
+  
+  // you can also transmit byte array up to 64 bytes long
   /*
-  byte byteArr[] = {0x01, 0x23, 0x45, 0x56, 0x78, 0xAB, 0xCD, 0xEF};
+  byte byteArr[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
   byte state = rf.transmit(byteArr, 8);
   */
   
diff --git a/examples/RF69_Transmit_Address/RF69_Transmit_Address.ino b/examples/RF69_Transmit_Address/RF69_Transmit_Address.ino
new file mode 100644
index 00000000..10b29f93
--- /dev/null
+++ b/examples/RF69_Transmit_Address/RF69_Transmit_Address.ino
@@ -0,0 +1,114 @@
+/*
+ * KiteLib RF69 Transmit to Address Example
+ * 
+ * This example transmits packets using RF69 FSK radio module.
+ * Packets can have 1-byte address of the destination node.
+ * After setting node (or broadcast) address, this node will 
+ * automatically filter out any packets that do not contain 
+ * either node address or broadcast address.
+ */
+
+// include the library
+#include <KiteLib.h>
+
+// RF69 module is in slot A on the shield
+RF69 rf = Kite.ModuleA;
+
+void setup() {
+  Serial.begin(9600);
+
+  // initialize RF69 with default settings
+  Serial.print(F("[RF69] Initializing ... "));
+  // carrier frequency:                   434.0 MHz
+  // bit rate:                            48.0 kbps
+  // Rx bandwidth:                        125.0 kHz
+  // frequency deviation:                 50.0 kHz
+  // output power:                        13 dBm
+  // sync word:                           0x2D  0x01
+  byte state = rf.begin();
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+
+  // set node address
+  // NOTE: calling this method will autmatically enable
+  // address filtering (node address only)
+  Serial.print(F("[RF69] Setting node address ... "));
+  state == rf.setNodeAddress(0x01);
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+
+  // set broadcast address
+  // NOTE: calling this method will autmatically enable
+  // address filtering (node or broadcast address)
+  Serial.print(F("[RF69] Setting broadcast address ... "));
+  state == rf.setBroadcastAddress(0xFF);
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+
+  // address filtering can also be disabled
+  // NOTE: calling this method will also erase previously set
+  // node and broadcast address
+  /*
+  Serial.print(F("[RF69] Disabling address filtering ... "));
+  state == rf.disableAddressFiltering();
+  if(state == ERR_NONE) {
+    Serial.println(F("success!"));
+  } else {
+    Serial.print(F("failed, code 0x"));
+    Serial.println(state, HEX);
+    while(true);
+  }
+  */
+}
+
+void loop() {
+  Serial.print(F("[RF69] Transmitting packet ... "));
+
+  // transmit C-string or Arduino string to node with address 0x02
+  //byte state = rf.transmit("Hello World!", 0x02);
+  
+  // transmit byte array to node with address 0x02
+  
+  byte byteArr[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
+  byte state = rf.transmit(byteArr, 8, 0x02);
+  
+
+  // transmit C-string or Arduino string in broadcast mode
+  /*
+  byte state = rf.transmit("Hello World!", 0xFF);
+  */
+
+  // transmit byte array in broadcast mode
+  /*
+  byte byteArr[] = {0x01, 0x23, 0x45, 0x56, 0x78, 0xAB, 0xCD, 0xEF};
+  byte state = rf.transmit(byteArr, 8, 0xFF);
+  */
+  
+  if(state == ERR_NONE) {
+    // the packet was successfully transmitted
+    Serial.println(" success!");
+    
+  } else if(state == ERR_PACKET_TOO_LONG) {
+    // the supplied packet was longer than 256 bytes
+    Serial.println(" too long!");
+    
+  }
+
+  // wait for a second before transmitting again
+  delay(1000);
+}