RGB controller for two LED strips on Arduino NANO

28.01.2025 11 minutes Author: Lady Liberty

In this article, you will learn how to create an RGB controller for two LED strips based on Arduino NANO. The article explains step-by-step the process of assembly, connecting components, and configuring the software.

RGB controller for 2 LED strips based on Arduino NANO

For those who plan to create an RGB controller with two RGB channels, which allows you to connect up to 110 meters of LED RGB strip to each channel with the ability to configure individual operating algorithms.

For this you will need:

  • Arduino NANO board.

  • Two twelve-volt RGB strips.

  • Button and 1-10 kilohm resistor.

  • 6 T40N03G mosfet transistors or any other N-channel transistors that are suitable in power.

  • To assemble the device, I also use a breadboard and connecting wires, you can solder everything immediately if you wish.

//Start sketch

#define Red1 3
#define Green1 5
#define Blue1 6
#define Red2 9
#define Green2 10
#define Blue2 11

int r = 0, g = 0, b = 0, sensorVal, x = 8, i = 0, j = 0, SpeedR;
int Speed1 = 5, Speed2 = 5, Speed3 = 5, Speed4 = 5, Speed5 = 5, Speed6 = 5, Speed7 = 5;
int Random1, Random2, Random3, Random4, Random5, Random6;

void setup() {
  pinMode(Red1, OUTPUT); pinMode(Green1, OUTPUT);
  pinMode(Blue1, OUTPUT); pinMode(Red2, OUTPUT);
  pinMode(Green2, OUTPUT); pinMode(Blue2, OUTPUT);
  pinMode(2, INPUT_PULLUP); //подключение кнопки к pin 2
}

void button2() {
  sensorVal = digitalRead(2); if (sensorVal == HIGH) {
    delay(500); i++; if (i > x) {
      i = 0;
    }
  }
}

void offRGB() {
  digitalWrite(Red1, LOW); digitalWrite(Green2, LOW);
  digitalWrite(Blue1, LOW); digitalWrite(Red2, LOW);
  digitalWrite(Green1, LOW); digitalWrite(Blue2, LOW);
  r = 0, g = 0, b = 0;
}

void program1() {
  if (i == 1) {
    while (r < 256) {
      analogWrite(Red1, r); analogWrite(Red2, r); delay(Speed1);
      sensorVal = digitalRead(2); r++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 1) {
    while (b > 0) {
      analogWrite(Blue1, b); analogWrite(Blue2, b); delay(Speed1);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } b--;
    }
  }
  if (i == 1) {
    while (g < 255) {
      analogWrite(Green1, g); analogWrite(Green2, g); delay(Speed1);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g++;
    }
  }
  if (i == 1) {
    while (r > 0) {
      analogWrite(Red1, r); analogWrite(Red2, r); delay(Speed1);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } r--;
    }
  }
  if (i == 1) {
    while (b < 256) {
      analogWrite(Blue1, b); analogWrite(Blue2, b); delay(Speed1);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } b++;
    }
  }
  if (i == 1) {
    while (g > 0) {
      analogWrite(Green1, g); analogWrite(Green2, g); delay(Speed1);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g--;
    }
  }
}

