สารบัญ:

Advent Lantern พร้อมแอนิเมชั่น POV: 7 ขั้นตอน
Advent Lantern พร้อมแอนิเมชั่น POV: 7 ขั้นตอน

วีดีโอ: Advent Lantern พร้อมแอนิเมชั่น POV: 7 ขั้นตอน

วีดีโอ: Advent Lantern พร้อมแอนิเมชั่น POV: 7 ขั้นตอน
วีดีโอ: Valley Of The Lanterns | Full Movie | Family Fantasy Adventure Animation Movie | Family Central 2024, กรกฎาคม
Anonim
Image
Image

โครงการ Persistence of Vision (POV) มีมาระยะหนึ่งแล้ว มีชุดอุปกรณ์ DIY แบบเรียบง่ายและราคาถูกพร้อมจำหน่ายทางออนไลน์ POV ขึ้นอยู่กับภาพลวงตาที่เราเห็นวัตถุที่ส่องสว่างหลังจากที่วัตถุไม่ได้รับแสงอีกต่อไป แม้ว่าจะเพียงชั่วครู่เท่านั้น โปรเจ็กต์ POV แบบดั้งเดิมมีภาพนิ่งโดยอิงตามหลักการนี้หรือนาฬิกาทำงานอย่างมากที่สุด อย่างไรก็ตาม ไม่มีสิ่งใดป้องกันแอนิเมชันของโปรเจ็กต์โดยใช้ไมโครคอนโทรลเลอร์ที่มีความเร็วสัญญาณนาฬิกาเพียงพอและไฟ LED RGB อัจฉริยะ แอนิเมชั่นนี้เป็นของกวางเรนเดียร์ลากเลื่อนคริสต์มาสสำหรับการตกแต่ง Advent ที่สามารถควบคุมจากระยะไกลโดยอุปกรณ์พกพาที่เปิดใช้งาน WiFi ด้วยเว็บเบราว์เซอร์ โคมไฟนี้ใช้พลังงานจากไมโครคอนโทรลเลอร์ Wemos ESP8266 D1 Mini ของตระกูล Arduino เครดิตสำหรับเฟรมกวางเรนเดียร์ 8 บิตที่เคลื่อนไหวได้นั้นตกเป็นของ Richard Fenyo ศิลปินกราฟิกมากความสามารถ

ขั้นตอนที่ 1: รายการชิ้นส่วน

ขั้นตอนของสภา
ขั้นตอนของสภา

คุณจะต้องมีเคสสำหรับโปรเจ็กต์นี้ที่หนักพอที่จะทำให้ยูนิตหมุนอยู่กับที่โดยไม่ต้องพลิกคว่ำ เคส PSU แบบเก่านั้นสมบูรณ์แบบ ระวังปล่อยให้ตัวเก็บประจุคายประจุก่อนทำการถอดประกอบ คุณจะต้องใช้อะแดปเตอร์จ่ายไฟ 5V-12V ชนิดใดก็ได้เพื่อจ่ายไฟให้กับมอเตอร์กระแสตรง ค่าแอมแปร์ใด ๆ จาก 500mA ขึ้นไปจะทำได้

ชิ้นส่วนที่จำเป็นแสดงอยู่ด้านล่างพร้อมลิงค์ร้านค้าและราคาปัจจุบัน

  • 2 ชิ้น 18650 แบตเตอรี่ USD 4, 78
  • ที่ใส่แบตเตอรี่สำหรับ 2x18650, USD 0, 63
  • Wemos D1 Mini, USD 2, 14
  • Black Straw, USD 0, 10
  • เซนเซอร์สะท้อนแสงอินฟราเรด USD 0, 38
  • สวิตช์โยกพาวเวอร์ 250V, USD 0, 10
  • สวิตช์สไลด์สลับ USD 0, 02
  • มอเตอร์ DC 6-900 รอบต่อนาที, USD 3, 99
  • Adafruit Neopixel WS2812 8 บิต 1 ดอลลาร์สหรัฐ 01

ค่าใช้จ่ายโดยรวมน้อยกว่า USD 15 แต่คุณยังต้องใช้เครื่องมือช่าง เจาะ กาวร้อน พร้อมด้วยอุปกรณ์และทักษะในการบัดกรี

