astyle -A1 -s2

This commit is contained in:
maniacbug 2011-07-08 22:15:37 -07:00
parent 062d83346b
commit d5a3e79c66
8 changed files with 192 additions and 190 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
*.o *.o
.*.swp .*.swp
*.orig
docs/ docs/
output/ output/
ojam/ ojam/

View File

@ -1,22 +1,22 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
*/ */
/** /**
* Example LED Remote * Example LED Remote
* *
* This is an example of how to use the RF24 class to control a remote * This is an example of how to use the RF24 class to control a remote
* bank of LED's using buttons on a remote control. * bank of LED's using buttons on a remote control.
* *
* On the 'remote', connect any number of buttons or switches from * On the 'remote', connect any number of buttons or switches from
* an arduino pin to ground. Update 'button_pins' to reflect the * an arduino pin to ground. Update 'button_pins' to reflect the
* pins used. * pins used.
* *
* On the 'led' board, connect the same number of LED's from an * On the 'led' board, connect the same number of LED's from an
* arduino pin to a resistor to ground. Update 'led_pins' to reflect * arduino pin to a resistor to ground. Update 'led_pins' to reflect
* the pins used. Also connect a separate pin to ground and change * the pins used. Also connect a separate pin to ground and change
* the 'role_pin'. This tells the sketch it's running on the LED board. * the 'role_pin'. This tells the sketch it's running on the LED board.
@ -24,7 +24,7 @@
* Every time the buttons change on the remote, the entire state of * Every time the buttons change on the remote, the entire state of
* buttons is send to the led board, which displays the state. * buttons is send to the led board, which displays the state.
*/ */
#include <SPI.h> #include <SPI.h>
#include "nRF24L01.h" #include "nRF24L01.h"
#include "RF24.h" #include "RF24.h"
@ -38,15 +38,15 @@
RF24 radio(8,9); RF24 radio(8,9);
// sets the role of this unit in hardware. Connect to GND to be the 'led' board receiver // sets the role of this unit in hardware. Connect to GND to be the 'led' board receiver
// Leave open to be the 'remote' transmitter // Leave open to be the 'remote' transmitter
const int role_pin = A4; const int role_pin = A4;
// Pins on the remote for buttons // Pins on the remote for buttons
const uint8_t button_pins[] = { 2,3,4,5,6,7 }; const uint8_t button_pins[] = { 2,3,4,5,6,7 };
const uint8_t num_button_pins = sizeof(button_pins); const uint8_t num_button_pins = sizeof(button_pins);
// Pins on the LED board for LED's // Pins on the LED board for LED's
const uint8_t led_pins[] = { 2,3,4,5,6,7 }; const uint8_t led_pins[] = { 2,3,4,5,6,7 };
const uint8_t num_led_pins = sizeof(led_pins); const uint8_t num_led_pins = sizeof(led_pins);
@ -84,7 +84,7 @@ uint8_t button_states[num_button_pins];
uint8_t led_states[num_led_pins]; uint8_t led_states[num_led_pins];
// //
// Setup // Setup
// //
void setup(void) void setup(void)
@ -92,12 +92,12 @@ void setup(void)
// //
// Role // Role
// //
// set up the role pin // set up the role pin
pinMode(role_pin, INPUT); pinMode(role_pin, INPUT);
digitalWrite(role_pin,HIGH); digitalWrite(role_pin,HIGH);
delay(20); // Just to get a solid reading on the role pin delay(20); // Just to get a solid reading on the role pin
// read the address pin, establish our role // read the address pin, establish our role
if ( digitalRead(role_pin) ) if ( digitalRead(role_pin) )
role = role_remote; role = role_remote;
@ -107,7 +107,7 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/led_remote/\n\r"); printf("\n\rRF24/examples/led_remote/\n\r");
@ -116,16 +116,16 @@ void setup(void)
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
// //
// Open pipes to other nodes for communication // Open pipes to other nodes for communication
// //
// This simple sketch opens a single pipes for these two nodes to communicate // This simple sketch opens a single pipes for these two nodes to communicate
// back and forth. One listens on it, the other talks to it. // back and forth. One listens on it, the other talks to it.
if ( role == role_remote ) if ( role == role_remote )
{ {
radio.openWritingPipe(pipe); radio.openWritingPipe(pipe);
@ -138,14 +138,14 @@ void setup(void)
// //
// Start listening // Start listening
// //
if ( role == role_led ) if ( role == role_led )
radio.startListening(); radio.startListening();
// //
// Dump the configuration of the rf unit for debugging // Dump the configuration of the rf unit for debugging
// //
radio.printDetails(); radio.printDetails();
// //
@ -178,7 +178,7 @@ void setup(void)
} }
// //
// Loop // Loop
// //
void loop(void) void loop(void)
@ -187,7 +187,7 @@ void loop(void)
// Remote role. If the state of any button has changed, send the whole state of // Remote role. If the state of any button has changed, send the whole state of
// all buttons. // all buttons.
// //
if ( role == role_remote ) if ( role == role_remote )
{ {
// Get the current state of buttons, and // Get the current state of buttons, and
@ -199,8 +199,8 @@ void loop(void)
uint8_t state = ! digitalRead(button_pins[i]); uint8_t state = ! digitalRead(button_pins[i]);
if ( state != button_states[i] ) if ( state != button_states[i] )
{ {
different = true; different = true;
button_states[i] = state; button_states[i] = state;
} }
} }
@ -210,19 +210,19 @@ void loop(void)
printf("Now sending..."); printf("Now sending...");
bool ok = radio.write( button_states, num_button_pins ); bool ok = radio.write( button_states, num_button_pins );
if (ok) if (ok)
printf("ok\n\r"); printf("ok\n\r");
else else
printf("failed\n\r"); printf("failed\n\r");
} }
// Try again in a short while // Try again in a short while
delay(20); delay(20);
} }
// //
// LED role. Receive the state of all buttons, and reflect that in the LEDs // LED role. Receive the state of all buttons, and reflect that in the LEDs
// //
if ( role == role_led ) if ( role == role_led )
{ {
// if there is data ready // if there is data ready
@ -234,20 +234,20 @@ void loop(void)
{ {
// Fetch the payload, and see if this was the last one. // Fetch the payload, and see if this was the last one.
done = radio.read( button_states, num_button_pins ); done = radio.read( button_states, num_button_pins );
// Spew it // Spew it
printf("Got buttons\n\r"); printf("Got buttons\n\r");
// For each button, if the button now on, then toggle the LED // For each button, if the button now on, then toggle the LED
int i = num_led_pins; int i = num_led_pins;
while(i--) while(i--)
{ {
if ( button_states[i] ) if ( button_states[i] )
{ {
led_states[i] ^= HIGH; led_states[i] ^= HIGH;
digitalWrite(led_pins[i],led_states[i]); digitalWrite(led_pins[i],led_states[i]);
} }
} }
} }
} }
} }

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
@ -14,7 +14,7 @@
* which responds by sending the value back. The ping node can then see how long the whole cycle * which responds by sending the value back. The ping node can then see how long the whole cycle
* took. * took.
*/ */
#include <SPI.h> #include <SPI.h>
#include "nRF24L01.h" #include "nRF24L01.h"
#include "RF24.h" #include "RF24.h"
@ -29,7 +29,7 @@
RF24 radio(8,9); RF24 radio(8,9);
// sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver // sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver
// Leave open to be the 'ping' transmitter // Leave open to be the 'ping' transmitter
const int role_pin = 7; const int role_pin = 7;
// //
@ -63,12 +63,12 @@ void setup(void)
// //
// Role // Role
// //
// set up the role pin // set up the role pin
pinMode(role_pin, INPUT); pinMode(role_pin, INPUT);
digitalWrite(role_pin,HIGH); digitalWrite(role_pin,HIGH);
delay(20); // Just to get a solid reading on the role pin delay(20); // Just to get a solid reading on the role pin
// read the address pin, establish our role // read the address pin, establish our role
if ( digitalRead(role_pin) ) if ( digitalRead(role_pin) )
role = role_ping_out; role = role_ping_out;
@ -78,7 +78,7 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/pingpair/\n\r"); printf("\n\rRF24/examples/pingpair/\n\r");
@ -87,11 +87,11 @@ void setup(void)
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
// optionally, increase the delay between retries & # of retries // optionally, increase the delay between retries & # of retries
radio.setRetries(15,15); radio.setRetries(15,15);
// optionally, use a high channel to avoid WiFi chatter // optionally, use a high channel to avoid WiFi chatter
radio.setChannel(110); radio.setChannel(110);
@ -102,12 +102,12 @@ void setup(void)
// //
// Open pipes to other nodes for communication // Open pipes to other nodes for communication
// //
// This simple sketch opens two pipes for these two nodes to communicate // This simple sketch opens two pipes for these two nodes to communicate
// back and forth. // back and forth.
// Open 'our' pipe for writing // Open 'our' pipe for writing
// Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading) // Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading)
if ( role == role_ping_out ) if ( role == role_ping_out )
{ {
radio.openWritingPipe(pipes[0]); radio.openWritingPipe(pipes[0]);
@ -122,13 +122,13 @@ void setup(void)
// //
// Start listening // Start listening
// //
radio.startListening(); radio.startListening();
// //
// Dump the configuration of the rf unit for debugging // Dump the configuration of the rf unit for debugging
// //
radio.printDetails(); radio.printDetails();
} }
@ -137,27 +137,27 @@ void loop(void)
// //
// Ping out role. Repeatedly send the current time // Ping out role. Repeatedly send the current time
// //
if (role == role_ping_out) if (role == role_ping_out)
{ {
// First, stop listening so we can talk. // First, stop listening so we can talk.
radio.stopListening(); radio.stopListening();
// Take the time, and send it. This will block until complete // Take the time, and send it. This will block until complete
unsigned long time = millis(); unsigned long time = millis();
printf("Now sending %lu...",time); printf("Now sending %lu...",time);
radio.write( &time, sizeof(unsigned long) ); radio.write( &time, sizeof(unsigned long) );
// Now, continue listening // Now, continue listening
radio.startListening(); radio.startListening();
// Wait here until we get a response, or timeout (250ms) // Wait here until we get a response, or timeout (250ms)
unsigned long started_waiting_at = millis(); unsigned long started_waiting_at = millis();
bool timeout = false; bool timeout = false;
while ( ! radio.available() && ! timeout ) while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 250 ) if (millis() - started_waiting_at > 250 )
timeout = true; timeout = true;
// Describe the results // Describe the results
if ( timeout ) if ( timeout )
{ {
@ -168,19 +168,19 @@ void loop(void)
// Grab the response, compare, and send to debugging spew // Grab the response, compare, and send to debugging spew
unsigned long got_time; unsigned long got_time;
radio.read( &got_time, sizeof(unsigned long) ); radio.read( &got_time, sizeof(unsigned long) );
// Spew it // Spew it
printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time); printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time);
} }
// Try again 1s later // Try again 1s later
delay(1000); delay(1000);
} }
// //
// Pong back role. Receive each packet, dump it out, and send it back // Pong back role. Receive each packet, dump it out, and send it back
// //
if ( role == role_pong_back ) if ( role == role_pong_back )
{ {
// if there is data ready // if there is data ready
@ -193,18 +193,18 @@ void loop(void)
{ {
// Fetch the payload, and see if this was the last one. // Fetch the payload, and see if this was the last one.
done = radio.read( &got_time, sizeof(unsigned long) ); done = radio.read( &got_time, sizeof(unsigned long) );
// Spew it // Spew it
printf("Got payload %lu...",got_time); printf("Got payload %lu...",got_time);
} }
// First, stop listening so we can talk // First, stop listening so we can talk
radio.stopListening(); radio.stopListening();
// Send the final one back. // Send the final one back.
radio.write( &got_time, sizeof(unsigned long) ); radio.write( &got_time, sizeof(unsigned long) );
printf("Sent response.\n\r"); printf("Sent response.\n\r");
// Now, resume listening so we catch the next packets. // Now, resume listening so we catch the next packets.
radio.startListening(); radio.startListening();
} }

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
@ -12,7 +12,7 @@
* This is an example of how to user interrupts to interact with the radio. * This is an example of how to user interrupts to interact with the radio.
* It builds on the pingpair_pl example, and uses ack payloads. * It builds on the pingpair_pl example, and uses ack payloads.
*/ */
#include <SPI.h> #include <SPI.h>
#include "nRF24L01.h" #include "nRF24L01.h"
#include "RF24.h" #include "RF24.h"
@ -27,7 +27,7 @@
RF24 radio(8,9); RF24 radio(8,9);
// sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver // sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver
// Leave open to be the 'ping' transmitter // Leave open to be the 'ping' transmitter
const short role_pin = 7; const short role_pin = 7;
// //
@ -64,12 +64,12 @@ void setup(void)
// //
// Role // Role
// //
// set up the role pin // set up the role pin
pinMode(role_pin, INPUT); pinMode(role_pin, INPUT);
digitalWrite(role_pin,HIGH); digitalWrite(role_pin,HIGH);
delay(20); // Just to get a solid reading on the role pin delay(20); // Just to get a solid reading on the role pin
// read the address pin, establish our role // read the address pin, establish our role
if ( digitalRead(role_pin) ) if ( digitalRead(role_pin) )
role = role_sender; role = role_sender;
@ -79,7 +79,7 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/pingpair_irq/\n\r"); printf("\n\rRF24/examples/pingpair_irq/\n\r");
@ -88,9 +88,9 @@ void setup(void)
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
// We will be using the Ack Payload feature, so please enable it // We will be using the Ack Payload feature, so please enable it
radio.enableAckPayload(); radio.enableAckPayload();
@ -103,10 +103,10 @@ void setup(void)
// //
// Open pipes to other nodes for communication // Open pipes to other nodes for communication
// //
// This simple sketch opens a single pipe for these two nodes to communicate // This simple sketch opens a single pipe for these two nodes to communicate
// back and forth. One listens on it, the other talks to it. // back and forth. One listens on it, the other talks to it.
if ( role == role_sender ) if ( role == role_sender )
{ {
radio.openWritingPipe(pipe); radio.openWritingPipe(pipe);
@ -119,16 +119,16 @@ void setup(void)
// //
// Start listening // Start listening
// //
if ( role == role_receiver ) if ( role == role_receiver )
radio.startListening(); radio.startListening();
// //
// Dump the configuration of the rf unit for debugging // Dump the configuration of the rf unit for debugging
// //
radio.printDetails(); radio.printDetails();
// //
// Attach interrupt handler to interrupt #0 (using pin 2) // Attach interrupt handler to interrupt #0 (using pin 2)
// on BOTH the sender and receiver // on BOTH the sender and receiver
@ -144,15 +144,15 @@ void loop(void)
// //
// Sender role. Repeatedly send the current time // Sender role. Repeatedly send the current time
// //
if (role == role_sender) if (role == role_sender)
{ {
// Take the time, and send it. // Take the time, and send it.
unsigned long time = millis(); unsigned long time = millis();
printf("Now sending %lu\n\r",time); printf("Now sending %lu\n\r",time);
radio.startWrite( &time, sizeof(unsigned long) ); radio.startWrite( &time, sizeof(unsigned long) );
// Try again soon // Try again soon
delay(2000); delay(2000);
} }
@ -206,7 +206,7 @@ void check_radio(void)
// If we're the receiver, we've received a time message // If we're the receiver, we've received a time message
if ( role == role_receiver ) if ( role == role_receiver )
{ {
// Get this payload and dump it // Get this payload and dump it
static unsigned long got_time; static unsigned long got_time;
radio.read( &got_time, sizeof(got_time) ); radio.read( &got_time, sizeof(got_time) );
printf("Got payload %lu\n\r",got_time); printf("Got payload %lu\n\r",got_time);

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
@ -9,12 +9,12 @@
/** /**
* Example of using Ack Payloads * Example of using Ack Payloads
* *
* This is an example of how to do two-way communication without changing * This is an example of how to do two-way communication without changing
* transmit/receive modes. Here, a payload is set to the transmitter within * transmit/receive modes. Here, a payload is set to the transmitter within
* the Ack packet of each transmission. Note that the payload is set BEFORE * the Ack packet of each transmission. Note that the payload is set BEFORE
* the sender's message arrives. * the sender's message arrives.
*/ */
#include <SPI.h> #include <SPI.h>
#include "nRF24L01.h" #include "nRF24L01.h"
#include "RF24.h" #include "RF24.h"
@ -29,7 +29,7 @@
RF24 radio(8,9); RF24 radio(8,9);
// sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver // sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver
// Leave open to be the 'ping' transmitter // Leave open to be the 'ping' transmitter
const short role_pin = 7; const short role_pin = 7;
// //
@ -63,12 +63,12 @@ void setup(void)
// //
// Role // Role
// //
// set up the role pin // set up the role pin
pinMode(role_pin, INPUT); pinMode(role_pin, INPUT);
digitalWrite(role_pin,HIGH); digitalWrite(role_pin,HIGH);
delay(20); // Just to get a solid reading on the role pin delay(20); // Just to get a solid reading on the role pin
// read the address pin, establish our role // read the address pin, establish our role
if ( digitalRead(role_pin) ) if ( digitalRead(role_pin) )
role = role_sender; role = role_sender;
@ -78,7 +78,7 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/pingpair_pl/\n\r"); printf("\n\rRF24/examples/pingpair_pl/\n\r");
@ -87,19 +87,19 @@ void setup(void)
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
// We will be using the Ack Payload feature, so please enable it // We will be using the Ack Payload feature, so please enable it
radio.enableAckPayload(); radio.enableAckPayload();
// //
// Open pipes to other nodes for communication // Open pipes to other nodes for communication
// //
// This simple sketch opens a single pipes for these two nodes to communicate // This simple sketch opens a single pipes for these two nodes to communicate
// back and forth. One listens on it, the other talks to it. // back and forth. One listens on it, the other talks to it.
if ( role == role_sender ) if ( role == role_sender )
{ {
radio.openWritingPipe(pipe); radio.openWritingPipe(pipe);
@ -112,25 +112,25 @@ void setup(void)
// //
// Start listening // Start listening
// //
if ( role == role_receiver ) if ( role == role_receiver )
radio.startListening(); radio.startListening();
// //
// Dump the configuration of the rf unit for debugging // Dump the configuration of the rf unit for debugging
// //
radio.printDetails(); radio.printDetails();
} }
void loop(void) void loop(void)
{ {
static uint32_t message_count = 0; static uint32_t message_count = 0;
// //
// Sender role. Repeatedly send the current time // Sender role. Repeatedly send the current time
// //
if (role == role_sender) if (role == role_sender)
{ {
// Take the time, and send it. This will block until complete // Take the time, and send it. This will block until complete
@ -142,17 +142,17 @@ void loop(void)
{ {
radio.read(&message_count,sizeof(message_count)); radio.read(&message_count,sizeof(message_count));
printf("Ack: [%lu] ",message_count); printf("Ack: [%lu] ",message_count);
} }
printf("OK\n\r"); printf("OK\n\r");
// Try again soon // Try again soon
delay(2000); delay(2000);
} }
// //
// Receiver role. Receive each packet, dump it out, add ack payload for next time // Receiver role. Receive each packet, dump it out, add ack payload for next time
// //
if ( role == role_receiver ) if ( role == role_receiver )
{ {
// if there is data ready // if there is data ready
@ -165,11 +165,11 @@ void loop(void)
{ {
// Fetch the payload, and see if this was the last one. // Fetch the payload, and see if this was the last one.
done = radio.read( &got_time, sizeof(unsigned long) ); done = radio.read( &got_time, sizeof(unsigned long) );
// Spew it // Spew it
printf("Got payload %lu\n",got_time); printf("Got payload %lu\n",got_time);
} }
// Add an ack packet for the next time around. This is a simple // Add an ack packet for the next time around. This is a simple
// packet counter // packet counter
radio.writeAckPayload( 1, &message_count, sizeof(message_count) ); radio.writeAckPayload( 1, &message_count, sizeof(message_count) );

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
@ -15,11 +15,11 @@
* ping/pong cycle. * ping/pong cycle.
* *
* As with the pingpair.pde example, write this sketch to two different nodes, * As with the pingpair.pde example, write this sketch to two different nodes,
* connect the role_pin to ground on one. The ping node sends the current * 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 * time to the pong node, which responds by sending the value back. The ping
* node can then see how long the whole cycle took. * node can then see how long the whole cycle took.
*/ */
#include <SPI.h> #include <SPI.h>
#include <avr/sleep.h> #include <avr/sleep.h>
#include <avr/power.h> #include <avr/power.h>
@ -36,7 +36,7 @@
RF24 radio(8,9); RF24 radio(8,9);
// sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver // sets the role of this unit in hardware. Connect to GND to be the 'pong' receiver
// Leave open to be the 'ping' transmitter // Leave open to be the 'ping' transmitter
const int role_pin = 7; const int role_pin = 7;
// //
@ -86,12 +86,12 @@ void setup(void)
// //
// Role // Role
// //
// set up the role pin // set up the role pin
pinMode(role_pin, INPUT); pinMode(role_pin, INPUT);
digitalWrite(role_pin,HIGH); digitalWrite(role_pin,HIGH);
delay(20); // Just to get a solid reading on the role pin delay(20); // Just to get a solid reading on the role pin
// read the address pin, establish our role // read the address pin, establish our role
if ( digitalRead(role_pin) ) if ( digitalRead(role_pin) )
role = role_ping_out; role = role_ping_out;
@ -101,7 +101,7 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/pingpair_sleepy/\n\r"); printf("\n\rRF24/examples/pingpair_sleepy/\n\r");
@ -118,18 +118,18 @@ void setup(void)
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
// //
// Open pipes to other nodes for communication // Open pipes to other nodes for communication
// //
// This simple sketch opens two pipes for these two nodes to communicate // This simple sketch opens two pipes for these two nodes to communicate
// back and forth. // back and forth.
// Open 'our' pipe for writing // Open 'our' pipe for writing
// Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading) // Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading)
if ( role == role_ping_out ) if ( role == role_ping_out )
{ {
radio.openWritingPipe(pipes[0]); radio.openWritingPipe(pipes[0]);
@ -144,13 +144,13 @@ void setup(void)
// //
// Start listening // Start listening
// //
radio.startListening(); radio.startListening();
// //
// Dump the configuration of the rf unit for debugging // Dump the configuration of the rf unit for debugging
// //
radio.printDetails(); radio.printDetails();
} }
@ -159,27 +159,27 @@ void loop(void)
// //
// Ping out role. Repeatedly send the current time // Ping out role. Repeatedly send the current time
// //
if (role == role_ping_out) if (role == role_ping_out)
{ {
// First, stop listening so we can talk. // First, stop listening so we can talk.
radio.stopListening(); radio.stopListening();
// Take the time, and send it. This will block until complete // Take the time, and send it. This will block until complete
unsigned long time = millis(); unsigned long time = millis();
printf("Now sending %lu...",time); printf("Now sending %lu...",time);
radio.write( &time, sizeof(unsigned long) ); radio.write( &time, sizeof(unsigned long) );
// Now, continue listening // Now, continue listening
radio.startListening(); radio.startListening();
// Wait here until we get a response, or timeout (250ms) // Wait here until we get a response, or timeout (250ms)
unsigned long started_waiting_at = millis(); unsigned long started_waiting_at = millis();
bool timeout = false; bool timeout = false;
while ( ! radio.available() && ! timeout ) while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 250 ) if (millis() - started_waiting_at > 250 )
timeout = true; timeout = true;
// Describe the results // Describe the results
if ( timeout ) if ( timeout )
{ {
@ -190,11 +190,11 @@ void loop(void)
// Grab the response, compare, and send to debugging spew // Grab the response, compare, and send to debugging spew
unsigned long got_time; unsigned long got_time;
radio.read( &got_time, sizeof(unsigned long) ); radio.read( &got_time, sizeof(unsigned long) );
// Spew it // Spew it
printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time); printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time);
} }
// //
// Shut down the system // Shut down the system
// //
@ -210,16 +210,16 @@ void loop(void)
// continue execution here. // continue execution here.
while( sleep_cycles_remaining ) while( sleep_cycles_remaining )
do_sleep(); do_sleep();
sleep_cycles_remaining = sleep_cycles_per_transmission; sleep_cycles_remaining = sleep_cycles_per_transmission;
} }
// //
// Pong back role. Receive each packet, dump it out, and send it back // Pong back role. Receive each packet, dump it out, and send it back
// //
// This is untouched from the pingpair example. // This is untouched from the pingpair example.
// //
if ( role == role_pong_back ) if ( role == role_pong_back )
{ {
// if there is data ready // if there is data ready
@ -232,19 +232,19 @@ void loop(void)
{ {
// Fetch the payload, and see if this was the last one. // Fetch the payload, and see if this was the last one.
done = radio.read( &got_time, sizeof(unsigned long) ); done = radio.read( &got_time, sizeof(unsigned long) );
// Spew it. Include our time, because the ping_out millis counter is unreliable // Spew it. Include our time, because the ping_out millis counter is unreliable
// due to it sleeping // due to it sleeping
printf("Got payload %lu @ %lu...",got_time,millis()); printf("Got payload %lu @ %lu...",got_time,millis());
} }
// First, stop listening so we can talk // First, stop listening so we can talk
radio.stopListening(); radio.stopListening();
// Send the final one back. // Send the final one back.
radio.write( &got_time, sizeof(unsigned long) ); radio.write( &got_time, sizeof(unsigned long) );
printf("Sent response.\n\r"); printf("Sent response.\n\r");
// Now, resume listening so we catch the next packets. // Now, resume listening so we catch the next packets.
radio.startListening(); radio.startListening();
} }
@ -252,36 +252,37 @@ void loop(void)
} }
// //
// Sleep helpers // Sleep helpers
// //
// 0=16ms, 1=32ms,2=64ms,3=125ms,4=250ms,5=500ms // 0=16ms, 1=32ms,2=64ms,3=125ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec // 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
void setup_watchdog(uint8_t prescalar) void setup_watchdog(uint8_t prescalar)
{ {
prescalar = min(9,prescalar); prescalar = min(9,prescalar);
uint8_t wdtcsr = prescalar & 7; uint8_t wdtcsr = prescalar & 7;
if ( prescalar & 8 ) if ( prescalar & 8 )
wdtcsr |= _BV(WDP3); wdtcsr |= _BV(WDP3);
MCUSR &= ~_BV(WDRF); MCUSR &= ~_BV(WDRF);
WDTCSR = _BV(WDCE) | _BV(WDE); WDTCSR = _BV(WDCE) | _BV(WDE);
WDTCSR = _BV(WDCE) | wdtcsr | _BV(WDIE); WDTCSR = _BV(WDCE) | wdtcsr | _BV(WDIE);
} }
ISR(WDT_vect) { ISR(WDT_vect)
{
--sleep_cycles_remaining; --sleep_cycles_remaining;
} }
void do_sleep(void) void do_sleep(void)
{ {
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable(); sleep_enable();
sleep_mode(); // System sleeps here sleep_mode(); // System sleeps here
sleep_disable(); // System continues execution here when watchdog timed out sleep_disable(); // System continues execution here when watchdog timed out
} }
// vim:ai:cin:sts=2 sw=2 ft=cpp // vim:ai:cin:sts=2 sw=2 ft=cpp

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
@ -47,15 +47,15 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/scanner/\n\r"); printf("\n\rRF24/examples/scanner/\n\r");
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
radio.setAutoAck(false); radio.setAutoAck(false);
@ -63,7 +63,7 @@ void setup(void)
radio.startListening(); radio.startListening();
radio.stopListening(); radio.stopListening();
// Print out header, high then low digit // Print out header, high then low digit
int i = 0; int i = 0;
while ( i < num_channels ) while ( i < num_channels )
{ {
@ -88,7 +88,7 @@ const short num_reps = 100;
void loop(void) void loop(void)
{ {
// Clear measurement values // Clear measurement values
memset(values,0,num_channels); memset(values,0,num_channels);
// Scan all channels num_reps times // Scan all channels num_reps times
@ -108,11 +108,11 @@ void loop(void)
// Did we get a carrier? // Did we get a carrier?
if ( radio.testCarrier() ) if ( radio.testCarrier() )
++values[i]; ++values[i];
} }
} }
// Print out channel measurements, clamped to a single hex digit // Print out channel measurements, clamped to a single hex digit
int i = 0; int i = 0;
while ( i < num_channels ) while ( i < num_channels )
{ {

View File

@ -1,18 +1,18 @@
/* /*
Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com> Copyright (C) 2011 James Coliz, Jr. <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation. version 2 as published by the Free Software Foundation.
*/ */
/** /**
* Example RF Radio Ping Star Group * Example RF Radio Ping Star Group
* *
* This sketch is a more complex example of using the RF24 library for Arduino. * 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 * 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 * 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 * 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 * respond back with a copy of the value. Each ping unit can get that response
* back, and determine how long the whole cycle took. * back, and determine how long the whole cycle took.
* *
@ -20,7 +20,7 @@
* The pong receiver is identified by having its role_pin tied to ground. * The pong receiver is identified by having its role_pin tied to ground.
* The ping senders are further differentiated by a byte in eeprom. * The ping senders are further differentiated by a byte in eeprom.
*/ */
#include <SPI.h> #include <SPI.h>
#include <EEPROM.h> #include <EEPROM.h>
#include "nRF24L01.h" #include "nRF24L01.h"
@ -88,12 +88,12 @@ void setup(void)
// //
// Role // Role
// //
// set up the role pin // set up the role pin
pinMode(role_pin, INPUT); pinMode(role_pin, INPUT);
digitalWrite(role_pin,HIGH); digitalWrite(role_pin,HIGH);
delay(20); // Just to get a solid reading on the role pin delay(20); // Just to get a solid reading on the role pin
// read the address pin, establish our role // read the address pin, establish our role
if ( digitalRead(role_pin) ) if ( digitalRead(role_pin) )
role = role_ping_out; role = role_ping_out;
@ -115,7 +115,7 @@ void setup(void)
// address. // address.
if ( reading >= 2 && reading <= 6 ) if ( reading >= 2 && reading <= 6 )
node_address = reading; node_address = reading;
// Otherwise, it is invalid, so set our address AND ROLE to 'invalid' // Otherwise, it is invalid, so set our address AND ROLE to 'invalid'
else else
{ {
@ -127,7 +127,7 @@ void setup(void)
// //
// Print preamble // Print preamble
// //
Serial.begin(57600); Serial.begin(57600);
printf_begin(); printf_begin();
printf("\n\rRF24/examples/starping/\n\r"); printf("\n\rRF24/examples/starping/\n\r");
@ -137,7 +137,7 @@ void setup(void)
// //
// Setup and configure rf radio // Setup and configure rf radio
// //
radio.begin(); radio.begin();
// //
@ -154,27 +154,27 @@ void setup(void)
radio.openReadingPipe(4,talking_pipes[3]); radio.openReadingPipe(4,talking_pipes[3]);
radio.openReadingPipe(5,talking_pipes[4]); radio.openReadingPipe(5,talking_pipes[4]);
} }
// Each ping node has a talking pipe that it will ping into, and a listening // Each ping node has a talking pipe that it will ping into, and a listening
// pipe that it will listen for the pong. // pipe that it will listen for the pong.
if ( role == role_ping_out ) if ( role == role_ping_out )
{ {
// Write on our talking pipe // Write on our talking pipe
radio.openWritingPipe(talking_pipes[node_address-2]); radio.openWritingPipe(talking_pipes[node_address-2]);
// Listen on our listening pipe // Listen on our listening pipe
radio.openReadingPipe(1,listening_pipes[node_address-2]); radio.openReadingPipe(1,listening_pipes[node_address-2]);
} }
// //
// Start listening // Start listening
// //
radio.startListening(); radio.startListening();
// //
// Dump the configuration of the rf unit for debugging // Dump the configuration of the rf unit for debugging
// //
radio.printDetails(); radio.printDetails();
// //
@ -192,27 +192,27 @@ void loop(void)
// //
// Ping out role. Repeatedly send the current time // Ping out role. Repeatedly send the current time
// //
if (role == role_ping_out) if (role == role_ping_out)
{ {
// First, stop listening so we can talk. // First, stop listening so we can talk.
radio.stopListening(); radio.stopListening();
// Take the time, and send it. This will block until complete // Take the time, and send it. This will block until complete
unsigned long time = millis(); unsigned long time = millis();
printf("Now sending %lu...",time); printf("Now sending %lu...",time);
radio.write( &time, sizeof(unsigned long) ); radio.write( &time, sizeof(unsigned long) );
// Now, continue listening // Now, continue listening
radio.startListening(); radio.startListening();
// Wait here until we get a response, or timeout (250ms) // Wait here until we get a response, or timeout (250ms)
unsigned long started_waiting_at = millis(); unsigned long started_waiting_at = millis();
bool timeout = false; bool timeout = false;
while ( ! radio.available() && ! timeout ) while ( ! radio.available() && ! timeout )
if (millis() - started_waiting_at > 250 ) if (millis() - started_waiting_at > 250 )
timeout = true; timeout = true;
// Describe the results // Describe the results
if ( timeout ) if ( timeout )
{ {
@ -223,19 +223,19 @@ void loop(void)
// Grab the response, compare, and send to debugging spew // Grab the response, compare, and send to debugging spew
unsigned long got_time; unsigned long got_time;
radio.read( &got_time, sizeof(unsigned long) ); radio.read( &got_time, sizeof(unsigned long) );
// Spew it // Spew it
printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time); printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time);
} }
// Try again 1s later // Try again 1s later
delay(1000); delay(1000);
} }
// //
// Pong back role. Receive each packet, dump it out, and send it back // Pong back role. Receive each packet, dump it out, and send it back
// //
if ( role == role_pong_back ) if ( role == role_pong_back )
{ {
// if there is data ready // if there is data ready
@ -249,11 +249,11 @@ void loop(void)
{ {
// Fetch the payload, and see if this was the last one. // Fetch the payload, and see if this was the last one.
done = radio.read( &got_time, sizeof(unsigned long) ); done = radio.read( &got_time, sizeof(unsigned long) );
// Spew it // Spew it
printf("Got payload %lu from node %i...",got_time,pipe_num+1); printf("Got payload %lu from node %i...",got_time,pipe_num+1);
} }
// First, stop listening so we can talk // First, stop listening so we can talk
radio.stopListening(); radio.stopListening();
@ -262,11 +262,11 @@ void loop(void)
// Retain the low 2 bytes to identify the pipe for the spew // Retain the low 2 bytes to identify the pipe for the spew
uint16_t pipe_id = listening_pipes[pipe_num-1] & 0xffff; uint16_t pipe_id = listening_pipes[pipe_num-1] & 0xffff;
// Send the final one back. // Send the final one back.
radio.write( &got_time, sizeof(unsigned long) ); radio.write( &got_time, sizeof(unsigned long) );
printf("Sent response to %04x.\n\r",pipe_id); printf("Sent response to %04x.\n\r",pipe_id);
// Now, resume listening so we catch the next packets. // Now, resume listening so we catch the next packets.
radio.startListening(); radio.startListening();
} }