void program2() {
  if (i == 2) {
    while (r < 255) {
      analogWrite(Red1, r); analogWrite(Red2, r); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } r++;
    }
  }
  if (i == 2) {
    while (r > 0) {
      analogWrite(Red1, r); analogWrite(Red2, r); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } r--;
    }
  }
  if (i == 2) {
    while (r < 255) {
      analogWrite(Red1, r); analogWrite(Red2, r);
      analogWrite(Blue1, r); analogWrite(Blue2, r); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } r++;
    }
  }
  if (i == 2) {
    while (r > 0) {
      analogWrite(Red1, r); analogWrite(Red2, r);
      analogWrite(Blue1, r); analogWrite(Blue2, r); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } r--;
    }
  }
  if (i == 2) {
    while (b < 256) {
      analogWrite(Blue1, b); analogWrite(Blue2, b); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } b++;
    }
  }
  if (i == 2) {
    while (b > 0) {
      analogWrite(Blue1, b); analogWrite(Blue2, b); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } b--;
    }
  }
  if (i == 2) {
    while (b < 256) {
      analogWrite(Blue1, b); analogWrite(Blue2, b);
      analogWrite(Green1, b); analogWrite(Green2, b); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } b++;
    }
  }
  if (i == 2) {
    while (b > 0) {
      analogWrite(Blue1, b); analogWrite(Blue2, b);
      analogWrite(Green1, b); analogWrite(Green2, b); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } b--;
    }
  }
  if (i == 2) {
    while (g < 255) {
      analogWrite(Green1, g); analogWrite(Green2, g); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g++;
    }
  }
  if (i == 2) {
    while (g > 0) {
      analogWrite(Green1, g); analogWrite(Green2, g); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g--;
    }
  }
  if (i == 2) {
    while (g < 255) {
      analogWrite(Green1, g); analogWrite(Green2, g);
      analogWrite(Red1, g); analogWrite(Red2, g); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g++;
    }
  }
  if (i == 2) {
    while (g > 0) {
      analogWrite(Green1, g); analogWrite(Green2, g);
      analogWrite(Red1, g); analogWrite(Red2, g); delay(Speed2);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g--;
    }
  }
}

void program3() {
  if (i == 3) {
    while (g < 255) {
      analogWrite(Green1, g); analogWrite(Red2, g);
      analogWrite(Blue1, g); analogWrite(Green2, g);
      analogWrite(Red1, g); analogWrite(Blue2, g); delay(Speed3);
      sensorVal = digitalRead(2); g++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 3) {
    while (g > 0) {
      analogWrite(Green1, g); analogWrite(Red2, g);
      analogWrite(Blue1, g); analogWrite(Green2, g);
      analogWrite(Red1, g); analogWrite(Blue2, g); delay(Speed3);
      sensorVal = digitalRead(2); g--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
}

void program4() {
  b = 255; analogWrite(Blue1, b); analogWrite(Red2, b);
  while (j < 1) {
    if (i == 4 && j < 1) {
      while (r < 256) {
        analogWrite(Red1, r); analogWrite(Green2, r); delay(Speed4);
        sensorVal = digitalRead(2); r++; if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        }
      }
    }
    if (i == 4 && j < 1) {
      while (b > 0) {
        analogWrite(Blue1, b); analogWrite(Red2, b); delay(Speed4);
        sensorVal = digitalRead(2); b--; if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        }
      }
    }
    if (i == 4 && j < 1) {
      while (g < 255) {
        analogWrite(Green1, g); analogWrite(Blue2, g); delay(Speed4);
        sensorVal = digitalRead(2); g++; if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        }
      }
    }
    if (i == 4 && j < 1) {
      while (r > 0) {
        analogWrite(Red1, r); analogWrite(Green2, r); delay(Speed4);
        sensorVal = digitalRead(2); r--; if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        }
      }
    }
    if (i == 4 && j < 1) {
      while (b < 256) {
        analogWrite(Blue1, b); analogWrite(Red2, b); delay(Speed4);
        sensorVal = digitalRead(2); b++; if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        }
      }
    }
    if (i == 4 && j < 1) {
      while (g > 0) {
        analogWrite(Green1, g); analogWrite(Blue2, g); delay(Speed4);
        sensorVal = digitalRead(2); g--; if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        }
      }
    }
  } j = 0;
}

