Πίνακας περιεχομένων:

Advent Lantern With POV Animation: 7 Βήματα
Advent Lantern With POV Animation: 7 Βήματα

Βίντεο: Advent Lantern With POV Animation: 7 Βήματα

Βίντεο: Advent Lantern With POV Animation: 7 Βήματα
Βίντεο: Lantern Rite Promotional Video: Dream Upon a Lantern|Genshin Impact 2024, Ιούλιος
Anonim
Image
Image

Τα έργα Persistence of Vision (POV) υπάρχουν εδώ και αρκετό καιρό, απλά και φθηνά κιτ DIY είναι ακόμη διαθέσιμα για online αγορές. Το POV βασίζεται σε μια οπτική ψευδαίσθηση όπου βλέπουμε φωτιζόμενα αντικείμενα αφού το αντικείμενο δεν φωτίζεται πλέον, έστω και για μικρό χρονικό διάστημα. Τα παραδοσιακά έργα POV διαθέτουν ακίνητες εικόνες που βασίζονται σε αυτήν την αρχή ή ρολόγια το πολύ. Ωστόσο, τίποτα δεν εμποδίζει την προβολή κινούμενων εικόνων χρησιμοποιώντας μικροελεγκτές επαρκούς ρολογιού ρολογιού και έξυπνα LED RGB. Αυτό το συγκεκριμένο κινούμενο σχέδιο είναι ένα χριστουγεννιάτικο σκάνδαλο από ταράνδους για διακόσμηση Advent που μπορεί να ελεγχθεί εξ αποστάσεως από οποιαδήποτε κινητή συσκευή με δυνατότητα WiFi με πρόγραμμα περιήγησης ιστού. Το φανάρι τροφοδοτείται από τον μικροελεγκτή Wemos ESP8266 D1 Mini της οικογένειας Arduino. Η πίστωση για τα κινούμενα 8-bit καλαίσθητα ταράνδων ανήκει σε έναν ταλαντούχο γραφίστα Ρίτσαρντ Φένιο.

Βήμα 1: Λίστα μερών

Βήματα της Συνέλευσης
Βήματα της Συνέλευσης

Θα χρειαστείτε μια θήκη για αυτό το έργο που είναι αρκετά βαριά για να διατηρήσει τη περιστρεφόμενη μονάδα στη θέση της χωρίς ανατροπή. Μια παλιά θήκη PSU είναι τέλεια, απλά προσέξτε να αφήσετε τους πυκνωτές να αποφορτιστούν πριν την αποσυναρμολόγηση. Θα χρειαστείτε επίσης κάθε είδους προσαρμογέα τροφοδοσίας 5V-12V για την τροφοδοσία του κινητήρα DC. Πραγματικά οποιοδήποτε ρεύμα από 500mA και πάνω θα το κάνει.

Τα απαιτούμενα μέρη παρατίθενται παρακάτω με συνδέσμους στο κατάστημα και τρέχουσες τιμές.

  • 2 τεμ 18650 Μπαταρία, USD 4, 78
  • Θήκη μπαταρίας για 2x18650, USD 0, 63
  • Wemos D1 Mini, USD 2, 14
  • Black Straw, 0 USD, 10
  • Υπέρυθρο αντανακλαστικό αισθητήρα, 0, 38 USD
  • 250V Power Rocker Switch, USD 0, 10
  • Εναλλαγή διακόπτη διαφάνειας, 0 USD, 02
  • 6-900rpm DC Motor, 3 USD, 99
  • Adafruit Neopixel WS2812 8-bit, 1 USD, 01

Το συνολικό κόστος είναι μικρότερο από 15 USD, - αλλά θα χρειαστείτε επίσης κάποια εργαλεία χειρός, διάτρηση, θερμοκόλληση, μαζί με εξοπλισμό συγκόλλησης και δεξιότητες.

Βήμα 2: Βήματα της Συνέλευσης

Η μονάδα μπορεί να συναρμολογηθεί πλήρως ακολουθώντας αυτά τα βήματα.

  1. Η σταθερή βάση είναι κατασκευασμένη με κινητήρα DC και διακόπτη.
  2. Τα νεοπίξελ συγκολλούνται και προσαρτώνται στον άξονα του αχύρου.
  3. Η περιστρεφόμενη εξέδρα είναι κατασκευασμένη με μικροελεγκτή, διακόπτη διαφάνειας, αισθητήρα υπέρυθρων και άξονα από άχυρο.
  4. Η καλωδίωση συγκολλάται στους συνδετήρες των ηλεκτρικών εξαρτημάτων
  5. Ο κωδικός Arduino μεταφορτώνεται στον μικροελεγκτή Wemos.

Βήμα 3: 1. Στατική βάση με κινητήρα DC

