🔢 مدار شمارنده با سون‌سگمنت (7-Segment Counter)

شماره‌ی نوبت بانک، تایمر مایکروویو، امتیاز مسابقه و شمارنده‌ی نفرات ورودی همه یک قطعه‌ی مشترک دارند: نمایشگر هفت‌قسمتی یا سون‌سگمنت (7-Segment Display). در این راهنما یک مدار شمارنده کامل با سون‌سگمنت می‌سازیم که با هر فشار دکمه یک عدد جلو می‌رود و بعد از ۹ به ۰ برمی‌گردد. قدم‌به‌قدم می‌فهمیم کاتد مشترک و آند مشترک چه فرقی دارند، کدام سگمنت کدام حرف است (a تا g)، چرا هر سگمنت مقاومت خودش را می‌خواهد و چطور لرزش دکمه را مهار کنیم. بعد کد کامل آردوینو را با جدول رقم‌ها و ضد لرزش می‌نویسیم، ایده‌ی آی‌سی رمزگشای 4511 را می‌بینیم و یاد می‌گیریم با «مالتی‌پلکس» دو رقم را با تعداد کمی پین نشان بدهیم.

سون‌سگمنت چیست؟

سون‌سگمنت در اصل هفت LED باریک است که به‌شکل عدد ۸ کنار هم چیده شده‌اند، به‌علاوه‌ی یک نقطه‌ی اعشار (DP). هر سگمنت یک حرف دارد و این نام‌گذاری در همه‌ی دیتاشیت‌ها یکی است: از بالا شروع می‌شود و در جهت عقربه‌های ساعت می‌چرخد و آخر از همه خط وسط است.

--a--
    |     |
    f     b
    |     |
     --g--
    |     |
    e     c
    |     |
     --d--   (dp)

با روشن و خاموش کردن این هفت سگمنت، همه‌ی رقم‌های ۰ تا ۹ و چند حرف (A، b، C، d، E، F، H، L، P) ساخته می‌شود. تعریف کوتاهش را در واژه‌نامه هم ببین.

کاتد مشترک یا آند مشترک؟ (Common Cathode vs Common Anode)

هفت LED هر کدام دو پایه دارند، ولی نمایشگر فقط ۱۰ پایه دارد. راز کار این است که یک سر همه‌ی LEDها به یک پایه‌ی مشترک (COM) وصل است:

ویژگیکاتد مشترک (CC)آند مشترک (CA)
پایه‌ی مشترک بهمنفی (GND)مثبت (5V)
سگمنت با چه چیزی روشن می‌شودHIGH روی پایه‌ی سگمنتLOW روی پایه‌ی سگمنت
کد رقم ۰ (بیت‌های gfedcba)0x3F0x40 (برعکس همه‌ی بیت‌ها)
مدل رایج تک‌رقمی5161AS5161BS
رمزگشای رایجCD451174LS47

نمایشگر مود آردوینوی شبیه‌ساز کاتد مشترک است و پایه‌ی مشترکش روی بدنه «GND» نوشته شده. در بیشتر نمایشگرهای تک‌رقمی ۱۰ پایه، ترتیب پایه‌ها این است (از جلو، پایه‌ی ۱ پایین چپ؛ با دیتاشیت مدل خودت چک کن):

پایه۱۲۳۴۵۶۷۸۹۱۰
سگمنتedCOMcdpbaCOMfg

تست سریع: منفی دو باتری قلمی (۳ ولت) را به پایه‌ی ۳ و مثبت را از راه یک مقاومت ۳۳۰ اهم به پایه‌ی ۷ بزن. اگر سگمنت a روشن شد، نمایشگر کاتد مشترک است. اگر نه، قطب‌ها را عوض کن؛ اگر حالا روشن شد، آند مشترک است. هیچ‌وقت بدون مقاومت تست نکن.

جدول رقم‌ها: کدام سگمنت برای کدام عدد؟

این جدول قلب هر شمارنده است. در ستون کد، بیت ۰ سگمنت a است و بیت ۶ سگمنت g؛ یعنی کد را از راست به چپ بخوان. برای تبدیل بین دودویی و هگز از مبدل دودویی کمک بگیر.

