diff --git a/examples/GettingStarted_CallResponse/GettingStarted_CallResponse.ino b/examples/GettingStarted_CallResponse/GettingStarted_CallResponse.ino index cddd8cf6d..c0ca30c60 100644 --- a/examples/GettingStarted_CallResponse/GettingStarted_CallResponse.ino +++ b/examples/GettingStarted_CallResponse/GettingStarted_CallResponse.ino @@ -14,7 +14,6 @@ #include #include "RF24.h" -//#include "printf.h" /****************** User Config ***************************/ /*** Set this radio as radio number 0 or 1 ***/ @@ -40,7 +39,7 @@ void setup(){ Serial.begin(115200); Serial.println(F("RF24/examples/GettingStarted_CallResponse")); Serial.println(F("*** PRESS 'T' to begin transmitting to the other node")); - //printf_begin(); + // Setup and configure radio radio.begin(); diff --git a/examples/GettingStarted_HandlingData/GettingStarted_HandlingData.ino b/examples/GettingStarted_HandlingData/GettingStarted_HandlingData.ino old mode 100644 new mode 100755 index 781327750..d2efcb9c8 --- a/examples/GettingStarted_HandlingData/GettingStarted_HandlingData.ino +++ b/examples/GettingStarted_HandlingData/GettingStarted_HandlingData.ino @@ -36,7 +36,7 @@ struct dataStruct{ void setup() { Serial.begin(115200); - Serial.println(F("RF24/examples/GettingStarted")); + Serial.println(F("RF24/examples/GettingStarted_HandlingData")); Serial.println(F("*** PRESS 'T' to begin transmitting to the other node")); radio.begin(); @@ -131,7 +131,7 @@ if (role == 1) { radio.startListening(); // Now, resume listening so we catch the next packets. Serial.print(F("Sent response ")); Serial.print(myData._micros); - Serial.print(" : "); + Serial.print(F(" : ")); Serial.println(myData.value); } } diff --git a/examples/Transfer/Transfer.ino b/examples/Transfer/Transfer.ino index 560c4f558..ceee9ceb0 100644 --- a/examples/Transfer/Transfer.ino +++ b/examples/Transfer/Transfer.ino @@ -15,7 +15,6 @@ TMRh20 2014 #include #include "RF24.h" -#include "printf.h" /************* USER Configuration *****************************/ // Hardware configuration @@ -34,7 +33,6 @@ bool TX=1,RX=0,role=0; void setup(void) { Serial.begin(115200); - printf_begin(); radio.begin(); // Setup and configure rf radio radio.setChannel(1); @@ -50,8 +48,8 @@ void setup(void) { radio.startListening(); // Start listening radio.printDetails(); // Dump the configuration of the rf unit for debugging - printf("\n\rRF24/examples/Transfer Rates/\n\r"); - printf("*** PRESS 'T' to begin transmitting to the other node\n\r"); + Serial.println(F("\n\rRF24/examples/Transfer/")); + Serial.println(F("*** PRESS 'T' to begin transmitting to the other node")); randomSeed(analogRead(0)); //Seed for random number generation @@ -68,7 +66,7 @@ void loop(void){ delay(2000); - printf("Initiating Basic Data Transfer\n\r"); + Serial.println(F("Initiating Basic Data Transfer")); unsigned long cycles = 10000; //Change this to a higher or lower number. @@ -115,10 +113,10 @@ if(role == RX){ if(millis() - rxTimer > 1000){ rxTimer = millis(); unsigned long numBytes = counter*32; - Serial.print("Rate: "); + Serial.print(F("Rate: ")); //Prevent dividing into 0, which will cause issues over a period of time Serial.println(numBytes > 0 ? numBytes/1000.0:0); - Serial.print("Payload Count: "); + Serial.print(F("Payload Count: ")); Serial.println(counter); counter = 0; } @@ -132,7 +130,7 @@ if(role == RX){ char c = toupper(Serial.read()); if ( c == 'T' && role == RX ) { - printf("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\n\r"); + Serial.println(F("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK")); radio.openWritingPipe(pipes[1]); radio.openReadingPipe(1,pipes[0]); radio.stopListening(); @@ -143,7 +141,7 @@ if(role == RX){ radio.openWritingPipe(pipes[0]); radio.openReadingPipe(1,pipes[1]); radio.startListening(); - printf("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\n\r"); + Serial.println(F("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK")); role = RX; // Become the primary receiver (pong back) } } diff --git a/examples/pingpair_ack/pingpair_ack.ino b/examples/pingpair_ack/pingpair_ack.ino index b7e1b0d03..8c2bec3c1 100644 --- a/examples/pingpair_ack/pingpair_ack.ino +++ b/examples/pingpair_ack/pingpair_ack.ino @@ -6,7 +6,7 @@ * Example for efficient call-response using ack-payloads * * This example continues to make use of all the normal functionality of the radios including - * the auto-ack and auto-retry features, but allows ack-payloads to be written optionlly as well. + * the auto-ack and auto-retry features, but allows ack-payloads to be written optionally as well. * This allows very fast call-response communication, with the responding radio never having to * switch out of Primary Receiver mode to send back a payload, but having the option to if wanting * to initiate communication instead of respond to a commmunication. @@ -37,11 +37,11 @@ byte counter = 1; void setup(){ - Serial.begin(57600); + Serial.begin(115200); printf_begin(); - printf("\n\rRF24/examples/GettingStarted/\n\r"); - printf("ROLE: %s\n\r",role_friendly_name[role]); - printf("*** PRESS 'T' to begin transmitting to the other node\n\r"); + Serial.print(F("\n\rRF24/examples/pingpair_ack/\n\rROLE: ")); + Serial.println(role_friendly_name[role]); + Serial.println(F("*** PRESS 'T' to begin transmitting to the other node")); // Setup and configure rf radio @@ -67,11 +67,11 @@ void loop(void) { unsigned long time = micros(); // Take the time, and send it. This will block until complete //Called when STANDBY-I mode is engaged (User is finished sending) if (!radio.write( &counter, 1 )){ - printf("failed.\n\r"); + Serial.println(F("failed.")); }else{ if(!radio.available()){ - printf("Blank Payload Received\n\r"); + Serial.println(F("Blank Payload Received.")); }else{ while(radio.available() ){ unsigned long tim = micros(); @@ -104,7 +104,7 @@ void loop(void) { char c = toupper(Serial.read()); if ( c == 'T' && role == role_pong_back ) { - printf("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\n\r"); + Serial.println(F("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK")); role = role_ping_out; // Become the primary transmitter (ping out) radio.openWritingPipe(pipes[0]); @@ -112,7 +112,7 @@ void loop(void) { } else if ( c == 'R' && role == role_ping_out ) { - printf("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\n\r"); + Serial.println(F("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK")); role = role_pong_back; // Become the primary receiver (pong back) radio.openWritingPipe(pipes[1]); @@ -120,4 +120,4 @@ void loop(void) { radio.startListening(); } } -} +} \ No newline at end of file diff --git a/examples/pingpair_dyn/pingpair_dyn.ino b/examples/pingpair_dyn/pingpair_dyn.ino index bd16b1ac2..5ef7095e2 100644 --- a/examples/pingpair_dyn/pingpair_dyn.ino +++ b/examples/pingpair_dyn/pingpair_dyn.ino @@ -15,7 +15,6 @@ #include #include "nRF24L01.h" #include "RF24.h" -//#include // Printf is used for debug // // Hardware configuration @@ -88,7 +87,6 @@ void setup(void) // Serial.begin(115200); - //printf_begin(); //Printf is used for debug Serial.println(F("RF24/examples/pingpair_dyn/")); Serial.print(F("ROLE: ")); diff --git a/examples/pingpair_irq/pingpair_irq.ino b/examples/pingpair_irq/pingpair_irq.ino index 3f57e0bf4..ae7768f92 100644 --- a/examples/pingpair_irq/pingpair_irq.ino +++ b/examples/pingpair_irq/pingpair_irq.ino @@ -60,8 +60,8 @@ void setup(){ Serial.begin(115200); printf_begin(); - printf("\n\rRF24/examples/pingpair_irq/\n\r"); - printf("ROLE: %s\n\r",role_friendly_name[role]); + Serial.print(F("\n\rRF24/examples/pingpair_irq\n\rROLE: ")); + Serial.println(role_friendly_name[role]); // Setup and configure rf radio radio.begin(); @@ -92,7 +92,8 @@ void loop() { if (role == role_sender) { // Sender role. Repeatedly send the current time unsigned long time = millis(); // Take the time, and send it. - printf("Now sending %lu\n\r",time); + Serial.print(F("Now sending ")); + Serial.println(time); radio.startWrite( &time, sizeof(unsigned long) ,0); delay(2000); // Try again soon } @@ -112,30 +113,31 @@ void check_radio(void) // Receiver role: Does not radio.whatHappened(tx,fail,rx); // What happened? if ( tx ) { // Have we successfully transmitted? - if ( role == role_sender ){ printf("Send:OK\n\r"); } - if ( role == role_receiver ){ printf("Ack Payload:Sent\n\r"); } + if ( role == role_sender ){ Serial.println(F("Send:OK")); } + if ( role == role_receiver ){ Serial.println(F("Ack Payload:Sent")); } } if ( fail ) { // Have we failed to transmit? - if ( role == role_sender ){ printf("Send:Failed\n\r"); } - if ( role == role_receiver ){ printf("Ack Payload:Failed\n\r"); } + if ( role == role_sender ){ Serial.println(F("Send:Failed")); } + if ( role == role_receiver ){ Serial.println(F("Ack Payload:Failed")); } } if ( rx || radio.available()){ // Did we receive a message? if ( role == role_sender ) { // If we're the sender, we've received an ack payload radio.read(&message_count,sizeof(message_count)); - printf("Ack:%lu\n\r",message_count); + Serial.print(F("Ack: ")); + Serial.println(message_count); } if ( role == role_receiver ) { // If we're the receiver, we've received a time message static unsigned long got_time; // Get this payload and dump it radio.read( &got_time, sizeof(got_time) ); - printf("Got payload %lu\n\r",got_time); + Serial.print(F("Got payload ")); + Serial.println(got_time); radio.writeAckPayload( 1, &message_count, sizeof(message_count) ); // Add an ack packet for the next time around. This is a simple ++message_count; // packet counter - } } } diff --git a/examples/pingpair_multi_dyn/Jamfile b/examples/pingpair_multi_dyn/Jamfile new file mode 100755 index 000000000..901f8da8c --- /dev/null +++ b/examples/pingpair_multi_dyn/Jamfile @@ -0,0 +1,206 @@ +PROJECT_NAME = $(PWD:B) ; +PROJECT_DIR = . ; +PROJECT_LIBS = SPI RF24 ; + +OUT_DIR = ojam ; +F_CPU = 16000000 ; +MCU = atmega328p ; +PORTS = /dev/tty.usbserial-A600eHIs /dev/tty.usbserial-A40081RP /dev/tty.usbserial-A9007LmI ; + +UPLOAD_RATE = 57600 ; +AVRDUDE_PROTOCOL = stk500v1 ; +COM = 33 ; + +# Host-specific overrides for locations +if $(OS) = MACOSX +{ +ARDUINO_VERSION = 22 ; +OLD_DIR = /opt/arduino-0021 ; +AVR_TOOLS_PATH = $(OLD_DIR)/hardware/tools/avr/bin ; +AVRDUDECONFIG_PATH = $(OLD_DIR)/hardware/tools/avr/etc ; +ARDUINO_DIR = /opt/Arduino ; +ARDUINO_AVR = /usr/lib/avr/include ; +} + +# Where is everything? +ARDUINO_VERSION ?= 22 ; +AVR_TOOLS_PATH ?= /usr/bin ; +ARDUINO_DIR ?= /opt/arduino-00$(ARDUINO_VERSION) ; +ARDUINO_AVR ?= $(ARDUINO_DIR)/hardware/tools/avr/avr/include/avr ; +AVRDUDECONFIG_PATH ?= $(ARDUINO_DIR)/hardware/tools ; +ARDUINO_CORE = $(ARDUINO_DIR)/hardware/arduino/cores/arduino ; +ARDUINO_LIB = $(ARDUINO_DIR)/libraries ; +SKETCH_LIB = $(HOME)/Source/Arduino/libraries ; +AVR_CC = $(AVR_TOOLS_PATH)/avr-gcc ; +AVR_CXX = $(AVR_TOOLS_PATH)/avr-g++ ; +AVR_LD = $(AVR_TOOLS_PATH)/avr-gcc ; +AVR_OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy ; +AVRDUDE = $(AVR_TOOLS_PATH)/avrdude ; + +DEFINES = F_CPU=$(F_CPU)L ARDUINO=$(ARDUINO_VERSION) VERSION_H ; +CTUNING = -ffunction-sections -fdata-sections ; +CXXTUNING = -fno-exceptions -fno-strict-aliasing ; +CFLAGS = -Os -Wall -Wextra -mmcu=$(MCU) $(CTUNING) ; +CXXFLAGS = $(CFLAGS) $(CXXTUNING) ; +LDFLAGS = -Os -lm -Wl,--gc-sections -mmcu=atmega328p ; + +# Search everywhere for headers +HDRS = $(PROJECT_DIR) $(ARDUINO_AVR) $(ARDUINO_CORE) [ GLOB $(ARDUINO_LIB) $(SKETCH_LIB) : [^.]* ] ; + +# Grab everything from the core directory +CORE_MODULES = [ GLOB $(ARDUINO_CORE) : *.c *.cpp ] ; + +# Grab everything from libraries. To avoid this "grab everything" behaviour, you +# can specify specific modules to pick up in PROJECT_MODULES +LIB_MODULES = [ GLOB $(ARDUINO_LIB)/$(PROJECT_LIBS) $(SKETCH_LIB)/$(PROJECT_LIBS) : *.cpp ] ; + +# In addition to explicitly-specified program modules, pick up anything from the current +# dir. +PROJECT_MODULES += [ GLOB $(PROJECT_DIR) : *.c *.cpp *.pde ] ; + +# Shortcut for the out files +OUT = $(OUT_DIR)/$(PROJECT_NAME) ; + +# AvrDude setup +AVRDUDE_FLAGS = -V -F -D -C $(AVRDUDECONFIG_PATH)/avrdude.conf -p $(MCU) -c $(AVRDUDE_PROTOCOL) -b $(UPLOAD_RATE) ; + +rule GitVersion +{ + Always $(<) ; + Depends all : $(<) ; +} + +actions GitVersion +{ + echo "const char program_version[] = \"\\" > $(<) + git log -1 --pretty=format:%h >> $(<) + echo "\";" >> $(<) +} + +GitVersion version.h ; + +rule AvrCc +{ + Depends $(<) : $(>) ; + Depends $(<) : $(<:D) ; + Clean clean : $(<) ; + + CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ; + CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ; +} + +actions AvrCc +{ + $(AVR_CC) -c -o $(<) $(CCHDRS) $(CCDEFS) $(CFLAGS) $(>) +} + +rule AvrC++ +{ + Depends $(<) : $(>) ; + Depends $(<) : $(<:D) ; + Clean clean : $(<) ; + + CCHDRS on $(<) = [ on $(<) FIncludes $(HDRS) ] ; + CCDEFS on $(<) = [ on $(<) FDefines $(DEFINES) ] ; +} + +actions AvrC++ +{ + $(AVR_CXX) -c -o $(<) $(CCHDRS) $(CCDEFS) $(CXXFLAGS) $(>) +} + +rule Pde +{ + Depends $(<) : $(>) ; + Depends $(<) : $(<:D) ; + Clean clean : $(<) ; + +} + +actions Pde +{ + echo "#include " > $(<) + echo "#line 1 \"$(>)\"" >> $(<) + cat $(>) >> $(<) +} + +rule AvrPde +{ + local _CPP = $(OUT_DIR)/$(_I:B).cpp ; + Pde $(_CPP) : $(>) ; + AvrC++ $(<) : $(_CPP) ; +} + +rule AvrObject +{ + switch $(>:S) + { + case .c : AvrCc $(<) : $(>) ; + case .cpp : AvrC++ $(<) : $(>) ; + case .pde : AvrPde $(<) : $(>) ; + } +} + +rule AvrObjects +{ + for _I in $(<) + { + AvrObject $(OUT_DIR)/$(_I:B).o : $(_I) ; + } +} + +rule AvrMainFromObjects +{ + Depends $(<) : $(>) ; + Depends $(<) : $(<:D) ; + MkDir $(<:D) ; + Depends all : $(<) ; + Clean clean : $(<) ; +} + +actions AvrMainFromObjects +{ + $(AVR_LD) $(LDFLAGS) -o $(<) $(>) +} + +rule AvrMain +{ + AvrMainFromObjects $(<) : $(OUT_DIR)/$(>:B).o ; + AvrObjects $(>) ; +} + +rule AvrHex +{ + Depends $(<) : $(>) ; + Depends $(<) : $(<:D) ; + Depends hex : $(<) ; + Clean clean : $(<) ; +} + +actions AvrHex +{ + $(AVR_OBJCOPY) -O ihex -R .eeprom $(>) $(<) +} + +rule AvrUpload +{ + Depends $(1) : $(2) ; + Depends $(2) : $(3) ; + NotFile $(1) ; + Always $(1) ; + Always $(2) ; + AvrUploadAction $(2) : $(3) ; +} + +actions AvrUploadAction +{ + $(AVRDUDE) $(AVRDUDE_FLAGS) -P $(<) $(AVRDUDE_WRITE_FLASH) -U flash:w:$(>):i +} + +AvrMain $(OUT).elf : $(CORE_MODULES) $(LIB_MODULES) $(PROJECT_MODULES) ; +AvrHex $(OUT).hex : $(OUT).elf ; + +AvrUpload p6 : /dev/tty.usbserial-A600eHIs : $(OUT).hex ; +AvrUpload p4 : /dev/tty.usbserial-A40081RP : $(OUT).hex ; +AvrUpload p9 : /dev/tty.usbserial-A9007LmI : $(OUT).hex ; + diff --git a/examples/pingpair_multi_dyn/pingpair_multi_dyn.ino b/examples/pingpair_multi_dyn/pingpair_multi_dyn.ino new file mode 100644 index 000000000..03ef24c17 --- /dev/null +++ b/examples/pingpair_multi_dyn/pingpair_multi_dyn.ino @@ -0,0 +1,263 @@ +/* + Copyright (C) 2011 James Coliz, Jr. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + */ + +/** + * Example using Dynamic Payloads + * + * This is an example of how to use payloads of a varying (dynamic) size. + */ + +#include +#include "RF24.h" + +// +// Hardware configuration +// + +// Set up nRF24L01 radio on SPI bus plus pins 8 & 9 +RF24 radio(8,9); + +// Use multicast? +// sets the multicast behavior this unit in hardware. Connect to GND to use unicast +// Leave open (default) to use multicast. +const int multicast_pin = 6 ; + +// sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver +// Leave open to be the 'ping' transmitter +const int role_pin = 7; +bool multicast = true ; + +// +// Topology +// + +// Radio pipe addresses for the 2 nodes to communicate. +const uint64_t pipes[2] = { 0xEEFAFDFDEELL, 0xEEFDFAF50DFLL }; + +// +// Role management +// +// Set up role. This sketch uses the same software for all the nodes +// in this system. Doing so greatly simplifies testing. The hardware itself specifies +// which node it is. +// +// This is done through the role_pin +// + +// The various roles supported by this sketch +typedef enum { role_ping_out = 1, role_pong_back } role_e; + +// The debug-friendly names of those roles +const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"}; + +// The role of the current running sketch +role_e role; + +// +// Payload +// + +const int min_payload_size = 1; +const int max_payload_size = 32; +const int payload_size_increments_by = 1; +int next_payload_size = min_payload_size; + +char receive_payload[max_payload_size+1]; // +1 to allow room for a terminating NULL char + +void setup(void) +{ + // + // Multicast + // + pinMode(multicast_pin, INPUT); + digitalWrite(multicast_pin,HIGH); + delay( 20 ) ; + + // read multicast role, LOW for unicast + if( digitalRead( multicast_pin ) ) + multicast = true ; + else + multicast = false ; + + + // + // Role + // + + // set up the role pin + pinMode(role_pin, INPUT); + digitalWrite(role_pin,HIGH); + delay( 20 ); // Just to get a solid reading on the role pin + + // read the address pin, establish our role + if ( digitalRead(role_pin) ) + role = role_ping_out; + else + role = role_pong_back; + + // + // Print preamble + // + + Serial.begin(115200); + + Serial.println(F("RF24/examples/pingpair_multi_dyn/")); + Serial.print(F("ROLE: ")); + Serial.println(role_friendly_name[role]); + + Serial.print(F("MULTICAST: ")); + Serial.println(multicast ? F("true (unreliable)") : F("false (reliable)")); + + // + // Setup and configure rf radio + // + + radio.begin(); + + // enable dynamic payloads + radio.enableDynamicPayloads(); + radio.setCRCLength( RF24_CRC_16 ) ; + + // optionally, increase the delay between retries & # of retries + radio.setRetries( 15, 5 ) ; + radio.setAutoAck( true ) ; + //radio.setPALevel( RF24_PA_LOW ) ; + + // + // Open pipes to other nodes for communication + // + + // This simple sketch opens two pipes for these two nodes to communicate + // back and forth. + // Open 'our' pipe for writing + // Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading) + + if ( role == role_ping_out ) + { + radio.openWritingPipe(pipes[0]); + radio.openReadingPipe(1,pipes[1]); + } + else + { + radio.openWritingPipe(pipes[1]); + radio.openReadingPipe(1,pipes[0]); + } + + // + // Start listening + // + radio.powerUp() ; + radio.startListening(); + + // + // Dump the configuration of the rf unit for debugging + // + + radio.printDetails(); +} + +void loop(void) +{ + // + // Ping out role. Repeatedly send the current time + // + + if (role == role_ping_out) + { + // The payload will always be the same, what will change is how much of it we send. + static char send_payload[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ789012"; + + // First, stop listening so we can talk. + radio.stopListening(); + + // Take the time, and send it. This will block until complete + Serial.print(F("Now sending length ")); + Serial.println(next_payload_size); + radio.write( send_payload, next_payload_size, multicast ); + + // Now, continue listening + radio.startListening(); + + // Wait here until we get a response, or timeout + unsigned long started_waiting_at = millis(); + bool timeout = false; + while ( ! radio.available() && ! timeout ) + if (millis() - started_waiting_at > 500 ) + timeout = true; + + // Describe the results + if ( timeout ) + { + Serial.println(F("Failed, response timed out.")); + } + else + { + // Grab the response, compare, and send to debugging spew + uint8_t len = radio.getDynamicPayloadSize(); + radio.read( receive_payload, len ); + + // Put a zero at the end for easy printing + receive_payload[len] = 0; + + // Spew it + Serial.print(F("Got response size=")); + Serial.print(len); + Serial.print(F(" value=")); + Serial.println(receive_payload); + } + + // Update size for next time. + next_payload_size += payload_size_increments_by; + if ( next_payload_size > max_payload_size ) + next_payload_size = min_payload_size; + + // Try again 1s later + delay(250); + } + + // + // Pong back role. Receive each packet, dump it out, and send it back + // + + if ( role == role_pong_back ) + { + // if there is data ready + if ( radio.available() ) + { + // Dump the payloads until we've gotten everything + uint8_t len; + bool done = false; + while (radio.available()) + { + // Fetch the payload, and see if this was the last one. + len = radio.getDynamicPayloadSize(); + radio.read( receive_payload, len ); + + // Put a zero at the end for easy printing + receive_payload[len] = 0; + + // Spew it + Serial.print(F("Got response size=")); + Serial.print(len); + Serial.print(F(" value=")); + Serial.println(receive_payload); + } + + // First, stop listening so we can talk + radio.stopListening(); + + // Send the final one back. + radio.write( receive_payload, len, multicast ); + Serial.println(F("Sent response.")); + + // Now, resume listening so we catch the next packets. + radio.startListening(); + } + } +} +// vim:cin:ai:sts=2 sw=2 ft=cpp \ No newline at end of file diff --git a/examples/pingpair_sleepy/pingpair_sleepy.ino b/examples/pingpair_sleepy/pingpair_sleepy.ino index 4fc4b0a40..b46480fac 100644 --- a/examples/pingpair_sleepy/pingpair_sleepy.ino +++ b/examples/pingpair_sleepy/pingpair_sleepy.ino @@ -80,10 +80,10 @@ void setup(){ else role = role_pong_back; - Serial.begin(57600); + Serial.begin(115200); printf_begin(); - printf("\n\rRF24/examples/pingpair_sleepy/\n\r"); - printf("ROLE: %s\n\r",role_friendly_name[role]); + Serial.print(F("\n\rRF24/examples/pingpair_sleepy/\n\rROLE: ")); + Serial.println(role_friendly_name[role]); // Prepare sleep parameters // Only the ping out role uses WDT. Wake up every 4s to send a ping @@ -124,7 +124,8 @@ void loop(){ radio.stopListening(); // First, stop listening so we can talk. unsigned long time = millis(); // Take the time, and send it. - printf("Now sending... %lu \n\r",time); + Serial.print(F("Now sending... ")); + Serial.println(time); radio.write( &time, sizeof(unsigned long) ); @@ -140,8 +141,8 @@ void loop(){ } if ( timeout ) { // Describe the results - printf("Failed, response timed out.\n\r"); - }else{ + Serial.println(F("Failed, response timed out.")); + } else { unsigned long got_time; // Grab the response, compare, and send to debugging spew radio.read( &got_time, sizeof(unsigned long) ); @@ -174,10 +175,10 @@ void loop(){ radio.stopListening(); // First, stop listening so we can talk radio.write( &got_time, sizeof(unsigned long) ); // Send the final one back. - printf("Sent response.\n\r"); + Serial.println(F("Sent response.")); radio.startListening(); // Now, resume listening so we catch the next packets. - }else{ - Serial.println("Sleeping"); + } else { + Serial.println(F("Sleeping")); delay(50); // Delay so the serial data can print out do_sleep(); @@ -208,7 +209,7 @@ void setup_watchdog(uint8_t prescalar){ ISR(WDT_vect) { //--sleep_cycles_remaining; - Serial.println("WDT"); + Serial.println(F("WDT")); } void do_sleep(void) diff --git a/examples/scanner/scanner.ino b/examples/scanner/scanner.ino index c5fa35e53..63eab6138 100644 --- a/examples/scanner/scanner.ino +++ b/examples/scanner/scanner.ino @@ -49,7 +49,7 @@ void setup(void) Serial.begin(115200); printf_begin(); - printf("\n\rRF24/examples/scanner/\n\r"); + Serial.println(F("\n\rRF24/examples/scanner/")); // // Setup and configure rf radio @@ -69,14 +69,14 @@ void setup(void) printf("%x",i>>4); ++i; } - printf("\n\r"); + Serial.println(); i = 0; while ( i < num_channels ) { printf("%x",i&0xf); ++i; } - printf("\n\r"); + Serial.println(); } // @@ -120,7 +120,7 @@ void loop(void) printf("%x",min(0xf,values[i]&0xf)); ++i; } - printf("\n\r"); + Serial.println(); } // vim:ai:cin:sts=2 sw=2 ft=cpp