Wireless Communication On The Power Breadboard
Building the Wireless Communication on the Power Breadboard provided many benefits. One of them is the ability to tap into a stable power source. We will also improve the original code by adding some cool features on the receiver end so wait for the surprise! Finally, we will use jumper wires to make all the connections to all the components together to archive a clean and neat finish.

Part List
- 2 Arduino
- 2 nRF24 Radio Modules
- 2 nRF 24 Breakout Boards
- Power Breadboard
- LEDs
- Jumper Wire
What is the nRF24 communication module?
One of the biggest benefits of the nRF24 is that the board can act as a dual-purpose device, where the nRF24 can turn an Arduino to be a transmitter and receiver. What this means is, that an Arduino can receive data and pass it on through a large network
This opens up the possibility of projects due to the flexibility of the board. Circuit Specialists want to change the norm of expensive communication hardware, that is what this project is all about, low cost and easy access.
How to Solder Header Pins?
There are a couple of tricks you can use to ensure a clean soldering job. The header pins will help connect the Arduino to the power breadboard so you want to make sure not to burn it and cause a loose connection.
How to Solder Extention Pins to Header Pins?
The nRF24 breakout board would need to add some extension pins so to the exiting harder pins because we want the board to be able to plug into the power beadboard PBB-272C.
Wiring: ( same for transmitter and receiver)
- VCC – 3.3V
- GND – GND
- CE – pin 9
- CSN – pin10
- SDK – pin 13
- MOSI – pin 11
- MISO – pin 12
The Code
The nRF24 breakout board is optional, it would keep the power to the nRF24 radio module constant and provide a better connection. If you decide to go with the nRF24 breakout board, the wiring will be the same however now you can supply it with 5V.
The code would be simple and straightforward when you press the switch button, the receiver reads the signal and turns on the LED.
The Transmitter code:
/*
-----------------Note----------------------
Date: 06-28-2022
Project Name:
Goal: Advance Radio_Module_Transmitter testing
Author: Khang Nguyen
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
const int T_Button = 2;
const int ledPin = 7;
int buttonState = 0;
struct Data_Package
{
byte L_Switch;
byte R_Switch;
byte Knob_Value;
};
Data_Package data;
void setup()
{
pinMode(ledPin, OUTPUT);
Tranmitter_Setup();
}
void loop()
{
delay(5);
radio.stopListening();
/*
int angleValue = 232;
radio.write(&angleValue, sizeof(angleValue));
*/
buttonState = digitalRead(T_Button);
radio.write(&buttonState, sizeof(buttonState));
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
delay(5);
}
void Tranmitter_Setup()
{
radio.begin();
radio.openWritingPipe(address);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
}
The receiver code:
/*
-----------------Note----------------------
Date: 06-28-2022
Project Name:
Goal: Advance Radio_Module_Reciver testing
Author: Khang Nguyen
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
boolean buttonState = 0;
int data_T;
//int LED = 2;
const int RedLED=2; //(Nano D6) uno pin 6
const int WhiteLED=3; //(Nano D7) uno pin 7
const int BlueLED=4;
const int BuzzerPin=5;
unsigned long lastReceiveTime = 0;
unsigned long currentTime = 0;
unsigned long previousMillis = 0;
const long interval = 100;
void setup()
{
Reciever_Setup();
Serial.begin(9600);
pinMode(RedLED, OUTPUT); //LED configured as output
pinMode(WhiteLED, OUTPUT); //LED configured as output
pinMode(BlueLED, OUTPUT); //LED configured as output
pinMode(BuzzerPin, OUTPUT); //Buzzer configured as output
}
void loop()
{
delay(5);
radio.startListening();
if ( radio.available())
{
while (radio.available())
{
/* int angleV = 0;
radio.read(&angleV, sizeof(angleV));
Serial.print("angleV");Serial.println(angleV);*/
radio.read(&buttonState, sizeof(buttonState));
if (buttonState == HIGH) {
Serial.println("Button Press!");
USNationalAnthem();
//digitalWrite(LED, HIGH);
}
else
{
//digitalWrite(LED, LOW);
}
}
delay(5);
}
}
The Bonus Code
This part of the code would make the buzzer play the National Anthem
void Reciever_Setup()
{
radio.begin();
radio.openReadingPipe(0, address);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.startListening(); // Set the module as receiver
}
int n=1000; //declaring the integer this value will change with each song
int DurationOn=n; //declaing integer for later on will be used in stacatto calculations
int DurationRest=n; //declaing integer for later on will be used in stacatto calculations
//sum of x & y should be 1 I have more notes on this later on
float x=.66; //declaring float for time on
float y=.34; //declaring float for time off
//rate at which lights randomly flash while waiting button input
int Twinkle_Rate=250; //note that if increased drastically buttons may not respond 100% of the time
//lower twinkle rate improves button press response
int Note1=233; //3Bb 233Hz
int Note2=294; //4D 294Hz
int Note3=330; //4E 330Hz
int Note4=349; //4F 349Hz
int Note5=392; //4G 392Hz
int Note6=440; //4A 440Hz
int Note7=466; //4Bb 466Hz
int Note8=523; //5C 523Hz
int Note9=587; //5D 587Hz
int Note10=622; //5Eb 622Hz
int Note11=698; //5F 698Hz
//**************************************************************SingleDW function
void SingleDWwithNote(int HZ, int TurnOn, int Duration, int Staccato){
//Hertz at which note is (references Note#)
//turn on= pin (red/white/blue LED) that will be tuned on
//duration is for how long
//Staccato 1=yes, 0=no results in slightly shortened note, or a high int x value as just a brief pause
if (Staccato==1){DurationOn=Duration*x;} //how long tone & lights are on is DurationShort
else if (Staccato==0){DurationOn=Duration;}
digitalWrite(TurnOn, HIGH);
tone(BuzzerPin, HZ, DurationOn);
delay(DurationOn);
digitalWrite(TurnOn, LOW);
if (Staccato==1) {
DurationRest=Duration*y;
delay(DurationRest);
}
}
void USNationalAnthem(){
n=577; //rate at which sound plays calulated from: 60,000 (ms/BPM factor) / 104 BPM = 577 ms
/*
quarter note value is n
half note value in n*2
eighth notes it n/2
dotted eights note is n*3/4
*/
//x & y integers are for staccato/adding rest after a note
//note that x+y must =1 or the int. n rate will be thrown off
//decrease x and increase y though to make the notes more pronouced and jumpy/upbeat
x=.92; //true stacatio is about 1/2 or 2/3 value so x value around .5 to .7 for a true staccato
y=.08; //1.00-.92(x value) =.08
//bars 1-5, lines 1
SingleDWwithNote(Note4, RedLED, n*3/4, 1);
SingleDWwithNote(Note2, WhiteLED, n/4, 1);
SingleDWwithNote(Note1, RedLED, n, 1);
SingleDWwithNote(Note2, WhiteLED, n, 1);
SingleDWwithNote(Note4, RedLED, n, 1);
SingleDWwithNote(Note7, WhiteLED, n*2, 1);
SingleDWwithNote(Note9, BlueLED, n*3/4, 1);
SingleDWwithNote(Note8, WhiteLED, n/4, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note2, WhiteLED, n, 1);
SingleDWwithNote(Note3, BlueLED, n, 1);
SingleDWwithNote(Note4, RedLED, n*2, 1);
SingleDWwithNote(Note4, RedLED, n/2, 1);
SingleDWwithNote(Note4, RedLED, n/2, 1);
//bar6-9 line 2
SingleDWwithNote(Note9, BlueLED, n*3/2, 1);
SingleDWwithNote(Note8, WhiteLED, n/2, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note6, BlueLED, n*2, 1);
SingleDWwithNote(Note5, WhiteLED, n/2, 1);
SingleDWwithNote(Note6, BlueLED, n/2, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note4, BlueLED, n, 1);
SingleDWwithNote(Note2, WhiteLED, n, 1);
SingleDWwithNote(Note1, BlueLED, n, 1);
SingleDWwithNote(Note4, RedLED, n*3/4, 1);
SingleDWwithNote(Note2, WhiteLED, n/4, 1);
//bars 10-13 line 3
SingleDWwithNote(Note1, RedLED, n, 1);
SingleDWwithNote(Note2, WhiteLED, n, 1);
SingleDWwithNote(Note4, RedLED, n, 1);
SingleDWwithNote(Note7, WhiteLED, n*2, 1);
SingleDWwithNote(Note9, BlueLED, n*3/4, 1);
SingleDWwithNote(Note8, WhiteLED, n/4, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note2, WhiteLED, n, 1);
SingleDWwithNote(Note3, BlueLED, n, 1);
SingleDWwithNote(Note4, RedLED, n*2, 1);
SingleDWwithNote(Note4, RedLED, n/2, 1);
SingleDWwithNote(Note4, RedLED, n/2, 1);
//bar 14-17, line 4, end of page 1
SingleDWwithNote(Note9, BlueLED, n*3/2, 1);
SingleDWwithNote(Note8, WhiteLED, n/2, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note6, BlueLED, n*2, 1);
SingleDWwithNote(Note5, WhiteLED, n/2, 1);
SingleDWwithNote(Note6, BlueLED, n/2, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note4, BlueLED, n, 1);
SingleDWwithNote(Note2, WhiteLED, n, 1);
SingleDWwithNote(Note1, RedLED, n, 1);
SingleDWwithNote(Note9, BlueLED, n/2, 1);
SingleDWwithNote(Note9, BlueLED, n/2, 1);
//bars 18-21, line 5, start of page 2
SingleDWwithNote(Note9, BlueLED, n, 1);
SingleDWwithNote(Note10, RedLED, n, 1);
SingleDWwithNote(Note11, WhiteLED, n, 1);
SingleDWwithNote(Note11, WhiteLED, n*2, 1);
SingleDWwithNote(Note10, RedLED, n/2, 1);
SingleDWwithNote(Note9, BlueLED, n/2, 1);
SingleDWwithNote(Note8, WhiteLED, n, 1);
SingleDWwithNote(Note9, BlueLED, n, 1);
SingleDWwithNote(Note10, RedLED, n, 1);
SingleDWwithNote(Note10, RedLED, n*2, 1);
SingleDWwithNote(Note10, RedLED, n, 1);
//bars 22-25, line 6
SingleDWwithNote(Note9, WhiteLED, n*3/2, 1);
SingleDWwithNote(Note8, BlueLED, n/2, 1);
SingleDWwithNote(Note7, WhiteLED, n, 1);
SingleDWwithNote(Note6, RedLED, n*2, 1);
SingleDWwithNote(Note5, BlueLED, n/2, 1);
SingleDWwithNote(Note6, RedLED, n/2, 1);
SingleDWwithNote(Note7, WhiteLED, n, 1);
SingleDWwithNote(Note2, BlueLED, n, 1);
SingleDWwithNote(Note3, RedLED, n, 1);
SingleDWwithNote(Note4, WhiteLED, n*2, 1);
SingleDWwithNote(Note4, RedLED, n, 1);
n=n*1.08; //60,000 / 96 bpm= 625 ms; just a slight retard
//bars 26-28, line 7
SingleDWwithNote(Note7, WhiteLED, n, 1);
SingleDWwithNote(Note7, WhiteLED, n, 1);
SingleDWwithNote(Note7, WhiteLED, n/2, 1);
SingleDWwithNote(Note6, BlueLED, n/2, 1);
SingleDWwithNote(Note5, RedLED, n, 1);
SingleDWwithNote(Note5, RedLED, n, 1);
SingleDWwithNote(Note5, RedLED, n, 1);
SingleDWwithNote(Note8, WhiteLED, n, 1);
SingleDWwithNote(Note10, RedLED, n/2, 1);
SingleDWwithNote(Note9, BlueLED, n/2, 1);
SingleDWwithNote(Note8, WhiteLED, n/2, 1);
SingleDWwithNote(Note7, RedLED, n/2, 1);
//bars 29-30
SingleDWwithNote(Note7, RedLED, n, 1);
SingleDWwithNote(Note6, BlueLED, n*2, 1); //2x for holding
SingleDWwithNote(Note4, RedLED, n/2, 1);
SingleDWwithNote(Note4, RedLED, n/2, 1);
SingleDWwithNote(Note7, BlueLED, n*3/2, 1);
SingleDWwithNote(Note8, WhiteLED, n/2, 1);
SingleDWwithNote(Note9, BlueLED, n/2, 1);
SingleDWwithNote(Note10, RedLED, n/2, 1);
n=n*1.2; //large retard
//bars 31-34 end of song
SingleDWwithNote(Note11, WhiteLED, n*2, 1); //extra hold on free
SingleDWwithNote(Note7, RedLED, n/2, 1);
SingleDWwithNote(Note8, WhiteLED, n/2, 1);
SingleDWwithNote(Note9, BlueLED, n*3/2, 1);
SingleDWwithNote(Note10, RedLED, n/2, 1);
SingleDWwithNote(Note8, WhiteLED, n, 1);
SingleDWwithNote(Note7, RedLED, n*3, 1); //only holding for 3 values
//rasie all notes by 3 steps
//1.06 derived from music theory. Take a note in hertz and then divide by the
//note below it (sharps and flats count as a note) all round to 1.06
//You can delete this next paragraph to avoid frequency changes or change it up if you want
Note1=Note1*1.06*1.06*1.06;
Note2=Note2*1.06*1.06*1.06;
Note3=Note3*1.06*1.06*1.06;
Note4=Note4*1.06*1.06*1.06;
Note5=Note5*1.06*1.06*1.06;
Note6=Note6*1.06*1.06*1.06;
Note7=Note7*1.06*1.06*1.06;
Note8=Note8*1.06*1.06*1.06;
Note9=Note9*1.06*1.06*1.06;
Note10=Note10*1.06*1.06*1.06;
Note11=Note11*1.06*1.06*1.06;
buttonState == LOW;
}
Check out the video from the link for audio: https://youtube.com/shorts/RZmgAKUz0MU
Conclusion
The Wireless Communication Network Developer (WCND) kit has been covered before here in our Maker Pit. However, building Wireless Communication on the Power Breadboard provided many benefits. Firstly, use the Power Breadboard PBB-272C to make the archive a clean look upon finish. Secondly, the ability to tap into the power source anywhere on the boards. Moreover, we also want to celebrate the Fourth of July by programming the National Anthem when the button is triggered.
The post Wireless Communication On The Power Breadboard appeared first on Simply Smarter Circuitry Blog.