رقمabcdefgکد کاتد مشترککد آند مشترک
۰۱۱۱۱۱۱۰0x3F0x40
۱۰۱۱۰۰۰۰0x060x79
۲۱۱۰۱۱۰۱0x5B0x24
۳۱۱۱۱۰۰۱0x4F0x30
۴۰۱۱۰۰۱۱0x660x19
۵۱۰۱۱۰۱۱0x6D0x12
۶۱۰۱۱۱۱۱0x7D0x02
۷۱۱۱۰۰۰۰0x070x78
۸۱۱۱۱۱۱۱0x7F0x00
۹۱۱۱۱۰۱۱0x6F0x10

بعضی‌ها رقم ۶ را بدون سگمنت a و رقم ۹ را بدون d می‌نویسند؛ این جدول شکل کامل‌تر و خواناتر را انتخاب کرده است.

قطعه‌های مدار شمارنده

#اسم فارسیEnglishتعداد و مقدارکارش در مدار
۱نمایشگر هفت‌قسمتی7-Segment Display (CC)۱ عدد، کاتد مشترکنمایش رقم
۲مقاومت ۲۲۰ اهم220 Ω Resistor۷ عدد (۸ تا با DP)محدود کردن جریان هر سگمنت
۳کلید فشاریPush Button۲ عددشمارش و صفر کردن
۴آردوینو اونوArduino Uno۱ عددشمردن و تصمیم‌گیری
۵بردبورد و سیم جامپرBreadboard & Jumpers۱ بردبورد نیمهسیم‌کشی بدون لحیم
۶ترانزیستور NPN (برای دو رقم)NPN Transistor۲ عددروشن و خاموش کردن پایه‌ی مشترک هر رقم
۷آی‌سی 4511 (اختیاری)CD4511 BCD Decoder۱ عددکم کردن پین‌ها از ۷ به ۴

چرا هر سگمنت مقاومت خودش را می‌خواهد؟

هر سگمنت یک LED است، پس همان فرمول مقاومت LED را دارد:

R = (Vpin − Vf) ÷ I

برای سون‌سگمنت قرمز با افت ولتاژ حدود ۲ ولت و جریان ۱۵ میلی‌آمپر روی پین ۵ ولتی: R = (5 − 2) ÷ 0.015 = 200 Ω. نزدیک‌ترین مقدار استاندارد بالاتر، ۲۲۰ اهم است و جریان هر سگمنت 3 ÷ 220 ≈ 13.6 mA می‌شود؛ کمتر از ۲۰ میلی‌آمپر توصیه‌شده‌ی هر پین.

جریان کل: رقم ۸ هفت سگمنت روشن دارد، یعنی 7 × 13.6 ≈ 95 mA که همه از پایه‌ی COM به GND برمی‌گردد. این عدد برای آردوینو اونو قابل‌تحمل است (سقف کل تراشه حدود ۲۰۰ میلی‌آمپر است)، ولی نشان می‌دهد چرا نباید مقاومت را کمتر از ۲۲۰ اهم بگذاری.

چرا یک مقاومت روی COM نه؟ وسوسه‌انگیز است: یک مقاومت به‌جای هفت تا. ولی آن وقت جریان ثابت آن یک مقاومت بین سگمنت‌های روشن تقسیم می‌شود: رقم ۱ با دو سگمنت پرنور است و رقم ۸ با هفت سگمنت کم‌نور، و چون LEDها کاملاً یکسان نیستند، بعضی سگمنت‌ها از بقیه پرنورتر می‌شوند. در مود ساده‌ی شبیه‌ساز، نمایشگر هفت‌قسمتی فقط دو پایه‌ی مثبت و منفی دارد و هر هفت سگمنت را با هم روشن می‌کند (رقم ۸)؛ پروژه‌ی نمایشگر هفت‌قسمتی (7-segment display) همین را با یک باتری و یک مقاومت نشان می‌دهد. برای ساختن رقم‌های مختلف، به مود آردوینو برو.

شمارنده‌ی ۰ تا ۹ با دکمه و آردوینو

سیم‌کشی همان چیدمان درس شمارنده‌ی دکمه‌ای شبیه‌ساز است: سگمنت‌های a تا g روی پین‌های ۳ تا ۹ و دکمه روی پین ۲. یک دکمه‌ی دوم برای صفر کردن هم اضافه کرده‌ایم.

