فهرست مطالب:

Advent Lantern With POV انیمیشن: 7 مرحله
Advent Lantern With POV انیمیشن: 7 مرحله

تصویری: Advent Lantern With POV انیمیشن: 7 مرحله

تصویری: Advent Lantern With POV انیمیشن: 7 مرحله
تصویری: Siblings....am I right?😔 2024, جولای
Anonim
Image
Image

پروژه های Persistence of Vision (POV) مدتی است که وجود دارد ، کیت های ساده و ارزان DIY حتی برای خرید آنلاین در دسترس هستند. POV مبتنی بر یک توهم نوری است که در آن ما اجسام روشن را می بینیم پس از آنکه جسم دیگر حتی برای مدت کوتاهی روشن نشده است. پروژه های سنتی POV دارای تصاویر ثابت بر اساس این اصل یا حداکثر ساعت های در حال اجرا هستند. با این حال ، هیچ چیز مانع از اجرای انیمیشن ها با استفاده از میکروکنترلرهای سرعت کلاک و LED های RGB هوشمند نمی شود. این انیمیشن خاص مربوط به گوزن شمالی کریسمس برای تزئین ظهور است که می تواند از راه دور توسط هر دستگاه تلفن همراه مجهز به WiFi با مرورگر وب کنترل شود. این فانوس از میکروکنترلر Wemos ESP8266 D1 Mini از خانواده آردوینو تغذیه می کند. اعتبار فریم های متحرک 8 بیت گوزن شمالی به هنرمند گرافیک با استعداد ریچارد فنیو تعلق می گیرد.

مرحله 1: لیست قطعات

مراحل مجمع
مراحل مجمع

برای این پروژه به یک مورد نیاز دارید که به اندازه کافی سنگین باشد تا بتواند دستگاه چرخشی را بدون سرنگونی در جای خود نگه دارد. یک مورد قدیمی PSU کامل است ، فقط مراقب باشید که قبل از جداسازی اجازه دهید خازن ها تخلیه شوند. همچنین برای تغذیه موتور DC به هر نوع آداپتور منبع تغذیه 5V-12V نیاز دارید. واقعا هر آمپری از 500mA و بالاتر این کار را انجام می دهد.

قطعات مورد نیاز در زیر با پیوندهای فروشگاه اینترنتی و قیمت های فعلی ذکر شده است.

  • 2 عدد 18650 باتری ، 4 دلار آمریکا ، 78 دلار
  • نگهدارنده باتری 2x18650 ، USD 0 ، 63
  • Wemos D1 Mini ، USD 2 ، 14
  • نی نی ، 0 دلار ، 10 دلار
  • سنسور بازتابنده مادون قرمز ، USD 0 ، 38
  • سوئیچ 250V Power Rocker ، USD 0 ، 10
  • Toggle Slide Switch ، USD 0 ، 02
  • موتور DC 6-900 دور در دقیقه ، 3 دلار و 99 دلار آمریکا
  • Adafruit Neopixel WS2812 8 بیتی ، 1 دلار آمریکا ، 01 دلار

هزینه کلی کمتر از 15 دلار است ، اما شما همچنین به ابزارهای دستی ، حفاری ، چسب داغ ، همراه با تجهیزات و مهارت های لحیم کاری نیاز خواهید داشت.

مرحله 2: مراحل مجمع

مراحل زیر را می توان به طور کامل مونتاژ کرد.

  1. پایه ثابت با موتور DC و کلید ساخته شده است.
  2. نئوپیکسل ها لحیم شده و به شافت نی متصل می شوند.
  3. دکل چرخشی با میکروکنترلر ، کلید کشویی ، سنسور مادون قرمز و شافت نی ساخته شده است.
  4. سیم کشی روی اتصالات قطعات الکتریکی لحیم می شود
  5. کد آردوینو در میکروکنترلر Wemos بارگذاری می شود.

مرحله 3: 1. پایگاه ثابت با موتور DC

1. پایگاه ثابت با موتور DC
1. پایگاه ثابت با موتور DC
1. پایگاه ثابت با موتور DC
1. پایگاه ثابت با موتور DC
1. پایگاه ثابت با موتور DC
1. پایگاه ثابت با موتور DC
  1. سوراخی روی بدنه ایجاد کنید و موتور DC را طوری ثابت کنید که محور به سمت بالا باشد.
  2. کلید برق راکر و یک آداپتور معمولی منبع تغذیه 5V-12V را طبق نمودار سیم کشی زیر لحیم کنید.
  3. موتور DC ارجاع شده در حدود 800 دور در دقیقه (دور در دقیقه) در 12 ولت می چرخد و نتیجه نهایی آن 10 فریم بر ثانیه (فریم بر ثانیه) بسته به مقاومت واقعی باد شافت نی است.
  4. آداپتور منبع تغذیه را به پریز (110 یا 220 ولت) وصل کنید.
  5. راکر را روشن کرده و عملکرد موتور DC را بررسی کنید.

