Introduction
LED patterns are the "Hello World" of the electronics world, but they are also the best way to master Arduino programming. By moving beyond a simple blink and creating complex sequences, you learn about Arrays, For Loops, and Variable Timing.
In this guide, we will connect 10 LEDs to an Arduino and program 10 different visual patterns—ranging from a simple "Running Light" to a "Siren" effect.
Required Hardware
- Arduino Uno (or Nano)
- 10x LEDs (Any color)
- Breadboard & Jumper Wires
Circuit Connection
Connect the 10 LEDs to Digital Pins 2 through 11 on your Arduino.
- Anode (+): Connect to the Digital Pin 2 - 11.
- Cathode (-): Connect all short legs to the common GND rail.
The Code: 10 Patterns in One Sketch
This code uses a switch-case structure or separate functions to cycle through different patterns. You can change the currentPattern variable to see different results.
CODE
#define delay50 100int myled[] = {2, 3, 4, 5, 6, 7, 8, 9,10,11};int num_of_leds;void setup(){num_of_leds = sizeof(myled) / sizeof(int);for (int i = 0; i < num_of_leds; i++) {pinMode(myled[i], OUTPUT);}}void loop() {delay(50);ledonn();delay(50);ledoff();delay(50);ledonn();delay(50);ledoff();delay(50);ledonn();delay(50);ledoff();delay(500);ledonn();delay(50);ledoff();delay(50);ledonn();delay(50);ledoff();delay(50);ledonn();delay(50);ledoff();delay(50);ledonn();delay(50);ledoff();delay(50);for (int i = 0; i < 5; i++) {pattern1();}for (int i = 0; i < 5; i++) {pattern2();}for (int i = 0; i < 5; i++) {pattern3();}for (int i = 0; i < 5; i++) {pattern4();}for (int i = 0; i < 25; i++){pattern5();}for (int i = 0; i < 5; i++) {pattern6();}for (int i = 0; i < 15; i++){pattern7();}for (int i = 0; i < 15; i++){pattern8();}for (int i = 0; i < 5; i++) {pattern9();}for (int i = 0; i < 5; i++) {pattern10();}for (int i = 0; i < 50; i++){pattern11();}for (int i = 0; i < 50; i++){pattern12();}ledoff();delay(5000);}//TURN ON ALL LEDsvoid ledonn() {for (int i = 0; i < num_of_leds; i++) {digitalWrite(myled[i], HIGH);}}//TURN OFF ALL LEDsvoid ledoff() {for (int i = 0; i < num_of_leds; i++) {digitalWrite(myled[i], LOW);}}//LEFT TO RIGHTvoid pattern1() {for (int i = 0; i < num_of_leds; i++) {digitalWrite(myled[i], HIGH);delay(delay50);digitalWrite(myled[i], LOW);}}//RIGHT TO LEFTvoid pattern2() {for (int i = num_of_leds; i > 0; i--) {digitalWrite(myled[i - 1], HIGH);delay(delay50);digitalWrite(myled[i - 1], LOW);}}//LEFT TO RIGHT FILLvoid pattern3() {for (int i = 0; i < num_of_leds; i++) {digitalWrite(myled[i], HIGH);delay(delay50);}for (int i = num_of_leds; i > 0; i--) {digitalWrite(myled[i - 1], LOW);delay(delay50);}}//RIGHT TO LEFT FILLvoid pattern4() {ledonn();delay(delay50);for (int i = 0; i < num_of_leds; i++) {digitalWrite(myled[i], LOW);delay(delay50);}for (int i = num_of_leds; i > 0; i--) {digitalWrite(myled[i - 1], HIGH);delay(delay50);}ledoff();}//ALTERNATE LEDsvoid pattern5() {for (int i = 0; i < num_of_leds; i = i + 2) {digitalWrite(myled[i], HIGH);digitalWrite(myled[i + 1], LOW);}delay(delay50);for (int i = 0; i < num_of_leds; i = i + 2) {digitalWrite(myled[i], LOW);digitalWrite(myled[i + 1], HIGH);}delay(delay50);}//OSCILLATING LEDsvoid pattern6() { //oscfor (int i = 0; i < num_of_leds; i++) {digitalWrite(myled[i], HIGH);delay(delay50);digitalWrite(myled[i], LOW);}delay(delay50);for (int i = num_of_leds; i > 0; i--) {digitalWrite(myled[i - 1], HIGH);delay(delay50);digitalWrite(myled[i - 1], LOW);}}//INSIDEvoid pattern7() {for (int i = 0; i < num_of_leds / 2; i++) {digitalWrite(myled[i], HIGH);digitalWrite(myled[num_of_leds - 1 - i], HIGH);delay(delay50);digitalWrite(myled[i], LOW);digitalWrite(myled[num_of_leds - 1 - i], LOW);}}//OUTSIDEvoid pattern8(){for (int i = (num_of_leds / 2) - 1; i >= 0 ; i--){digitalWrite(myled[i], HIGH);digitalWrite(myled[num_of_leds - 1 - i], HIGH);delay(delay50);digitalWrite(myled[i], LOW);digitalWrite(myled[num_of_leds - 1 - i], LOW);}}//LEFT TO RIGHT 3 LEDsvoid pattern9() {for (int i = 0; i < num_of_leds + 3; i++) {if (i <= num_of_leds) {digitalWrite(myled[i], HIGH);}if (i > 2) {digitalWrite(myled[i - 3], LOW);}delay(delay50);}}//OSCILLATING 3 LEDsvoid pattern10() {for (int i = 2; i < num_of_leds; i++) {if (i == 2) {digitalWrite(myled[0], HIGH);digitalWrite(myled[1], HIGH);}digitalWrite(myled[i], HIGH);digitalWrite(myled[i - 3], LOW);delay(delay50);}for (int i = num_of_leds - 4; i > -1; i--) {digitalWrite(myled[i], HIGH);digitalWrite(myled[i + 3], LOW);delay(delay50);}}//RANDOM EFFECT 1void pattern11() {int randomnum = random(0, num_of_leds + 1);digitalWrite(myled[randomnum], HIGH);delay(delay50);digitalWrite(myled[randomnum], LOW);delay(delay50);}//RANDOM EFFECT 2void pattern12() {int randomonn = random(0, num_of_leds + 1);int randomoff = random(0, num_of_leds + 1);digitalWrite(myled[randomonn], HIGH);digitalWrite(myled[randomoff], LOW);delay(delay50);}
Troubleshooting Tips
- One LED is not lighting up: Check the polarity. The long leg must face the Arduino pin. Also, ensure the resistor is firmly plugged into the breadboard.
- Pattern is too fast: Increase the value in the
delay()function (e.g., from 100 to 500). - Arduino gets hot: Never connect an LED without a resistor! The resistor limits the current; without it, you can burn out the Arduino’s digital pins.
Conclusion
Mastering these 10 patterns gives you a solid understanding of how to control multiple outputs simultaneously. This logic is the foundation for building LED cubes, scrolling displays, and complex robotics!
.jpg)
إرسال تعليق