قطعهپایهوصل به
سگمنت aاز راه مقاومت ۲۲۰ اهمپین ۳
سگمنت bاز راه مقاومت ۲۲۰ اهمپین ۴
سگمنت cاز راه مقاومت ۲۲۰ اهمپین ۵
سگمنت dاز راه مقاومت ۲۲۰ اهمپین ۶
سگمنت eاز راه مقاومت ۲۲۰ اهمپین ۷
سگمنت fاز راه مقاومت ۲۲۰ اهمپین ۸
سگمنت gاز راه مقاومت ۲۲۰ اهمپین ۹
COM (کاتد مشترک)—GND
دکمه‌ی شمارشدو پایه‌ی قطریپین ۲ و GND
دکمه‌ی صفردو پایه‌ی قطریپین ۱۱ و GND

دکمه‌ها مقاومت بیرونی ندارند، چون INPUT_PULLUP مقاومت بالاکش داخلی را روشن می‌کند: دکمه‌ی رها HIGH و دکمه‌ی فشرده LOW خوانده می‌شود. پین‌های ۰ و ۱ را عمداً خالی گذاشته‌ایم چون مال سریال و آپلودند.

// مدار شمارنده با سون‌سگمنت (7-Segment Counter) — آردوینو اونو
// a تا g روی پین‌های 3 تا 9، هر کدام با مقاومت 220 اهم؛ COM به GND
// دکمه‌ی شمارش بین پین 2 و GND؛ دکمه‌ی صفر بین پین 11 و GND
const int SEG_PINS[7] = {3, 4, 5, 6, 7, 8, 9};   // a b c d e f g
const int COUNT_BTN = 2;
const int RESET_BTN = 11;
const bool COMMON_ANODE = false;   // نمایشگر آند مشترک: true و COM به 5V

// بیت 0 = a ... بیت 6 = g (کد کاتد مشترک)
const byte DIGITS[10] = {
  0x3F,  // 0
  0x06,  // 1
  0x5B,  // 2
  0x4F,  // 3
  0x66,  // 4
  0x6D,  // 5
  0x7D,  // 6
  0x07,  // 7
  0x7F,  // 8
  0x6F   // 9
};

const unsigned long DEBOUNCE_MS = 30;
int count = 0;
int lastReading = HIGH;
int stableState = HIGH;
unsigned long lastChange = 0;

void showDigit(int n) {
  byte pattern = DIGITS[n];
  for (int i = 0; i < 7; i++) {
    bool on = (pattern >> i) & 1;
    if (COMMON_ANODE) on = !on;
    digitalWrite(SEG_PINS[i], on ? HIGH : LOW);
  }
}

void setup() {
  for (int i = 0; i < 7; i++) pinMode(SEG_PINS[i], OUTPUT);
  pinMode(COUNT_BTN, INPUT_PULLUP);
  pinMode(RESET_BTN, INPUT_PULLUP);
  Serial.begin(9600);
  showDigit(count);
}

void loop() {
  int reading = digitalRead(COUNT_BTN);
  if (reading != lastReading) {          // لبه یا لرزش: زمان را ثبت کن
    lastChange = millis();
    lastReading = reading;
  }
  if (millis() - lastChange > DEBOUNCE_MS && reading != stableState) {
    stableState = reading;
    if (stableState == LOW) {            // فقط لحظه‌ی فشردن
      count = (count + 1) % 10;          // بعد از 9 برگرد به 0
      showDigit(count);
      Serial.print("shomare: ");
      Serial.println(count);
    }
  }
  if (digitalRead(RESET_BTN) == LOW && count != 0) {
    count = 0;                           // دکمه‌ی صفر
    showDigit(count);
    Serial.println("sefr shod");
  }
}

کد چطور کار می‌کند؟

ساخت شمارنده در شبیه‌ساز تینکرکد فارسی