ขั้นตอนที่ 2: ขั้นตอนของการประกอบ

สามารถประกอบเครื่องได้อย่างสมบูรณ์ตามขั้นตอนเหล่านี้

  1. ฐานเครื่องเขียนประกอบด้วยมอเตอร์กระแสตรงและสวิตช์
  2. นีโอพิกเซลถูกบัดกรีและติดเข้ากับด้ามฟาง
  3. แท่นขุดเจาะแบบหมุนสร้างขึ้นด้วยไมโครคอนโทรลเลอร์ สวิตช์สไลด์ เซ็นเซอร์อินฟาเรด และก้านหลอด
  4. ต่อสายไฟเข้ากับขั้วต่อของชิ้นส่วนไฟฟ้า
  5. รหัส Arduino ถูกอัปโหลดไปยังไมโครคอนโทรลเลอร์ Wemos

ขั้นตอนที่ 3: 1. ฐานอยู่กับที่ด้วยมอเตอร์กระแสตรง

1. ฐานนิ่งพร้อมมอเตอร์กระแสตรง
1. ฐานนิ่งพร้อมมอเตอร์กระแสตรง
1. ฐานนิ่งพร้อมมอเตอร์กระแสตรง
1. ฐานนิ่งพร้อมมอเตอร์กระแสตรง
1. ฐานนิ่งพร้อมมอเตอร์กระแสตรง
1. ฐานนิ่งพร้อมมอเตอร์กระแสตรง
  1. เจาะรูบนเคสและยึดมอเตอร์กระแสตรงโดยให้เพลาชี้ขึ้น
  2. ประสานสวิตช์ไฟโยกและอะแดปเตอร์จ่ายไฟ 5V-12V ปกติตามแผนภาพการเดินสายไฟด้านล่าง
  3. มอเตอร์กระแสตรงที่อ้างอิงนั้นหมุนที่ประมาณ 800 รอบต่อนาที (หมุนต่อนาที) ที่ 12V ส่งผลให้รอบสุดท้ายอยู่ที่ 10 FPS (เฟรมต่อวินาที) ขึ้นอยู่กับความต้านทานลมที่แท้จริงของก้านฟาง
  4. ต่ออะแดปเตอร์จ่ายไฟเข้ากับเต้ารับ (110 หรือ 220V)
  5. เปิดสวิตช์โยกและตรวจสอบการทำงานของมอเตอร์กระแสตรง

ถัดไป อุปกรณ์หมุนจะถูกประกอบและยึดเข้ากับเพลามอเตอร์กระแสตรงของฐาน

ขั้นตอนที่ 4: 2. ไฟล์แนบ Neopixel

2. ไฟล์แนบ Neopixel
2. ไฟล์แนบ Neopixel
2. ไฟล์แนบ Neopixel
2. ไฟล์แนบ Neopixel
  1. ตัดปลายหลอดออกเป็นสองด้านตรงข้ามกันที่ปลายด้านหนึ่งประมาณ 1.5 ซม. ตามภาพ
  2. มัดเชือกยาวสามเส้นขึ้นไปบนฟาง สิ่งเหล่านี้จะเชื่อมต่อหมุด Neopixel เข้ากับพอร์ต Wemos บนแท่นขุดเจาะ
  3. ประสานสายไฟสามเส้นเข้ากับหมุด Neopixel GND, 5V และ D-IN
  4. กาวร้อนสายไฟให้เรียบร้อยและเป็นระเบียบจาก Neopixels ที่บัดกรีจนสุดตรงกลางแถบ LED
  5. ดึงปีกที่ตัดแล้วของหลอดออกจากกัน แล้วกาวร้อนให้สมมาตรตรงตรงกลางแถบ LED (ด้านบนของสายไฟด้านหนึ่ง)
  6. สายไฟวิ่งผ่านเข้าไปในฟางจนถึงแท่นขุดเจาะเพื่อไปยังพอร์ต Wemos ที่ตรงกัน

ขั้นตอนที่ 5: 3. การประกอบแท่นหมุน

