diff --git a/README b/README
deleted file mode 100644
index f887070..0000000
--- a/README
+++ /dev/null
@@ -1,12 +0,0 @@
-Arduino driver for nRF24L01 2.4GHz Wireless Transceiver
-
-See Datasheet at http://www.nordicsemi.com/files/Product/data_sheet/nRF24L01_Product_Specification_v2_0.pdf
-
-This chip uses the SPI bus, plus two chip control pins. Remember that pin 10 must still remain an output, or
-the SPI hardware will go into 'slave' mode.
-
-Design Goals: This library is designed to be...
-* Maximally compliant with the intended operation of the chip
-* Easy for beginners to use
-* Consumed with a public interface that's similiar to other Arduino standard libraries
-* Built against the standard SPI library.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..504829f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,19 @@
+# Arduino driver for nRF24L01 2.4GHz Wireless Transceiver
+
+Design Goals: This library is designed to be...
+* Maximally compliant with the intended operation of the chip
+* Easy for beginners to use
+* Consumed with a public interface that's similiar to other Arduino standard libraries
+* Built against the standard SPI library.
+
+Please refer to:
+
+* [Documentation Main Page](http://maniacbug.github.com/RF24)
+* [RF24 Class Documentation](http://maniacbug.github.com/RF24/classRF24.html)
+* [Source Code](https://github.com/maniacbug/RF24)
+* [Downloads](https://github.com/maniacbug/RF24/archives/master)
+* [Chip Datasheet](http://www.nordicsemi.com/files/Product/data_sheet/nRF24L01_Product_Specification_v2_0.pdf)
+
+This chip uses the SPI bus, plus two chip control pins. Remember that pin 10 must still remain an output, or
+the SPI hardware will go into 'slave' mode.
+
diff --git a/RF24.h b/RF24.h
index 3f91ff9..0975fdf 100644
--- a/RF24.h
+++ b/RF24.h
@@ -13,21 +13,6 @@
/**
* Driver for nRF24L01 2.4GHz Wireless Transceiver
- *
- * Please refer to:
- *
- * @li Detailed Documentation
- * @li Source Code
- * @li Chip Datasheet
- *
- * This chip uses the SPI bus, plus two chip control pins. Remember that pin 10 must still remain an output, or
- * the SPI hardware will go into 'slave' mode.
- *
- * Design Goals: This library is designed to be...
- * @li Maximally compliant with the intended operation of the chip
- * @li Easy for beginners to use
- * @li Consumed with a public interface that's similiar to other Arduino standard libraries
- * @li Built against the standard SPI library.
*/
class RF24
@@ -182,7 +167,9 @@ public:
* Set Payload Size
*
* This implementation uses a pre-stablished fixed payload size for all
- * transmissions.
+ * transmissions. If this method is never called, the driver will always
+ * transmit the maximum payload size (32 bytes), no matter how much
+ * was sent to write().
*
* @todo Implement variable-sized payloads feature
*
@@ -197,7 +184,7 @@ public:
*
* @return The number of bytes in the payload
*/
- uint8_t getPayloadSize(void) ;
+ uint8_t getPayloadSize(void) ;
/**
* Print a giant block of debugging information to stdout
@@ -301,8 +288,8 @@ public:
* Only the least significant byte should be unique, e.g.
*
* @code
- * openReadingPipe(0xF0F0F0F0AA);
- * openReadingPipe(0xF0F0F0F066);
+ * openReadingPipe(1,0xF0F0F0F0AA);
+ * openReadingPipe(2,0xF0F0F0F066);
* @endcode
*
* @todo Enforce the restriction that all pipes must share the top 32 bits
@@ -319,13 +306,44 @@ public:
*
* This is an example of how to use the RF24 class. Write this sketch to two different nodes,
* connect the role_pin to ground on one. The ping node sends the current time to the pong node,
- * which responds by sending the value back.
+ * which responds by sending the value back. The ping node can then see how long the whole cycle
+ * took.
*/
/**
- * @mainpage Driver Library for nRF24L01
+ * @example starping.pde
*
- * See the RF24 class for details on how to drive this chip.
+ * This sketch is a more complex example of using the RF24 library for Arduino.
+ * Deploy this on up to six nodes. Set one as the 'pong receiver' by tying the
+ * role_pin low, and the others will be 'ping transmit' units. The ping units
+ * unit will send out the value of millis() once a second. The pong unit will
+ * respond back with a copy of the value. Each ping unit can get that response
+ * back, and determine how long the whole cycle took.
+ *
+ * This example requires a bit more complexity to determine which unit is which.
+ * The pong receiver is identified by having its role_pin tied to ground.
+ * The ping senders are further differentiated by a byte in eeprom.
+ */
+
+/**
+ * @mainpage Driver for nRF24L01 2.4GHz Wireless Transceiver
+ *
+ * Design Goals: This library is designed to be...
+ * @li Maximally compliant with the intended operation of the chip
+ * @li Easy for beginners to use
+ * @li Consumed with a public interface that's similiar to other Arduino standard libraries
+ * @li Built against the standard SPI library.
+ *
+ * Please refer to:
+ *
+ * @li Documentation Main Page
+ * @li RF24 Class Documentation
+ * @li Source Code
+ * @li Downloads Page
+ * @li Chip Datasheet
+ *
+ * This chip uses the SPI bus, plus two chip control pins. Remember that pin 10 must still remain an output, or
+ * the SPI hardware will go into 'slave' mode.
*/
#endif // __RF24_H__
diff --git a/examples/pingpair/pingpair.pde b/examples/pingpair/pingpair.pde
index 18456e2..3a1cf41 100644
--- a/examples/pingpair/pingpair.pde
+++ b/examples/pingpair/pingpair.pde
@@ -9,11 +9,10 @@
/**
* Example RF Radio Ping Pair
*
- * This sketch is an example of using the RF24 library for Arduino. Deploy this on
- * two nodes, set one as the 'trasmit' and the other the 'receive' unit. The transmit
- * unit will send out the value of millis() once a second. The receive unit will respond
- * back with a copy of the value. The transmit unit can get that 'ping' back, and
- * determine how long the whole cycle took.
+ * This is an example of how to use the RF24 class. Write this sketch to two different nodes,
+ * connect the role_pin to ground on one. The ping node sends the current time to the pong node,
+ * which responds by sending the value back. The ping node can then see how long the whole cycle
+ * took.
*/
#include
diff --git a/examples/starping/starping.pde b/examples/starping/starping.pde
index 34e2eb9..f3c4e9c 100644
--- a/examples/starping/starping.pde
+++ b/examples/starping/starping.pde
@@ -10,14 +10,14 @@
* Example RF Radio Ping Star Group
*
* This sketch is a more complex example of using the RF24 library for Arduino.
- * Deploy this on up to six nodes. Set one as the 'pong receiver' and the others
- * as 'ping transmit' units. The ping units unit will send out the value of millis()
- * once a second. The pong unit will respond back with a copy of the value.
- * The ping unit can get that response back, and
- * determine how long the whole cycle took.
+ * Deploy this on up to six nodes. Set one as the 'pong receiver' by tying the
+ * role_pin low, and the others will be 'ping transmit' units. The ping units
+ * unit will send out the value of millis() once a second. The pong unit will
+ * respond back with a copy of the value. Each ping unit can get that response
+ * back, and determine how long the whole cycle took.
*
- * This example requires a bit more complexity to determine which unit is
- * which. The pong receiver is identified by having its role_pin tied to ground.
+ * This example requires a bit more complexity to determine which unit is which.
+ * The pong receiver is identified by having its role_pin tied to ground.
* The ping senders are further differentiated by a byte in eeprom.
*/
@@ -27,8 +27,6 @@
#include "RF24.h"
#include "printf.h"
-extern EEPROMClass EEPROM;
-
//
// Hardware configuration
//
@@ -45,9 +43,14 @@ const int role_pin = 7;
// Topology
//
-// Radio pipe addresses for the 6 nodes to communicate
-const uint64_t talking_pipes[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL };
-const uint64_t listening_pipes[6] = { 0x3A3A3A3AE1LL, 0x3A3A3A3AD2LL, 0x3A3A3A3AC3LL, 0x3A3A3A3AB4LL, 0x3A3A3A3AA5LL, 0x3A3A3A3A96LL };
+// Radio pipe addresses for the nodes to communicate. Only ping nodes need
+// dedicated pipes in this topology. Each ping node has a talking pipe
+// that it will ping into, and a listening pipe that it will listen for
+// the pong. The pong node listens on all the ping node talking pipes
+// and sends the pong back on the sending node's specific listening pipe.
+
+const uint64_t talking_pipes[5] = { 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL };
+const uint64_t listening_pipes[5] = { 0x3A3A3A3AD2LL, 0x3A3A3A3AC3LL, 0x3A3A3A3AB4LL, 0x3A3A3A3AA5LL, 0x3A3A3A3A96LL };
//
// Role management
@@ -76,7 +79,8 @@ role_e role;
const uint8_t address_at_eeprom_location = 0;
// What is our address (SRAM cache of the address from EEPROM)
-// Note that zero is an INVALID address
+// Note that zero is an INVALID address. The pong back unit takes address
+// 1, and the rest are 2-6
uint8_t node_address;
void setup(void)
@@ -139,26 +143,26 @@ void setup(void)
//
// Open pipes to other nodes for communication
//
-
- // Open 'our' pipe for writing
- // ping nodes open the parent's pipe for reading
- // pong node opens all children's pipes for reading
-
+
+ // The pong node listens on all the ping node talking pipes
+ // and sends the pong back on the sending node's specific listening pipe.
if ( role == role_pong_back )
{
- // Listen to all ping nodes' talking pipes
- radio.openReadingPipe(1,talking_pipes[1]);
- radio.openReadingPipe(2,talking_pipes[2]);
- radio.openReadingPipe(3,talking_pipes[3]);
- radio.openReadingPipe(4,talking_pipes[4]);
- radio.openReadingPipe(5,talking_pipes[5]);
+ radio.openReadingPipe(1,talking_pipes[0]);
+ radio.openReadingPipe(2,talking_pipes[1]);
+ radio.openReadingPipe(3,talking_pipes[2]);
+ radio.openReadingPipe(4,talking_pipes[3]);
+ radio.openReadingPipe(5,talking_pipes[4]);
}
+
+ // Each ping node has a talking pipe that it will ping into, and a listening
+ // pipe that it will listen for the pong.
if ( role == role_ping_out )
{
// Write on our talking pipe
- radio.openWritingPipe(talking_pipes[node_address-1]);
+ radio.openWritingPipe(talking_pipes[node_address-2]);
// Listen on our listening pipe
- radio.openReadingPipe(1,listening_pipes[node_address-1]);
+ radio.openReadingPipe(1,listening_pipes[node_address-2]);
}
//
@@ -172,6 +176,15 @@ void setup(void)
//
radio.printDetails();
+
+ //
+ // Prompt the user to assign a node address if we don't have one
+ //
+
+ if ( role == role_invalid )
+ {
+ printf("\n\r*** NO NODE ADDRESS ASSIGNED *** Send 1 through 6 to assign an address\n\r");
+ }
}
void loop(void)
@@ -238,7 +251,7 @@ void loop(void)
done = radio.read( &got_time, sizeof(unsigned long) );
// Spew it
- printf("Got payload %lu from %i...",got_time,pipe_num);
+ printf("Got payload %lu from node %i...",got_time,pipe_num+1);
}
// First, stop listening so we can talk
@@ -277,4 +290,4 @@ void loop(void)
}
}
}
-// vim:ai sts=2 sw=2 ft=cpp
+// vim:ai:ci sts=2 sw=2 ft=cpp