این بخش در مود «آردوینو» ساخته می‌شود که برای حدود ۱۰ سال به بالا مناسب است؛ آردوینو اونو و نمایشگر هفت‌قسمتی رایگان‌اند.

  1. اول یک رقم: درس رقم روی سون‌سگمنت جدول سگمنت‌ها را می‌سازد. نمونه‌ی آماده‌ی سون‌سگمنت (Seven-segment) رقم‌های ۰ تا ۹ را خودکار می‌شمارد؛ در آن سگمنت‌های a تا g روی پین‌های ۲ تا ۸ و COM روی GND است و هر سگمنت مقاومت ۲۲۰ اهمی خودش را دارد.
  2. بعد دکمه: درس شمارنده‌ی دکمه‌ای از یک باگ واقعی شروع می‌کند (یک فشار، سه شماره!)، بعد تشخیص لبه و عملگر % را یاد می‌دهد و در آخر چالش «دکمه‌ی صفر کردن» را می‌دهد؛ همان چیزی که کد بالا حل کرده است. قدم اولش نمونه‌ی شمارنده‌ی دکمه‌ای (Button counter) را بارگذاری می‌کند که عدد را فقط در سریال مانیتور نشان می‌دهد.
  3. کد این مقاله: نمایشگر و هفت مقاومت را به آن نمونه اضافه کن، سیم‌ها را طبق جدول بالا (a روی پین ۳) بکش، دکمه‌ی دوم را روی پین ۱۱ بگذار و کد را جایگزین کن.
  4. خرابش کن: یکی از سیم‌های سگمنت را به پین اشتباه ببر و ببین رقم‌ها چه شکلی می‌شوند؛ بهترین راه برای یاد گرفتن عیب‌یابی سیم‌کشی سون‌سگمنت همین است.

ایده‌ی آی‌سی 4511: رمزگشای BCD به سون‌سگمنت

هفت پین برای یک رقم زیاد است. آی‌سی CD4511 یک «رمزگشا» (Decoder) است: عدد را به‌صورت BCD، یعنی چهار بیت دودویی، می‌گیرد و خودش هفت سگمنت را روشن می‌کند. پس آردوینو فقط چهار پین می‌دهد. این آی‌سی در شبیه‌ساز نیست؛ ایده‌اش را برای ساخت روی بردبورد واقعی توضیح می‌دهیم.

پایه‌ی 4511اسمکاروصل به
۷، ۱، ۲، ۶A، B، C، Dورودی BCD (A کم‌ارزش‌ترین بیت)چهار پین آردوینو
۱۳، ۱۲، ۱۱، ۱۰، ۹، ۱۵، ۱۴a، b، c، d، e، f، gخروجی سگمنت‌هااز راه مقاومت ۲۲۰ اهم به نمایشگر
۳LTتست لامپ (با LOW همه روشن)مثبت
۴BLخاموش کردن نمایشگر (با LOW)مثبت
۵LEقفل کردن عدد (با HIGH)منفی
۱۶ و ۸VDD و VSSتغذیه5V و GND

4511 فقط با نمایشگر کاتد مشترک کار می‌کند و برای ورودی‌های بزرگ‌تر از ۹ (۱۰۱۰ تا ۱۱۱۱) نمایشگر را خاموش می‌کند. خروجی‌هایش جریان را از سمت مثبت می‌دهند ولی محدودش نمی‌کنند، پس هفت مقاومت هنوز لازم است. کد آردوینو برای آن کوتاه است:

// شمارش 0 تا 9 روی سون‌سگمنت از راه آی‌سی CD4511
const int BCD_PINS[4] = {3, 4, 5, 6};   // A B C D روی پایه‌های 7، 1، 2، 6 آی‌سی

void showBCD(int n) {
  for (int i = 0; i < 4; i++) {
    digitalWrite(BCD_PINS[i], ((n >> i) & 1) ? HIGH : LOW);
  }
}

void setup() {
  for (int i = 0; i < 4; i++) pinMode(BCD_PINS[i], OUTPUT);
}

void loop() {
  for (int n = 0; n < 10; n++) {
    showBCD(n);
    delay(1000);
  }
}

همین ایده بدون آردوینو هم کار می‌کند: یک شمارنده‌ی دهدهی (مثل CD4510 یا 74LS90) خروجی BCD می‌دهد و رمزگشا آن را نشان می‌دهد. آی‌سی CD4026 حتی شمارنده و رمزگشا را در یک تراشه دارد. پالس شمارش را هم یک ۵۵۵ تمیز می‌کند تا لرزش دکمه چند پالس نسازد؛ این نقش ۵۵۵ را در مدار تایمر ۵۵۵ ببین.

دو رقم با مالتی‌پلکس (Multiplexing)