در مرحله بعد ، دکل چرخشی مونتاژ شده و بر روی محور موتور DC پایه ثابت می شود.

مرحله 4: 2. پیوست Neopixel

2. ضمیمه نئوپیکسل
2. ضمیمه نئوپیکسل
2. ضمیمه نئوپیکسل
2. ضمیمه نئوپیکسل
  1. همانطور که در تصویر نشان داده شده است ، انتهای نی را در دو طرف مخالف در یک سر آن در حدود 1.5 سانتی متر برش دهید.
  2. توری سه سیم بلندتر روی کاه. اینها پین های Neopixel را به پورت های Wemos در دکل متصل می کنند.
  3. سه سیم را روی پین های Neopixel GND ، 5V و D-IN لحیم کنید.
  4. چسب داغ سیم های مرتب و مرتب از Neopixels که به پایان رسیده و در وسط نوار LED قرار گرفته است.
  5. بالهای بریده نی را از هم جدا کرده و آنها را به طور متقارن دقیق روی مرکز نوار LED (بالای سیمها در یک طرف) بچسبانید.
  6. سیمها از داخل کاه تا دکل عبور می کنند تا به پورتهای Wemos منطبق برسند.

مرحله 5: 3. مونتاژ دستگاه چرخشی

3. مونتاژ دنده چرخشی
3. مونتاژ دنده چرخشی

قبل از اتصال به محور موتور DC ، کل دکل باید کاملاً مونتاژ شود. این به این دلیل است که نقطه ثابت باید متعادل باشد تا چرخش کاملاً بدون هیچ گونه تزلزل در مرکز قرار گیرد.

  1. همانطور که در تصویر نشان داده شده است ، میکروکنترلر Wemos D1 Mini و کلید کشویی را به یک طرف نگهدارنده باتری بچسبانید.
  2. سنسور بازتاب مادون قرمز را به طرف دیگر نگهدارنده باتری بچسبانید.
  3. باتری ها را در نگهدارنده قرار دهید.
  4. سر دیگر نی را روی باتری ها قرار دهید و محکم کنید. یک پیچ کوچک یا یک حلقه لاستیکی این کار را انجام می دهد. اطمینان حاصل کنید که هنگامی که دکل در 10 RPM می چرخد ، از بین نمی رود.
  5. کل دکل های مرکز ثقل را در سمت پایین تعیین کنید. متعادل نگه داشتن آن در نوک انگشت شما این کار را انجام می دهد.
  6. یک سوراخ کوچک در محل دقیق پایین نگهدارنده باتری ایجاد کنید.
  7. مقداری چسب حرارتی بزنید و محور موتور را در آن سوراخ ثابت کنید. مطمئن شوید که چسب حرارتی به بدنه موتور نرسد. آن را ثابت نگه دارید تا چسب خشک شود.
  8. یک تکه کوچک کاغذ سفید را ببرید و آن را روی پایه ثابت بچسبانید به طوری که سنسور بازتابنده مادون قرمز دقیقاً در نزدیک آن کاغذ بچرخد. این باعث می شود که قاب های انیمیشن در مکان دقیق در هر چرخش ترسیم شود. تصویر این قطعه بازتاب را در گوشه پایین سمت چپ پایه نشان می دهد.

مرحله 6: 4. سیم کشی قطعات الکتریکی

4. سیم کشی قطعات الکتریکی
4. سیم کشی قطعات الکتریکی

پس از نمودار سیم کشی ، اجزای الکتریکی را در مراحل زیر لحیم کنید. توجه داشته باشید که همان پورت میکروکنترلر Wemos D1 Mini چندین بار با چندین سیم مختلف لحیم می شود. این کار نیاز به تمرین دارد ، یا قبل از لحیم کاری روی بندر Wemos این سیمها را آماده کنید.

  1. سه سیم (GND ، 5V و D-IN) به ترتیب بر روی پورتهای Wemos G ، 5V و D3 لحیم شده است.
  2. دو سیم از سنسور بازتابنده مادون قرمز (VCC ، GND ، OUT) به ترتیب بر روی پورتهای Wemos 5V ، G و D2 لحیم می شوند.
  3. سیم نگهدارنده باتری (سیاه) روی پورت Wemos G لحیم می شود.
  4. سیم مثبت (قرمز) نگهدارنده باتری روی نزدیکترین پین اسلاید سوئیچ لحیم می شود.
  5. پورت Wemos 5V روی پین دیگر سوئیچ اسلاید لحیم می شود.

