/*
Combines RF24's scanner with the LCD output to make a standalone scanner
- - - - - - - - - - - - - - - - - -
The circuit:
* LCD pin 1 (gnd) to gnd
* LCD pin 2 (Vcc) to +5v
* LCD pin 3 (VO) to wiper of 20k pot between Vcc and gnd (contrast adj)
* LCD pin 4 (RS) to digital pin 7
* LCD pin 5 (R/W) to gnd
* LCD pin 6 (clock/enable) to digital pin 6
* LCD pin 7 (D0) UNUSED
* LCD pin 8 (D1) UNUSED
* LCD pin 9 (D2) UNUSED
* LCD pin 10 (D3) UNUSED
* LCD pin 11 (D4) to digital pin 5
* LCD pin 12 (D5) to digital pin 4
* LCD pin 13 (D6) to digital pin 3
* LCD pin 14 (D7) to digital pin 2
http://www.arduino.cc/en/Tutorial/LiquidCrystal
- - - - - - - - - - - - - - - - - -
Example to detect interference on the various channels available.
This is a good diagnostic tool to check whether you're picking a
good channel for your application.
Inspired by cpixip.
See http://arduino.cc/forum/index.php/topic,54795.0.html
The circuit:
* nRF24L01 pin 1 gnd to gnd
* nRF24L01 pin 2 Vcc tp 3v3
* nRF24L01 pin 3 CE to 9
* nRF24L01 pin 4 CSN to 10
* nRF24L01 pin 5 SCK to 13
* nRF24L01 pin 6 MOSI to 11
* nRF24L01 pin 7 MISO to 12
* nRF24L01 pin 8 IRQ UNUSED
*/
// include the library code:
#include <LiquidCrystal.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
const
uint8_t num_rows = 2;
uint8_t num_cols = 16;
uint8_t scan_wide = (num_rows - 1) * num_cols;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
//
// Hardware configuration
//
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
RF24 radio(2,3);
//
// Channel info
//
const
uint8_t num_channels = 128;
uint8_t grp_size = num_channels / scan_wide;
uint8_t values[num_channels];
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(num_cols, num_rows);
// Print a message to the LCD.
lcd.print("nRF24L01 Scanner");
radio.begin();
radio.setAutoAck(false);
// Get into standby mode
radio.startListening();
radio.stopListening();
}
const int num_reps = 100;
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// Clear measurement values
memset(values,0,sizeof(values));
// Scan all channels num_reps times
int rep_counter = num_reps;
while (rep_counter--)
{
int i = num_channels;
while (i--)
{
// Select this channel
radio.setChannel(i);
// Listen for a little
radio.startListening();
delayMicroseconds(128);
radio.stopListening();
// Did we get a carrier?
if ( radio.testCarrier() )
++values[i];
}
}
// Print out channel measurements, clamped to a single hex digit
int i = 0;
while ( i < num_channels )
{
int group = 0;
for ( int j=0; j < grp_size; j++)
{
group += values[i];
++i;
}
lcd.print(min(0xf,group), HEX);
}
}