3. การประกอบแท่นหมุน
3. การประกอบแท่นหมุน

ต้องประกอบทั้งแท่นขุดเจาะจนสุดก่อนที่จะยึดกับเพลามอเตอร์กระแสตรง นั่นเป็นเพราะจุดยึดต้องมีความสมดุลเพื่อให้การหมุนอยู่ตรงกลางอย่างสมบูรณ์โดยไม่โยกเยก

  1. กาวไมโครคอนโทรลเลอร์ Wemos D1 Mini และเลื่อนสวิตช์ไปที่ด้านหนึ่งของที่ใส่แบตเตอรี่ตามภาพที่แสดง
  2. กาวเซ็นเซอร์สะท้อนแสงอินฟาเรดกับอีกด้านหนึ่งของที่ใส่แบตเตอรี่
  3. ใส่แบตเตอรี่ลงในที่ยึด
  4. วางและขันปลายอีกด้านของหลอดไว้บนแบตเตอรี่ สกรูขนาดเล็กหรือแหวนยางจะทำ ตรวจสอบให้แน่ใจว่าอุปกรณ์จะไม่สูญหายเมื่ออุปกรณ์เริ่มหมุนที่ 10 รอบต่อนาที
  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. รหัส Arduino

5. รหัส Arduino
5. รหัส Arduino

โค้ดเฉพาะนี้มีไว้สำหรับ POV Lantern เวอร์ชัน 24 บิต ซึ่งสามารถควบคุมจากระยะไกลโดยอุปกรณ์เคลื่อนที่ใดๆ ที่มีเว็บเบราว์เซอร์และมีเอฟเฟ็กต์ภาพ เช่น World Map, Matrix Animation Effect และภาพเคลื่อนไหว Reindeer Sleight ปรับเปลี่ยนจำนวนพิกเซล พารามิเตอร์เอฟเฟกต์ หรืออินเทอร์เฟซระยะไกล WiFi ได้ตามต้องการในซอร์สโค้ด

// 24 บิต POV Lantern - 2019 Peter Csurgay

#รวม ESP8266WiFiMulti.h

#รวม WiFiClient.h #include ESP8266WebServer.h #include WebSocketsServer.h #include Adafruit_NeoPixel.h

#define DEBUG 1

ข้อความสตริง[3] = { "คำสั่งสอน", "ARDUINO", "การประกวด" };

const uint8_t จานสี[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 unsigned 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 unsigned char พริกไทย[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 } } };

#define INFRATRIGGER_PIN D2

#define NEOPIXELS_PIN D3 #define 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 ร่วม = 0; ฉาก uint8_t = 0; uint8_t numScenes = 5; ฉากสตริง[6] = { "WORLD", "SANTA", "PEPPER", "TEXT", "MATRIX" }; uint8_t หมุน = 1; uint8_t numGreens = 0; // MATRIX จำนวนเส้นตก uint8_t กรีน[64][2]; // MATRIX สุ่ม pos x และ y ของเส้นล้ม

การตั้งค่าเป็นโมฆะ () {

ถ้า (ดีบัก) { Serial.begin(9600); Serial.println("เริ่ม…"); } ล่าช้า (3000);

ESP8266 WiFi หลาย wifi หลาย;

wifiMulti.addAP("wifissid", "pwd"); wifiMulti.addAP("mobilessid", "pwd"); wifiMulti.addAP("laptopssid", "pwd"); ถ้า (DEBUG) Serial.print ("กำลังเชื่อมต่อสถานีกับ "); ในขณะที่ (wifiMulti.run () != WL_CONNECTED) { ล่าช้า (1000); ถ้า (DEBUG) Serial.print("."); } ถ้า (DEBUG) Serial.println(""); ถ้า (DEBUG) Serial.print ("เชื่อมต่อ WiFi: SSID="); ถ้า (DEBUG) Serial.println (WiFi. SSID()); localIPaddress = WiFi.localIP(); ถ้า (DEBUG) Serial.print ("ที่อยู่ IP ของสถานีท้องถิ่น: "); ถ้า (DEBUG) Serial.println (localIPaddress);

เซิร์ฟเวอร์.begin();

ถ้า (DEBUG) Serial.println ("เซิร์ฟเวอร์ (80) เริ่มทำงาน"); webSocket.begin(); webSocket.onEvent (webSocketEvent); ถ้า (DEBUG) Serial.println ("WebSocket (81) เริ่มทำงาน"); uint8_t coli = 0; สำหรับ (int i=0; i<24; i++) { สำหรับ (int j=0; j<64; j++) { canvas[j] = coli++; โคไล = โคไล % 7; } ผ้าใบ[64] = 0; } โหมดพิน (INFRATRIGGER_PIN, INPUT); แนบInterrupt(digitalPinToInterrupt(INFRATRIGGER_PIN), สี, เพิ่มขึ้น); พิกเซล.begin(); พิกเซล.show(); ถ้า (DEBUG) { Serial.print ("Neopixel เริ่มทำงาน NUMPIXELS: "); Serial.println(pixels.numPixels()); } }