void program5() {
  if (i == 5) {
    while (r < 255) {
      analogWrite(Red1, r); analogWrite(Green2, r); delay(Speed5);
      sensorVal = digitalRead(2); r++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (r > 0) {
      analogWrite(Red1, r); analogWrite(Green2, r); delay(Speed5);
      sensorVal = digitalRead(2); r--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (r < 255) {
      analogWrite(Red1, r); analogWrite(Green2, r);
      analogWrite(Green1, r); analogWrite(Blue2, r); delay(Speed5);
      sensorVal = digitalRead(2); r++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (r > 0) {
      analogWrite(Red1, r); analogWrite(Green2, r);
      analogWrite(Green1, r); analogWrite(Blue2, r); delay(Speed5);
      sensorVal = digitalRead(2); r--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (b < 256) {
      analogWrite(Green1, b); analogWrite(Blue2, b); delay(Speed5);
      sensorVal = digitalRead(2); b++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (b > 0) {
      analogWrite(Green1, b); analogWrite(Blue2, b); delay(Speed5);
      sensorVal = digitalRead(2); b--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (b < 256) {
      analogWrite(Green1, b); analogWrite(Blue2, b);
      analogWrite(Blue1, b); analogWrite(Red2, b); delay(Speed5);
      sensorVal = digitalRead(2); b++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (b > 0) {
      analogWrite(Green1, b); analogWrite(Blue2, b);
      analogWrite(Blue1, b); analogWrite(Red2, b); delay(Speed5);
      sensorVal = digitalRead(2); b--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (g < 255) {
      analogWrite(Blue1, g); analogWrite(Red2, g); delay(Speed5);
      sensorVal = digitalRead(2); g++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (g > 0) {
      analogWrite(Blue1, g); analogWrite(Red2, g); delay(Speed5);
      sensorVal = digitalRead(2); g--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (g < 255) {
      analogWrite(Blue1, g); analogWrite(Red2, g);
      analogWrite(Red1, g); analogWrite(Green2, g); delay(Speed5);
      sensorVal = digitalRead(2); g++; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
  if (i == 5) {
    while (g > 0) {
      analogWrite(Blue1, g); analogWrite(Red2, g);
      analogWrite(Red1, g); analogWrite(Green2, g); delay(Speed5);
      sensorVal = digitalRead(2); g--; if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      }
    }
  }
}

void program6() {
  if (i == 6) {
    while (g < 255) {
      analogWrite(Green1, g); analogWrite(Red2, g);
      analogWrite(Blue1, g); analogWrite(Green2, g);; delay(Speed6);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g++;
    }
  }
  if (i == 6) {
    while (g > 0) {
      analogWrite(Green1, g); analogWrite(Red2, g);
      analogWrite(Blue1, g); analogWrite(Green2, g); delay(Speed6);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g--;
    }
  }
  if (i == 6) {
    while (g < 255) {
      analogWrite(Green1, g); analogWrite(Red2, g);
      analogWrite(Red1, g); analogWrite(Blue2, g); delay(Speed6);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g++;
    }
  }
  if (i == 6) {
    while (g > 0) {
      analogWrite(Green1, g); analogWrite(Red2, g);
      analogWrite(Red1, g); analogWrite(Blue2, g); delay(Speed6);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g--;
    }
  }
  if (i == 6) {
    while (g < 255) {
      analogWrite(Blue1, g); analogWrite(Green2, g);
      analogWrite(Red1, g); analogWrite(Blue2, g); delay(Speed6);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g++;
    }
  }
  if (i == 6) {
    while (g > 0) {
      analogWrite(Blue1, g); analogWrite(Green2, g);
      analogWrite(Red1, g); analogWrite(Blue2, g); delay(Speed6);
      sensorVal = digitalRead(2); if (sensorVal == HIGH) {
        delay(500); i++; offRGB(); if (i > x) {
          i = 0;
        }
      } g--;
    }
  }
}

void program7() {
  while (j < 1) {
    Random1 = random (3, 7); Random4 = random (8, 12);
    Random2 = random (3, 7); Random5 = random (8, 12);
    Random3 = random (3, 7); Random6 = random (8, 12);
    if (i == 7) {
      while (g < 255 && j < 1) {
        analogWrite(Random1, g); analogWrite(Random4, g);
        analogWrite(Random2, g); analogWrite(Random5, g);
        analogWrite(Random3, g); analogWrite(Random6, g); delay(Speed7);
        sensorVal = digitalRead(2); if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        } g++;
      }
    }
    if (i == 7 && j < 1) {
      while (g > 0) {
        analogWrite(Random1, g); analogWrite(Random4, g);
        analogWrite(Random2, g); analogWrite(Random5, g);
        analogWrite(Random3, g); analogWrite(Random6, g); delay(Speed7);
        sensorVal = digitalRead(2); if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        } g--;
      }
    }
  } j = 0;
}

void program8() {
  while (j < 1) {
    Random1 = random (3, 7); Random4 = random (8, 12);
    Random2 = random (3, 7); Random5 = random (8, 12);
    Random3 = random (3, 7); Random6 = random (8, 12);
    SpeedR = random (2, 10);
    if (i == 8 && j < 1) {
      while (g < 255) {
        analogWrite(Random1, g); analogWrite(Random4, g);
        analogWrite(Random2, g); analogWrite(Random5, g);
        analogWrite(Random3, g); analogWrite(Random6, g); delay(SpeedR);
        sensorVal = digitalRead(2); if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        } g++;
      }
    }
    if (i == 8 && j < 1) {
      while (g > 0) {
        analogWrite(Random1, g); analogWrite(Random4, g);
        analogWrite(Random2, g); analogWrite(Random5, g);
        analogWrite(Random3, g); analogWrite(Random6, g); delay(SpeedR);
        sensorVal = digitalRead(2);
        if (sensorVal == HIGH) {
          delay(500); i++; j++; offRGB(); if (i > x) {
            i = 0;
          }
        } g--;
      }
    }
  } j = 0;
}

void loop() {
  button2(); if (i == 0) {
    offRGB();
  }
  
  if (i == 1) {
    program1();
  }
  
  if (i == 2) {
    program2();
  }
  
  if (i == 3) {
    program3();
  }
  
  if (i == 4) {
    program4();
  }
  
  if (i == 5) {
    program5();
  }

  if (i == 6) {
    program6();
  }
  
  if (i == 7) {
    program7();
  }

  if (i == 8) {
    program8();
  }
}

//End of sketch

The sketch implements the following functions:

  • “button2” – function to process button press. If the button is pressed, the next function is executed.

  • “offRGB” – function that turns off RGB channels and resets variables r, g, b.

  • “program1, program2, program3, program4, program5, program6, program7, program8” – functions that contain algorithms for RGB channels.

Опис змінних:

  • Speed1, Speed2, Speed3, Speed4, Speed5, Speed6, Speed7 are variables with a value of 5, which determines the delay. The higher this value, the slower the algorithms are executed, and vice versa.

  • SpeedR = random(2, 10) is a random delay for the “program8” function, where the minimum value is 2 and the maximum is 10.

  • x is a variable that determines the number of modes for RGB. The value 8 corresponds to 9 programs (0, 1, 2, 3, 4, 5, 6, 7, 8), which include: offRGB, program1, program2, program3, program4, program5, program6, program7, program8. For correct operation when changing the number of programs, it is also necessary to change the value of the variable x.

You can customize this sketch however you like. Or just take it as is, upload it to the board, and assemble everything as shown in this diagram.

After assembling the device, 12 volts are supplied. When starting, the zero program with the “offRGB” function is automatically activated, and the strip will not glow. A short press of the button transfers the cycle to the next program: the first press to “program1”, the second to “program2”, and so on. After the eighth press, which activates “program8”, the cycle returns to “offRGB”.

This circuit uses T40N03G MOSFET transistors, which can withstand up to 24 volts and a current of up to 45 amperes. These characteristics allow you to connect up to 220 meters of RGB tape, similar to the one used in the circuit. If the transistors are replaced with other N-channel MOSFETs, it is important to take into account their power and carefully observe the pinout, which may differ from the T40N03G pinout.

Subscribe
Notify of
0 Коментарі
Oldest
Newest Most Voted
Found an error?
If you find an error, take a screenshot and send it to the bot.