برای شمردن ۰۰ تا ۹۹ دو نمایشگر لازم است. سیم‌کشی ساده‌لوحانه ۱۴ پین می‌خواهد. مالتی‌پلکس همین را با ۹ پین انجام می‌دهد و ایده‌اش این است:

  1. سگمنت‌ها مشترک: سگمنت a هر دو نمایشگر به هم وصل می‌شوند و از راه یک مقاومت به یک پین می‌روند؛ همین‌طور b تا g. یعنی هنوز ۷ پین.
  2. COMها جدا: پایه‌ی مشترک هر رقم به کلکتور یک ترانزیستور NPN می‌رود که امیترش به GND است و بیسش با یک مقاومت ۱ کیلواهم به یک پین آردوینو. دو پین دیگر؛ جمعاً ۹ پین.
  3. نوبتی روشن کردن: برنامه هر دو رقم را خاموش می‌کند، الگوی رقم دهگان را روی سگمنت‌ها می‌گذارد، رقم دهگان را حدود ۵ میلی‌ثانیه روشن می‌کند، خاموشش می‌کند، الگوی یکان را می‌گذارد و رقم یکان را ۵ میلی‌ثانیه روشن می‌کند و این را تکرار می‌کند. دهگان با count / 10 و یکان با count % 10 به دست می‌آید.
  4. ماندگاری تصویر: هر رقم صد بار در ثانیه روشن می‌شود و چشم چشمکی نمی‌بیند؛ هر دو رقم را هم‌زمان روشن می‌بیند.

نکته‌های مهم مالتی‌پلکس: زمان‌بندی را با millis بنویس، نه delay، تا خواندن دکمه متوقف نشود. همیشه اول رقم را خاموش کن و بعد الگو را عوض کن؛ وگرنه سایه‌ی کم‌رنگ رقم دیگر (Ghosting) دیده می‌شود. چون هر رقم نصف زمان روشن است، نورش کمتر می‌شود؛ می‌شود مقاومت را تا حدود ۱۵۰ اهم پایین آورد (جریان لحظه‌ای هر سگمنت حدود ۲۰ میلی‌آمپر). ترانزیستور COM هم لازم است، چون جریان هفت سگمنت با هم از آن می‌گذرد که برای یک پین زیاد است.

اگر حوصله‌ی مالتی‌پلکس نداری، تراشه‌های آماده این کار را می‌کنند: شیفت رجیستر 74HC595 با سه پین (نمونه‌ی ۸ LED با ۳ پین)، MAX7219 برای تا ۸ رقم، و ماژول ۴ رقمی TM1637 با فقط دو سیم داده. ماژول TM1637 در شبیه‌ساز جزو قطعه‌های حرفه‌ای اشتراک Plus است و نمونه‌اش کرنومتر با TM1637 است؛ سیم‌کشی و کتابخانه‌اش را در نمایشگر TM1637 با آردوینو هم توضیح داده‌ایم.

نسخه‌ها و مدارهای مشابه

#اسم فارسیEnglishتغییر لازم
۱شمارنده‌ی معکوسCountdown Timerاز ۹ تا ۰ با (count + 9) % 10 و یک بوق در صفر
۲شمارنده‌ی بالا و پایینUp/Down Counterدکمه‌ی دوم به‌جای صفر، یکی کم می‌کند
۳شمارنده‌ی دو رقمیTwo-Digit Counter (00–99)مالتی‌پلکس با دو ترانزیستور
۴تاس الکترونیکیElectronic Dicerandom(1, 7) به‌جای شمارش؛ بیشتر در تاس دیجیتال
۵شمارنده‌ی دودوییBinary Counterچهار LED به‌جای سون‌سگمنت؛ نمونه‌ی شمارنده باینری
۶شمارنده‌ی نفراتPeople Counterسنسور مادون قرمز یا اولتراسونیک به‌جای دکمه
۷شمارنده با وقفهInterrupt Counterشمردن پالس‌های سریع با attachInterrupt
۸شمارنده‌ی بدون میکروکنترلرCD4026 / 74LS90 Counterشمارنده و رمزگشای سخت‌افزاری با ۵۵۵
۹کرنومترStopwatchشمردن زمان با millis و دو دکمه‌ی شروع و توقف
۱۰شمارنده‌ی ۴ رقمی4-Digit TM1637 Counterماژول TM1637 (اشتراک Plus در شبیه‌ساز)

اشتباه‌های رایج در مدار سون‌سگمنت