1. Στατική βάση με κινητήρα DC
1. Στατική βάση με κινητήρα DC
1. Στατική βάση με κινητήρα DC
1. Στατική βάση με κινητήρα DC
1. Στατική βάση με κινητήρα DC
1. Στατική βάση με κινητήρα DC
  1. Τρυπήστε μια τρύπα στη θήκη και στερεώστε τον κινητήρα DC έτσι ώστε ο άξονας να δείχνει προς τα πάνω.
  2. Συγκολλήστε τον διακόπτη ισχύος και έναν κανονικό προσαρμογέα τροφοδοσίας 5V-12V ακολουθώντας το παρακάτω διάγραμμα καλωδίωσης.
  3. Ο αναφερόμενος κινητήρας DC περιστρέφεται περίπου 800 RPM (περιστροφές ανά λεπτό) στα 12V, με αποτέλεσμα περίπου 10 FPS (καρέ ανά δευτερόλεπτο) στην τελική ρύθμιση, ανάλογα με την πραγματική αντίσταση ανέμου του άξονα άχυρου.
  4. Συνδέστε το τροφοδοτικό στην πρίζα (110 ή 220V).
  5. Ενεργοποιήστε το rocker και ελέγξτε τη λειτουργία του κινητήρα DC.

Στη συνέχεια, η περιστρεφόμενη εξέδρα θα συναρμολογηθεί και θα στερεωθεί στον άξονα του κινητήρα DC της βάσης.

Βήμα 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. Συναρμολόγηση περιστρεφόμενου εξοπλισμού

Ολόκληρη η εξέδρα πρέπει να συναρμολογηθεί πλήρως πριν στερεωθεί στον άξονα του κινητήρα DC. Αυτό συμβαίνει επειδή το σημείο στερέωσης πρέπει να είναι ισορροπημένο έτσι ώστε η περιστροφή να είναι τέλεια κεντραρισμένη χωρίς καμία ταλάντευση.

  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

Αυτός ο συγκεκριμένος κωδικός είναι για την έκδοση 24 bit του POV Lantern, μπορεί να ελεγχθεί από απόσταση από οποιαδήποτε κινητή συσκευή με προγράμματα περιήγησης στο Web και διαθέτει οπτικά εφέ όπως ο Παγκόσμιος Χάρτης, το εφέ κίνησης μήτρας και το κινούμενο σχέδιο Reindeer Sleight. Μη διστάσετε να προσαρμόσετε τον αριθμό των εικονοστοιχείων, των παραμέτρων εφέ ή της απομακρυσμένης διεπαφής WiFi στις ανάγκες σας στον πηγαίο κώδικα.

// 24 bits POV Lantern - 2019 Peter Csurgay

#include ESP8266WiFiMulti.h

#include 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 ανυπόγραφο κόσμο char [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 unsigned char santa [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 τυχαίες θέσεις 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 ("Connecting Station to"); while (wifiMulti.run ()! = WL_CONNECTED) {καθυστέρηση (1000); if (DEBUG) Serial.print ("."); } if (DEBUG) Serial.println (""); if (DEBUG) Serial.print ("WiFi συνδεδεμένο: 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; για (int i = 0; i <24; i ++) {για (int j = 0; j <64; j ++) {καμβά [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 * ωφέλιμο φορτίο, μέγεθος_t μήκος) {

if (type == WStype_TEXT) {String req = String ((const char *) ωφέλιμο φορτίο); if (DEBUG) {Serial.print ("81 Req:"); Serial.println (req); } processReq (req); }}

String rip2 (String s) {

Συμβολοσειρά res? int i = 0; ενώ (s ! = '/') i ++; i ++? ενώ (s ! = '/') i ++; i ++? ενώ (s ! = '/' && s ! = '&& s ! =' / r '&& s ! =' / n ') res+= s [i ++] ? επιστροφή res? }

void processReq (Απαιτήσεις συμβολοσειράς) {

if (req.indexOf ("/rotate")! = -1) {rotate = 1; } else if (req.indexOf ("/σκηνή")! = -1) {rotate = 0; String sc = rip2 (req); if (isDigit (sc [0])) σκηνή = sc.toInt (); else {σκηνή = 0; για (int i = 0; i

void loop () {

webSocket.loop (); WiFiClient client = server.available (); if (! client) {return? } String req = client.readStringUntil ('\ r'); if (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 ++) {for (int j = 0; j <24; j ++) {unsigned char ind = canvas [j] ; pixels.setPixelColor (j, pixels. Color (παλέτα [ind] [0], παλέτα [ind] [1], παλέτα [ind] [2])); } pixels.show (); καθυστέρηση Μικροδευτερόλεπτα (10); } συν = (συν + 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) καμβάς [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? "." + String (ip ): String (ip ); επιστροφή s? }

Συνιστάται: