In the example sketch,
Updated on Nov. 12, 2014
Use the same DIP setting above, the output will be :
Net ID: 5
Node ID1: 0
Node ID2:10
Photo of Connections
Output
Update Sketch (Nov. 12, 2014)
// Released by abocanegra on Dec. 11, 2009 using 4 pins, "DIP Switch 8 Position to Address Sensor" in Arduino Forum
// Modified by Befun Hung on Jul. 30, 2014 to use
// 3 analog pins(A1-A3) to set net ID
// 8 digital pins(D2-D9) to set Node ID by using 10K pull-up resistors.
// Totally 8x256=2,048 devices can be used for wireless communication
// For practical use 8x10=80 devices can be controlled using digital key of 3x4 telephone keypad
// Modified by Befun Hung on Nov. 12, 2014 to use
// 4 digital pins(D2-D5) to set node ID1 and
// 4 digital pins(D6-D9) to set node ID2 by using 10K pull-up resistors.
// Totally 8x16x16=2,048 devices can be used for wireless communication
// For practical use 8x10x10=800 devices can be controlled using digital key of 3x4 telephone keypad
// Wire and DIP switch connections from high bit to low bit are A1, A2, A3, D2, D3, D4, D5, D6, D7, D8 and D9
// A0 is reserved for analog sensor or digital sensor/actuator
// A4-A5 are reserved for I2C
// D0-D1 are reserved for RX/TX
// D10-D13 are reserved for SPI
//Create and Define Global Variables
int bits=4, netID, nodeID1, nodeID2;
int dipNet[] = {15, 16, 17}; // DIP Switch Pins for Net ID
int dipNode1[] = {2, 3, 4, 5}; // DIP Switch Pins for Node ID1
int dipNode2[] = {6, 7, 8, 9}; // DIP Switch Pins for Node ID2
void setup()
{
Serial.begin(9600);
int i;
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
netID = netAddress();
// delay(100);
Serial.print("Net ID: ");
Serial.println(netID);
for(i = 0; i<bits; i++){
pinMode(dipNode1[i], INPUT); // sets the digital pin 2-5 as input
}
nodeID1 = node1Address(bits);
// delay(100);
Serial.print("Node ID1: ");
Serial.println(nodeID1);
for(i = 0; i<bits; i++){
pinMode(dipNode2[i], INPUT); // sets the digital pin 2-5 as input
}
nodeID2 = node2Address(bits);
// delay(100);
Serial.print("Node ID2: ");
Serial.println(nodeID2);
}
void loop()
{
}
//Create Net Address from DIP Switch (3 positions used A1-A3)
byte netAddress(){
int i,j=0;
//Get the switches state
j = (j << 1) | (! digitalRead(A1)); // read the input pin
j = (j << 1) | (! digitalRead(A2)); // read the input pin
j = (j << 1) | (! digitalRead(A3)); // read the input pin
return j; //return address
}
//Create Node1 Address from DIP Switch (4 positions used D2-D5)
byte node1Address(int k){
int i,j=0;
//Get the switches state
for(i=0; i<k; i++){
j = (j << 1) | (! digitalRead(dipNode1[i])); // read the input pin
}
return j; //return address
}
//Create Node1 Address from DIP Switch (4 positions used D6-D9)
byte node2Address(int k){
int i,j=0;
//Get the switches state
for(i=0; i<k; i++){
j = (j << 1) | (! digitalRead(dipNode2[i])); // read the input pin
}
return j; //return address
}
Sketch
// Released by abocanegra on Dec. 11, 2009 using 4 pins, "DIP Switch 8 Position to Address Sensor" in Arduino Forum
// Modified by Befun Hung on Jul. 30, 2014 to use 3 analog pins(A1-A3) to set net ID and 8 digital pins(D2-D9) to set node ID by using 10K pull-up resistors.
// Totally 8x256=2,048 devices can be used for wireless communication
// A0 is reserved for analog sensor or digital sensor/actuator
// A4-A5 are reserved for I2C
// D0-D1 are reserved for RX/TX
// D10-D13 are reserved for SPI
//Create and Define Global Variables
int bits=8, netID, nodeID;
int dipNet[] = {15, 16, 17}; //DIP Switch Pins for Net ID
int dipNode[] = {2, 3, 4, 5, 6, 7, 8, 9}; //DIP Switch Pins for Node ID
void setup()
{
Serial.begin(9600);
int i;
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
netID = netAddress();
// delay(100);
Serial.print("Net ID: ");
Serial.println(netID);
for(i = 0; i<bits; i++){
pinMode(dipNode[i], INPUT); // sets the digital pin 2-9 as input
}
nodeID = nodeAddress(bits);
// delay(100);
Serial.print("Node ID: ");
Serial.println(nodeID);
}
void loop()
{
}
//Create Net Address from DIP Switch (3 positions used)
byte netAddress(){
int i,j=0;
//Get the switches state
j = (j << 1) | (! digitalRead(A1)); // read the input pin
j = (j << 1) | (! digitalRead(A2)); // read the input pin
j = (j << 1) | (! digitalRead(A3)); // read the input pin
return j; //return address
}
//Create Node Address from DIP Switch (8 positions used D2 - D9)
byte nodeAddress(int k){
int i,j=0;
//Get the switches state
for(i=0; i<k; i++){
j = (j << 1) | (! digitalRead(dipNode[i])); // read the input pin
}
return j; //return address
}