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); +}