مرحله 7: 5. کد آردوینو

5. کد آردوینو
5. کد آردوینو

این کد ویژه برای نسخه 24 بیتی POV Lantern است ، می تواند از راه دور توسط هر دستگاه تلفن همراه با مرورگرهای وب کنترل شود و جلوه های بصری مانند World Map ، Matrix Animation Effect و انیمیشن Reindeer Sleight را دارا باشد. با خیال راحت تعداد پیکسل ها ، پارامترهای جلوه یا رابط کاربری از راه دور WiFi را بر اساس نیاز خود در کد منبع تنظیم کنید.

// 24 بیت POV Lantern - 2019 Peter Csurgay

#شامل ESP8266WiFiMulti.h

#شامل WiFiClient.h #شامل ESP8266WebServer.h #شامل WebSocketsServer.h #شامل Adafruit_NeoPixel.h

#DEBUG 1 را تعریف کنید

متن رشته [3] = {"INSTRUCTABLES" ، "ARDUINO" ، "CONTEST"} ؛

const uint8_t palette [8] [3] = {

{0، 0، 0}، // 0 - شفاف {0، 0، 127}، // 1 - آبی {127، 0، 0}، // 2 - قرمز {127، 127، 0}، // 3 - زرد {0 ، 127 ، 0} ، // 4 - سبز {127 ، 24 ، 0} ، // 5 - نارنجی {127 ، 0 ، 127} ، // 6 - سرخابی {127 ، 127 ، 127} // 7 - سفید} ؛

const char char world [24] [42] PROGMEM =

{ { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const فلفل قرمز بدون علامت [24] [8+31] PROGMEM =

{ { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const unsigned char abc [8] [27*5] PROGMEM = {

{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const بدون علامت سانتا [4] [8] [41] PROGMEM = {

{ { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 } } };

#INFRATRIGGER_PIN D2 را تعریف کنید

#تعریف NEOPIXELS_PIN D3 #تعریف NEO_NUMPIXELS 24

پیکسل های Adafruit_NeoPixel = Adafruit_NeoPixel (NEO_NUMPIXELS ، NEOPIXELS_PIN ، NEO_GRB + NEO_KHZ800) ؛

IPAddress localIPaddress؛

IPAddress apIPaddress؛ سرور WiFiServer (80) ؛ WebSocketsServer webSocket = WebSocketsServer (81)؛ بوم uint8_t [24] [65]؛ uint8_t co = 0؛ uint8_t صحنه = 0 ؛ uint8_t numScenes = 5 ؛ صحنه های زهی [6] = {"WORLD" ، "SANTA" ، "PEPPER" ، "TEXT" ، "MATRIX"} ؛ uint8_t چرخش = 1؛ uint8_t numGreens = 0؛ // تعداد خطوط سقوط uint8_t سبزها MATRIX [64] [2] ؛ // خط تصادفی MATRIX x و y خطوط سقوط

void setup () {

if (DEBUG) {Serial.begin (9600) ؛ Serial.println ("شروع …") ؛ } تأخیر (3000) ؛

ESP8266WiFiMulti wifiMulti؛

wifiMulti.addAP ("wifissid" ، "pwd") ؛ wifiMulti.addAP ("mobilessid" ، "pwd") ؛ wifiMulti.addAP ("laptopssid" ، "pwd") ؛ if (DEBUG) Serial.print ("اتصال ایستگاه به") ؛ while (wifiMulti.run ()! = WL_CONNECTED) {تاخیر (1000) ؛ if (DEBUG) Serial.print (".") ؛ } if (DEBUG) Serial.println ("")؛ if (DEBUG) Serial.print ("فای متصل است: SSID =")؛ if (DEBUG) Serial.println (WiFi. SSID ()) ؛ localIPaddress = WiFi.localIP ()؛ if (DEBUG) Serial.print ("آدرس IP ایستگاه محلی:") ؛ if (DEBUG) Serial.println (localIPaddress) ؛

server.begin ()؛

if (DEBUG) Serial.println ("سرور (80) شروع شد")؛ webSocket.begin ()؛ webSocket.onEvent (webSocketEvent) ؛ if (DEBUG) Serial.println ("WebSocket (81) شروع شد") ؛ uint8_t coli = 0؛ for (int i = 0؛ i <24؛ i ++) {for (int j = 0؛ j <64؛ j ++) {canvas [j] = coli ++؛ coli = coli٪ 7؛ } بوم [64] = 0 ؛ } pinMode (INFRATRIGGER_PIN ، INPUT) ؛ attachInterrupt (digitalPinToInterrupt (INFRATRIGGER_PIN) ، رنگ ، RISING) ؛ pixels.begin ()؛ pixels.show ()؛ if (DEBUG) {Serial.print ("Neopixel آغاز شد ، NUMPIXELS:") ؛ Serial.println (pixels.numPixels ()) ؛ }}

void webSocketEvent (uint8_t num ، نوع WStype_t ، uint8_t * payload ، size_t length) {

if (type == WStype_TEXT) {String req = String ((const char *) payload)؛ if (DEBUG) {Serial.print ("81 Req:")؛ Serial.println (req)؛ } processReq (req) ؛ }}

رشته rip2 (رشته ها) {

رشته رشته ؛ int i = 0 ؛ در حالی که (s ! = '/') i ++؛ من ++ ؛ در حالی که (s ! = '/') i ++؛ من ++ ؛ در حالی که (s ! = '/' && s ! = '&& s ! =' / r '&& s ! =' / n ') res+= s [i ++] ؛ بازگشت رز؛ }

void processReq (String req) {

if (req.indexOf ("/rotate")! = -1) {rotate = 1؛ } else if (req.indexOf ("/scene")! = -1) {rotate = 0؛ رشته sc = rip2 (req) ؛ if (isDigit (sc [0])) صحنه = sc.toInt ()؛ else {scene = 0؛ برای (int i = 0 ؛ i

حلقه خالی () {

webSocket.loop ()؛ مشتری WiFiClient = server.available ()؛ if (! مشتری) {return؛ } String req = client.readStringUntil ('\ r')؛ if (DEBUG) {Serial.print ("80 Req:")؛ Serial.println (req)؛ } processReq (req) ؛

client.flush ()؛

رشته s = "HTTP/1.1 200 OK / r / n محتوا-نوع: text/html؛ charset = UTF-8 / r / nAccess-Control-Allow-Headers: Content-Type / r / nAccess-Control-Allow-Origin: *\ r / n اتصال: بستن / r / n / r / n "؛ s + = "localIP:" + ipToString (localIPaddress) + ""؛ s + = "apIP:" + ipToString (apIPaddress) + ""؛ client.print (s)؛ تأخیر (100) ؛ client.stop ()؛ }

رنگ خالی () {

برای (int i = 0؛ i <65؛ i ++) {برای (int j = 0؛ j <24؛ j ++) {unsigned char ind = canvas [j] ؛ pixels.setPixelColor (j ، pixels. Color (palette [ind] [0] ، palette [ind] [1] ، palette [ind] [2])) ؛ } pixels.show ()؛ تاخیر میکروثانیه (10)؛ } co = (co + 1)٪ 40؛ if (چرخش) {if (co == 0) {صحنه = (صحنه+1)٪ numScenes ؛ if (DEBUG) {Serial.print ("صحنه:") ؛ Serial.println (صحنه) ؛ }} if (co == 0) loadCanvas (صحنه ها [صحنه]) ؛ } if (صحنه ها [صحنه].indexOf ("SANTA")! = -1) {for (int i = 0؛ i <8؛ i ++) for (int j = 0؛ j = co && j

void loadCanvas (String what) {

clearCanvas ()؛ if (DEBUG) {Serial.print ("loadCanvas:")؛ Serial.println (چه)؛ } if (what.indexOf ("TEXT")! = -1) {for (int l = 0؛ l <3؛ l ++) for (int n = 0؛ n = 12 && j <51) canvas [j] = pgm_read_byte_near (فلفل +j-12) ؛ } else if (what.indexOf ("WORLD")! = -1) {for (int i = 0؛ i <24؛ i ++) for (int j = 0؛ j = 11 && j <53) canvas [j] = pgm_read_byte_near (جهان +j-11) ؛ }}

void clearCanvas () {

if (DEBUG) Serial.println ("clearCanvas") ؛ برای (int i = 0 ؛ i <24؛ i ++) برای (int j = 0 ؛ j <65؛ j ++) بوم [j] = 0 ؛ }

رشته ipToString (IPAddress ip) {

رشته s = ""؛ برای (int i = 0 ؛ i <4؛ i ++) s+= i؟ "." + رشته (ip ): رشته (ip ) ؛ بازگشت s؛ }

توصیه شده: