NodeSwitch™ part 6: NodeSwitch™ jumper locations - control blind motors, curtain motors, LED lights and relays with the same remote

NodeSwitch™ part 6: NodeSwitch™ jumper locations - control blind motors, curtain motors, LED lights and relays with the same remote

NodeSwitch™ LED and DC Motor Controller: Background

Please Note: This page is here for legacy purposes only. This equipment has been replaced by our new educational ESP32 Micropython kit, with a programmable low voltage relay module that has almost unlimited capabilities.

The NodeSwitch™ RN-12v-10w-0 unit is an Arduino compatible RF remote control LED companion controller for our radio equipped blind, shade and cutain motors. The optional MiniMight™ reversing motor controller can be used to operate other devices that have a reversible 12v DC motor, such as our motorized window and skylight openers.

As previously discussed (see article series links at bottom), the NodeSwitch™ controller can be easily re-programmed to behave in different ways, simply by sending a text file through the USB port of your PC to the Arduino microrocessor onboard the NodeSwitch™ unit.

In Part 6 we examined the jumper locations on the Arduino motherboard. In this article, we will take a look at the jumper settings for J5 and J6 that can be used to control the program execution by having the software detect the jumper positions.

The NodeSwitch™ controller (with on-board Arduino) is available in our online store

Identifying the Jumper Locations

All the jumpers have 3 poles (pins) except J2. Here is a photograph of the motherboard showing the jumper locations:

identifying the jumpers that control the Arduino program flow

Program Flow Control: Jumpers J5, J6

The picture below is a close-up of the NodeSwitch™ motherboard jumpers J5 and J6, showing how the jumper blocks connect the center pin of the 3 pole header to either of the other pins.

close-up view of jumpers that control the Arduino program execution

The center pins of J5 and J6 are connected to the Arduino microprocessor, and the position of these jumpers can be used to control conditional branching code constructs (in the software) to make the program execute different procedures.

For instance, we have a test mode that operates 2 motors in both directions at boot time, as well as fading up the LED dimmer system. If you haven't overwritten the default program it ships with, the motor test mode can be invoked by connecting pins 2 and 3 on J5 with a jumper (see MT - motor test in the truth table below). It doesn't matter what you do with J6 (with regards to the motor test).

Another option used by the default program is the ability to turn the LED dimmer output into a simple 12v ON/OFF switch. The PWM (Pulse Width Modulation) output normally fades a LED lighting system up and down (or controls the speed of a motor), but if you put a jumper connecting pins 1-2 on J6, the PWM output of Arduino pin D9 is turned into a simple ON/OFF switched output, providing 12 volts to drive a device such as a relay, motor, or light (see DM - dimmer mode in the truth table below).

Analog Inputs: Understanding the Arduino Analog-to-Digital Converter

We live in an analog world with continuously varying parameters such as temperature and light levels that are sensed by our human receptors. Breaking down these analog values into digital form for processing is the job description for the on-board analog-to-digital input converter. The PWM output is the opposite of this, it converts digital pulses into an analog stream.

Here is the Arduino nano V3 board layout, showing the ports discussed in this article. This is the same board you see plugged into the main headers right above J5 and J6 jumpers in the picture above: Arduino Nano V3 port layout and identification

As mentioned, the center pin of each jumper block is connected to a separate analog input on the Nano board, designated as port A6 (jumper J6) and port A7 (jumper J5). One of the outside pins is connected to the +5v regulated power supply, and the other is connected to ground. Thus the analog ports can be made to read +5v (connected to +5v) or 0v (connected to ground), just by moving the jumpers. If the center pin is disconnected, the line to the microprocessor will pick up noise and read somewhere in between.

The Arduino processor contains an onboard 6 channel analog-to-digital (A/D) converter. The converter has 10 bit resolution, returning integers from 0 to 1023. The main function of the analog pins for most Arduino users is to read analog sensors, such as temperature and light intensity, but 4 of the analog pins also have all the functionality of general purpose input/output (GPIO) pins (the same as digital pins 0 - 13). Only A6 and A7 are purely analog and cannot be used as digital GPIO ports.

Please note that the analog inputs divide the input voltage into 1023 discrete readings, with +5v being read as the highest value. We'll cover this in detail in the next section below.

The following table illustrates the 13 possibilities for J5 and J6 jumper settings:

J5 Pin 1-2J5 Pin 2-3J6 Pin 1-2J6 Pin 2-3
offoffoffoff
onoffoffoff
onoffonoff
onoffoffon
offonoffoff
offononoff
offon (MT)offon
offoffon (DM)off
onoffonoff
offononoff
offoffoffon
onoffoffon
offonoffon

MT - DC Motor Test at boot time: 2 channel DC motor reversing test
DM - Dimmer Mode set at boot time: PWM dimmer output or on/off switching
(if using default factory program)

Here's a screen capture showing how the factory default program detects the jumper settings. First, at the very beginning of the code in the initialization area, we assign the analog ports A6, A7 to a variable, and create another pair of variables to read the values (see highlighted section):

Arduino code variables used to configure and read analog inputs

Then those variables are used to read the analog port values during the setup phase:

programSet1 = analogRead(programPort1);
programSet2 = analogRead(programPort2);

There were 2 additional true/false (boolean) variables used by the program flow system created in the initialization phase:

boolean test_mode = false;
boolean dim_mode = true;

These variables are used in the setup section and main loop to direct program execution. In the next picture we have captured that section of the code by scrolling further down the page in the Arduino IDE:

Arduino code that detects NodeSwitch™ program flow jumpers

Note that we take anything over 1020 as meaning that we are seeing 5v on the input line; this is just to allow a little 'wriggle room' in case the regulated power supply voltage dips for some reason. If you want it to be precise, then make this change:

if ( programSet1 > 1020 ) {

CHANGE TO

if ( programSet1 == 1023 ) {

We'll show how the test_mode variable is used in the article coming up about motor control, and we'll cover the dim_mode variable in the PWM LED output article. In the next article, we will cover the use of the "auto off" jumper.

The NodeSwitch™ controller is available in our online store

NodeSwitch™ Instructions Index:

Part 1: LED/Motor Controller: Introduction

Part 2: LED/Motor/Relay Controller: Basic Operation

Part 3: LED/Motor/Relay Controller: Advanced Operation: Arduino IDE Editor

Part 4: LED/Motor/Relay Controller: Advanced Operation: Arduino Programming System

Part 5: LED/Motor/Relay Controller: Advanced Operation: Program Code Structure

Part 6: LED/Motor/Relay Controller: Advanced Operation: Jumper Locations

Part 7: LED/Motor/Relay Controller: Advanced Operation: Control Program Flow (you are here)

Additional Resources:

Window Opener & Skylight Opener: Operating and Connection Info for our Chain Actuators

We sincerely hope you enjoy using these advanced motors; if you have any questions, please feel free to contact us at any time!