اشتباهنشانهراه‌حل
آند مشترک با کد کاتد مشترکرقم‌ها برعکس (سگمنت‌های خاموش روشن‌اند)COMMON_ANODE را true و COM را به 5V ببند
COM آند مشترک به GNDهیچ سگمنتی روشن نمی‌شودنوع نمایشگر را با تست باتری پیدا کن
بدون مقاومتسگمنت‌ها خیلی پرنور، بعد خراب؛ پین داغ۲۲۰ اهم برای هر سگمنت
یک مقاومت مشترکرقم ۱ پرنور و ۸ کم‌نوریک مقاومت برای هر سگمنت
ترتیب سگمنت‌ها اشتباهرقم‌های عجیب، مثلاً ۲ شبیه حرف دیگرییک برنامه‌ی تست که سگمنت‌ها را یکی‌یکی روشن کند
دکمه بدون INPUT_PULLUPعدد خودبه‌خود عوض می‌شودINPUT_PULLUP و دکمه بین پین و GND
بدون ضد لرزشیک فشار، چند شمارهتشخیص لبه و millis
استفاده از پین ۰ و ۱آپلود خطا می‌دهد یا سریال به‌هم می‌ریزداز پین ۲ به بعد استفاده کن
مالتی‌پلکس با delay بلندرقم‌ها چشمک می‌زنندهر رقم حدود ۵ میلی‌ثانیه، با millis

نکته‌های ایمنی

شمارنده‌ی دکمه‌ای را در شبیه‌ساز بساز 🔢

سؤال‌های رایج

سون سگمنت کاتد مشترک را از آند مشترک چطور تشخیص بدهم؟

منفی دو باتری قلمی را به پایه‌ی مشترک (در بیشتر مدل‌ها پایه‌ی ۳ یا ۸) و مثبت را از راه یک مقاومت ۳۳۰ اهم به یکی از پایه‌های دیگر بزن. اگر سگمنتی روشن شد، کاتد مشترک است. اگر نه، جای مثبت و منفی را عوض کن؛ اگر حالا روشن شد آند مشترک است. حالت دیود مولتی‌متر هم همین کار را می‌کند.

چرا هر سگمنت مقاومت جدا می‌خواهد؟

اگر یک مقاومت روی پایه‌ی مشترک بگذاری، جریان بین سگمنت‌های روشن تقسیم می‌شود: رقم ۱ که دو سگمنت دارد پرنور و رقم ۸ که هفت سگمنت دارد کم‌نور دیده می‌شود. با یک مقاومت برای هر سگمنت، نور همه‌ی رقم‌ها یکسان می‌ماند.

چرا شمارنده با یک بار فشار دکمه چند عدد جلو می‌رود؟

به خاطر لرزش کلید (Bounce): تیغه‌های دکمه در چند میلی‌ثانیه‌ی اول چند بار وصل و قطع می‌شوند. با تشخیص لبه، یعنی شمردن فقط لحظه‌ی رفتن از رها به فشرده، و یک مکث کوتاه حدود ۳۰ میلی‌ثانیه با millis این مشکل حل می‌شود.

برای ساخت شمارنده سون سگمنت حتماً آردوینو لازم است؟

نه. با آی‌سی‌هایی مثل CD4026 که شمارنده و رمزگشا را در یک تراشه دارد، یا ترکیب 74LS90 و 74LS47 و یک ۵۵۵ برای حذف لرزش، شمارنده‌ی بدون کد هم ساخته می‌شود. آردوینو فقط کار را انعطاف‌پذیرتر می‌کند: شمارش معکوس، صفر کردن و دو رقم با چند خط کد.

آی سی 4511 چه کار می‌کند؟

CD4511 یک رمزگشای BCD به سون سگمنت است: عدد ۰ تا ۹ را به‌صورت چهار بیت می‌گیرد و هفت خروجی a تا g را برای نمایشگر کاتد مشترک روشن می‌کند. با آن به‌جای ۷ پین فقط ۴ پین آردوینو لازم داری، ولی هنوز برای هر سگمنت یک مقاومت لازم است.

مقاله‌های دیگر

🔘

خواندن دکمه با آردوینو — و چرا عدد تصادفی می‌گیری

🎲

تاس دیجیتال با آردوینو

🌊

LED دنباله‌دار — موج نور با آرایه و حلقه