เป็นโมฆะ webSocketEvent (uint8_t num, ประเภท WStype_t, uint8_t * เพย์โหลด, ความยาว size_t) {

ถ้า (ประเภท == WStype_TEXT) { สตริง req = สตริง ((const ถ่าน *) เพย์โหลด); ถ้า (ดีบัก) { Serial.print ("81 คำขอ: "); Serial.println(req); } processReq(req); } }

สตริง rip2 (สตริง s) {

ความละเอียดของสตริง; int i=0; while(s!='/') i++; ผม++; while(s!='/') i++; ผม++; while(s!='/' && s!=' ' && s!='\r' && s!='\n') res += s[i++]; ผลตอบแทน res; }

เป็นโมฆะ processReq (คำขอสตริง) {

if (req.indexOf ("/rotate") != -1) { หมุน = 1; } else if (req.indexOf ("/scene") != -1) { หมุน = 0; สตริง sc = rip2(req); ถ้า (isDigit(sc[0])) ฉาก = sc.toInt(); อื่น ๆ { ฉาก = 0; สำหรับ (int i=0; i

วงเป็นโมฆะ () {

webSocket.loop(); ไคลเอนต์ WiFiClient = server.available (); if (!client) { return; } String req = client.readStringUntil('\r'); ถ้า (DEBUG) { Serial.print ("80 Req: "); Serial.println(req); } processReq(req);

client.flush();

String s = "HTTP/1.1 200 OK\r\nContent-Type: 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, พิกเซล.สี(จานสี[ind][0], จานสี[ind][1], จานสี[ind][2])); } pixels.show(); ดีเลย์ไมโครวินาที(10); } co = (co + 1) % 40; ถ้า (หมุน) { ถ้า (ร่วม = = 0) { ฉาก = (ฉาก+1) % numScenes; ถ้า (DEBUG) { Serial.print ("ฉาก: "); Serial.println (ฉาก); } } if (co==0) loadCanvas(ฉาก[ฉาก]); } if (scenes[scene].indexOf("SANTA") != -1) { สำหรับ (int i=0; i<8; i++) สำหรับ (int j=0; j=co && j

เป็นโมฆะ loadCanvas (สตริงอะไร) {

clearCanvas(); ถ้า (ดีบัก) { Serial.print ("loadCanvas: "); Serial.println(อะไร); } if (what.indexOf("TEXT") != -1) { สำหรับ (int l=0; l<3; l++) สำหรับ (int n=0; n=12 && j<51) canvas[j] = pgm_read_byte_near(พริกไทย+j-12); } else if (what.indexOf("WORLD") != -1) { สำหรับ (int i=0; i<24; i++) สำหรับ (int j=0; j=11 && j<53) canvas [j] = pgm_read_byte_near(โลก+j-11); } }

เป็นโมฆะ clearCanvas () {

ถ้า (DEBUG) Serial.println ("clearCanvas"); สำหรับ (int i=0; i<24; i++) สำหรับ (int j=0; j<65; j++) canvas[j] = 0; }

สตริง ipToString (IPAddress ip) {

สตริง s=""; สำหรับ (int i=0; i<4; i++) s += i ? "." + สตริง(ip): สตริง(ip); กลับ s; }

แนะนำ: