Përmbajtje:

Tërhiqeni modulin e dritës - drita duke përdorur çelësin Neopixel & Tërhiqeni lart: 6 hapa (me fotografi)
Tërhiqeni modulin e dritës - drita duke përdorur çelësin Neopixel & Tërhiqeni lart: 6 hapa (me fotografi)

Video: Tërhiqeni modulin e dritës - drita duke përdorur çelësin Neopixel & Tërhiqeni lart: 6 hapa (me fotografi)

Video: Tërhiqeni modulin e dritës - drita duke përdorur çelësin Neopixel & Tërhiqeni lart: 6 hapa (me fotografi)
Video: Si të ndihmosh partneren të arrijë orgazmën 2024, Korrik
Anonim
Image
Image
Tërhiqeni modulin Light - Light duke përdorur çelësin Neopixel & Pull Up
Tërhiqeni modulin Light - Light duke përdorur çelësin Neopixel & Pull Up

Karakteristikat e modulit Drita

  • Arduino Uno
  • Pajisjet kompjuterike dhe rrethimi i blerë nga interneti
  • Neopixel & Furnizimi me energji huazuar nga Shkolla e Informatikës dhe Projektimit të Produkteve
  • Moduli i dritës i kontrolluar nga furnizimi me energji elektrike
  • Të gjitha funksionet kontrollohen përmes ndërveprimit të përdoruesve
  • Llojet e animacionit të shiritit Neopixel: Lloji i shiut, Lloji i dushit, Lloji i rrufesë së Shkëndijës, Lloji Pop, Lloji i parregullt
  • Çelësi tërheqës është i lidhur me shiritin Neopixel dhe animacioni ndryshon kur tërhiqet shiriti Neopixel

Hapi 1: Para se të fillojmë

Para se të Fillojmë
Para se të Fillojmë

Përshëndetje Instruktorët dhe Krijuesit.

Ne filluam dhe projektin ndërveprues të projektimit në lidhje me atë që do të ndodhte nëse do të ndienim emocionin e shiut përmes animacionit të dritës. Mendova se ndjeshmëria e përdoruesit do të maksimizohej përmes një ndërfaqeje që tërheq dritën drejtpërdrejt.

Të mos i hyjë punës

Hapi 2: Pjesët e nevojshme

Pjesët e nevojshme
Pjesët e nevojshme
Pjesët e nevojshme
Pjesët e nevojshme
Pjesët e nevojshme
Pjesët e nevojshme

Bazuar në një modul të dritës

*** Neopixelët dhe furnizimi me energji elektrike u përdorën me mbështetjen e departamentit tonë. ***

Elektronikë:

  1. Arduino Uno
  2. Tela me 3 ngjyra (e zezë, e kuqe, çdo ngjyrë)
  3. Lidhës me 3 kunja (Lidhje për të blerë)
  4. Tërhiq çelësin 1 (Lidhje për të blerë)
  5. tubi tkurrës
  6. Rrip LED i adresueshëm WS2812b me 74 LED (shirit neopixel)*2
  7. Furnizimi me energji elektrike (5V 350A) 1

*** Nevojiten 50 komplete për Arduino, Pull Switch dhe NeoPixels. ***

Hardware:

  1. Shirit akrilik 2t (10mm*1000mm) 1
  2. Pllakë akrilike 5t (60mm*60mm) 1
  3. Foemax 10t (1200mm*1800mm) 1
  4. Llak i zi
  5. Lidhje kabllore
  6. Varg
  7. Hardboard
  8. Bordi i rrjetës

Hapi 3: Lidhshmëria dhe Ndërtimi i Pajisjeve

Lidhshmëria dhe Ndërtimi i Pajisjeve
Lidhshmëria dhe Ndërtimi i Pajisjeve
Lidhshmëria dhe Ndërtimi i Pajisjeve
Lidhshmëria dhe Ndërtimi i Pajisjeve
Lidhshmëria dhe Ndërtimi i Pajisjeve
Lidhshmëria dhe Ndërtimi i Pajisjeve

Së pari, ne kemi nevojë për Prerjen Akrilike për të bërë një modul ndriçimi.

  • Si një mjet për të përjetuar animacionin e dritës, hartoni një modul ndriçimi që fiksohet duke bashkangjitur 74 LED në formën e një shiriti neopixel në një shirit akrilik të trashë 2 mm me një sipërfaqe 1M. Ne kemi prodhuar dy lloje të moduleve të ndriçimit: tipike lineare dhe spirale.
  • Për llojet lineare, shiritat ekzistues të neopixelit mund të mbahen dhe sigurohen, por llojet spirale kërkojnë funksionim manual. Secila prej 74 LED -ve ndahet në copa, ngjitet në një akrilik spiral dhe lidhet së bashku me plumbin.

Bashkangjiteni shiritin Neopixel në akrilik dhe sigurojeni çdo shirit për të parandaluar përhapjen e tij nga nxehtësia, ose lidheni me një vijë të hollë peshkimi. Në rastin e tipit linear, sfera që duhej të tërhiqej në fund të modulit ishte instaluar për të hartuar pamjen estetike dhe ne përfunduam topin e ping pongut me një llak të zi. Pastaj ata shpuan një vrimë të vogël në topin e ping pongut dhe e lidhën atë me një litar. Pjesa tjetër më e rëndësishme, çelësi dhe neopixel, është i lidhur siç tregohet. Ndërprerësi fiksohet më pas në raftin e tavanit.

Në rastin e llojit spiral, ekziston rreziku që tërheqja direkte e modulit spiral mund të prishë akrilikun nën presion, kështu që seksioni tërheqës (Input) dhe moduli (Output) u ndanë. Për të maksimizuar rënien e dritës, modulet u instaluan vertikalisht në tavan, modulet linearë u fiksuan në ajër, spiralet u fiksuan direkt në tavan. Dhe ne lidhëm topin e ping pongut dhe kalimin në vijën e peshkimit në mënyrë që të mund të operohej.

Prerja akrilike siç tregohet në vizatimin e mësipërm kërkohet për të siguruar kalimin në raft. Një ndërprerës me formë katrore 6 cm është i trashë afërsisht 5 mm, me çelësin në qendër dhe një lidhëse kabllo të futur nëpër vrima në të dy anët për të siguruar çelësin fort. Një vrimë rrethore në pjesën e poshtme të qendrës ekspozon tërheqjen e ndërprerësit, nën të cilën një kabllo me tre tela nxirret dhe lidhet me terminalin e kabllove të modulit. Dhe në mënyrë të ngjashme, përmes një vrimë në të katër qoshet, rafti dhe akriliku sigurohen me lidhje kabllo. Siç u përshkrua më lart, moduli linear lidhet drejtpërdrejt me tërheqjen, por moduli spiral lidh pin -in dhe çelësin veç e veç.

Hapi 4: Krijoni duke përdorur 50 module dritë

Krijoni duke përdorur 50 module dritë
Krijoni duke përdorur 50 module dritë
Krijoni duke përdorur 50 module të lehta
Krijoni duke përdorur 50 module të lehta
Krijoni duke përdorur 50 module dritë
Krijoni duke përdorur 50 module dritë

Ne kemi krijuar një përvojë përdoruesi për dritë më të pasur duke vendosur gjithsej 50 module

Ne kishim një raft që ishte 1, 800mm i gjerë dhe 1, 200mm, dhe lidhëm secilin ndërprerës dhe modul në mënyrë që të përjetoni mjedisin e shiut dhe shiut që kishim planifikuar fillimisht, dhe secilin modul ta kishim të vetëm për të mundësuar shumë detyra Me

Në varësi të vizatimit të projektimit, një vrimë e rrumbullakët është shpuar në foemax për të fshehur instalimin dhe për t'u siguruar që zona e lidhur e modulit LED nuk është e dukshme. Meqenëse distanca nga bordi akrilik në lidhjen e modulit LED ku është fiksuar çelësi është rreth 1 cm, u përdor një foemax me trashësi 1 cm.

Korniza metalike katrore u përdor për të mbajtur instalimin së bashku me vida dhe lidhëse kabllo duke ruajtur peshën dhe ekuilibrin e përgjithshëm. Nëse gjatësia e lidhjeve të ekspozuara është më shumë se ajo kur krijuesi përpiqet, bordi më i trashë është joefikas dhe rekomandohen struktura të tjera.

Për të lehtësuar përvojën e përdoruesit në nivelin e syve, instalimi i përfunduar vendoset në një mbështetës prej afërsisht 2m të lartë, por kujdesi është se është shumë e rëndë të instalosh modulin LED të ngulitur me ndërprerës, kështu që të gjitha lidhjet duhet të hiqen. Ne u ngjitëm në shkallë dhe e lidhëm modulin me instalimin e fiksuar në mbështetës.

Pjesa më e rëndësishme e të gjithë këtij procesi është të sigurohet që puna është bërë e sigurt dhe e siguruar plotësisht për të siguruar që përvoja të jetë e mundur në një mjedis të sigurt

Janë përdorur gjithsej 10 module arduino dhe 50 LED dhe pesë module LED janë lidhur për arduino për shumë detyra më efikase dhe pa probleme. Shikoni planin e bashkangjitur për detaje. Kodimi me shumë detyra i Neopixel duke përdorur ndërprerësin e plotë sipas diagramit të projektimit do të diskutohet në detaje në hapin tjetër.

Hapi 5: Kodimi dhe lidhja Arduino

Kodim dhe instalime elektrike Arduino
Kodim dhe instalime elektrike Arduino
Kodim dhe instalime elektrike Arduino
Kodim dhe instalime elektrike Arduino

Instalime elektrike

  • 50 module u lidhën sipas paraqitjes së hapit 4.
  • Secili modul u nda në 10 grupe me 50 module për të mundësuar kryerjen e shumë detyrave dhe për të siguruar një lidhje të qartë.
  • Siç tregohet në figurën 1 të mësipërme, pesë module ishin të lidhura me një arduino të vetme, dhe kunjat 5v të neopixelit ishin lidhur së bashku menjëherë për të lidhur furnizimin me energji.
  • GND i neopixelëve dhe çelsave ishin gjithashtu të lidhur së bashku dhe, për lehtësinë e perceptimit, çelsat u lidhën në kunjat 2, 3, 4, 5, 6 dhe neopixelët u lidhën në kunjat 9, 10, 11, 12, 13 Me
  • Ndërprerësit dhe neopixelët ishin të lidhur në mënyrat 2-9, 3-10, 4-11, 5-12, 6-13, respektivisht.
  • Duhet të theksohet se meqenëse lidhjet e linjave janë komplekse dhe ekziston rreziku i zjarrit për shkak të qarqeve të shkurtra, tubi i tkurrjes u ndez për të siguruar që pjesët e dobëta të mos prishen.

Kodim me shumë detyra Neopixel me ndërprerës tërheqës

5 animacion i lehtë (lloji i shiut, lloji i dushit, lloji i ndezjes së ndezjes, lloji i popit, lloji i parregullt)

#përfshi

/*사용 하고자 하는 을 을 추가//*/

modeli enum {ASNJE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, Dritë, BLOSSOM}; /*네오 픽셀 을 을 설정/*/ enum drejtim {PARA, KTHIM};

/*패턴 의 클래스 입력 입력//*/

klasa NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 추가 하고 / / /* / public: model ActivePattern; /*클레스 함수 에 의 의 방향//*/ drejtim Drejtimi;

/*Erv Intervali 추가*/ Interval i gjatë i panënshkruar; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Color1, Color2 추가*/ uint32_t Color1, Color2; /*변수 TotalSteps 를 추가*/ uint16_t TotalHapa; /*변수 Indeksi 추가*/ uint16_t Indeksi;

/*패턴 을 완료 시 v v//*/ void (*OnComplete) (); /*네오 패턴 네오 픽샐 픽샐, 번호 번호, 타입, 콜백 함수*/ NeoPatterns (uint16_t pixel, uint8_t pin, uint8_t type, pavlefshme (*callback) ()): Adafruit_NeoPixel (pixel, pin, lloj) { OnComplete = kthim në telefon; }

/*패턴 을 업데이트 위한 위한 케이스/*/

void Update () { /*패턴 의 시간 설정. 멀티 태스킹 을 하는/*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 스위치 구문*/ switch (ActivePattern) {/*rast RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*rast RAINBOW_CYCLE 나와라*/ pushim;

/*rast THEATER_CHASE 에서는 TheaterChaseUpdate 를 실행 하라*/

rasti THEATER_CHASE: TheaterChaseUpdate (); /*rast THEATER_CHASE 나와라*/ pushim;

/*rast COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/

rast COLOR_WIPE: ColorWipeUpdate (); /*rast COLOR_WIPE 나와라*/ pushim; /*case SCANNER 에서는 ScannerUpdate 를 실행 하라*/ case SCANNER: ScannerUpdate (); /*rast SCANNER 나와라*/ pushim;

/*rast FADE 에서는 FadeUpdate 를 실행 하라*/

rast FADE: FadeUpdate (); /*rast FADE 나와라*/ pushim;

/*rast TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/

rasti TWINKLE: TwinkleUpdate (); /*kuti TWINKLE 나와라*/ pushim;

/*rast STAR 에서는 StarUpdate 를 실행 하라*/

rast STAR: StarUpdate (); /*rast STAR 나와라*/ pushim;

/*rast RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/

rast RAINBOWSPARKLE: RainbowsparkleUpdate (); /*rast RAINBOWSPARKLE 나와라*/ pushim; /*rasti METEOR 에서는 MeteorUpdate 를 실행 하라*/ rasti METEOR: MeteorUpdate (); /*rast METEOR 나와라*/ pushim;

/*rast LIGHT 에서는 LightUpdate 를 실행 하라*/

rasti LIGHT: LightUpdate (); /*rast Drita 에서 나와라*/ pushim;

/*rast BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/

rast BLOSSOM: BlossomUpdate (); /*rast BLOSSOM 나와라*/ pushim; }}}

/*패턴 의 방향 설정 설정 하는/*/

/*Indeksi 증가 시키고 초기화 하는 함수*/

void Rritje () { /*만약 정방향 이면 를 증가 /* / nëse (Drejtimi == PARA) {Indeksi ++; /*만약 인덱스 네오 네오 면 면 면 면 면 0 으로 초기화 시켜라*/ if (Indeksi> = Hapat Total) {Indeksi = 0; /*패턴 을 완료 함수/*/ nëse (E Plotë! = NULL) {E Plotë (); }}}

/*만약 정방향 이 else else//*/ else {--Indeksi; /*만약 네오 네오 거나 적/// 을 을//*/ if (Indeksi <= 0) {Indeksi = Totali i hapave - 1; /*패턴 을 완료 함수/*/ nëse (E Plotë! = NULL) {E Plotë (); }}}}

/*반대 방향 으로 하는 하는//*/

void Reverse () { /*애니메이션 함수 verse Anasjelltas 썼을 썼을 시, 만약 방향 이 이면 /* / nëse (Drejtimi == PARA) { /*방향 은 그 반대 이며 전체 구동 구동 에서 1 일 빼라* / Drejtimi = KTHIM; Indeksi = Hapat Total - 1; } /*그 이 으로 으로 0 으로 설정 해라* / else {Drejtimi = PARA; Indeksi = 0; }}

/*애니메이션 을 설정 함수 함수 들*

*RainbowCycle 시간 과 방향 입력 입력*/

void RainbowCycle (uint8_t interval, drejtim dir = PARA) { /*실행 되는 패턴 ain RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE; /*시간 은 void RainbowCycle () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 5 255 임*/ TotalHapa = 255; /*인덱스 는 0 으로 설정 함*/ Indeksi = 0; /*방향 은 void RainbowCycle () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*RainbowCycle 업데이트 했을 경우*/

void RainbowCycleUpdate () { /*변수 i 가 네오 픽셀 개수 /를 를 를 증가 시켜라* /për (int i = 0; i <numPixels (); i ++) { /*변수 i 가 증가 과 동시에 GB RGB 의 / 로 작동 / * / setPixelColor (i, Rrota ((((i * 256 / numPixels ()) + Indeksi & 255))); } / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); }

/*TheaterChase 컬러 와 시간 방향 입력//*/

void TheaterChase (uint32_t color1, uint32_t color2, uint8_t interval, drejtim dir = PARA) { /*실행 되는 패턴 AS RTHEATER_CHASE* / ActivePattern = THEATER_CHASE; /*시간 은 void TheaterChase () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 numPixels 임 임*/ TotalSteps = numPixels (); /*컬러 1, 2 설정*/ Ngjyra1 = ngjyra1; Ngjyra2 = ngjyra2; /*인덱스 는 0 으로 설정 함*/ Indeksi = 0; /*방향 oid void TheaterChase () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*TheaterChase 업데이트 했을 경우*/

void TheaterChaseUpdate () { /*변수 i 가 네오 개수 보다 for /를 / / /* /për (int i = 0; i <numPixels (); i ++) { /*만약 변수 에 인덱스 를 3 으로 나눈 것이 0 과 같다 면 i 를 Ngjyra 변환 시켜라*/ nëse ((i + Indeksi) % 3 == 0) {setPixelColor (i, Color1); } /*그렇지 않다면 i 를 Ngjyra 변환 변환 시켜라* / else {setPixelColor (i, Color2); }} / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); }

/*ColorWipe 컬러 와 시간 방향 입력/*/

void ColorWipe (ngjyra uint32_t, intervali uint8_t, drejtimi dir = PARA) { /*실행 되는 패턴 L COLOR_WIPE* / ActivePattern = COLOR_WIPE; /*시간 은 void ColorWipe () 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 numPixels 임 임*/ TotalSteps = numPixels (); /*컬러 1 설정*/ Color1 = ngjyra; /*인덱스 는 0 으로 설정 함*/ Indeksi = 0; /*방향 oid void ColorWipe () 입력 되는 dir = PARA 같음/*/ Drejtimi = dir; }

/*ColorWipeUpdate 를 업데이트 했을 경우*/

void ColorWipeUpdate () { /*index 를 컬러 1 로 변환 시켜라* / setPixelColor (Indeksi, Ngjyra1); / *애니메이션 을 함수/ */ show (); Rritje (); }

/*Skaneri/컬러 와 시간 입력/*/

skaner i pavlefshëm (uint32_t color1, uint8_t interval) { /*실행 되는 패턴 AN SCANNER* / ActivePattern = SCANNER; /*시간 은 skaner i pavlefshëm () 안에 입력 val interval 과 같음*/ Interval = interval; /*구동 갯수 는 총 에서 1 을 빼고 2 를 곱 해라*/ TotalSteps = (numPixels () - 1)*2; /*컬러 1 설정*/ Ngjyra1 = ngjyra1; /*인덱스 는 0 으로 설정 함*/ Indeksi = 0; }

/*ScannerUpdate 를 업데이트 했을 경우*/

void ScannerUpdate () { /*변수 i 는 영 총 갯수 갯수 for 를 를 / / /* /për (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 가 인덱스 면 면 i 를 color1 로 변환 시켜라*/ nëse (i == Indeksi) {setPixelColor (i, Color1); } / *그렇지 변수 i 를 전체 갯수 에서 를 뺀값 뺀값 뺀값 / / / / / / * / tjetër nëse (i == Hapat Total - Indeksi) {setPixelColor (i, Color1); } / *그 밖에는 i 를 디밍 시켜라 만큼 만큼 / * / else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); }

/*Skaneri 컬러 컬러 1, 2 와 스텝, 시간, 방향 을 입력*/

zbraz Fade (uint32_t color1, uint32_t color2, uint16_t hapa, uint8_t interval, drejtim dir = PARA) { /*실행 되는 은 AD FADE* / ActivePattern = FADE; /*시간 은 void Fade () 입력 되는 interval 과 같음*/ Interval = interval; /*구동 갯수 는 값임*/ TotalHapa = hapa; /*컬러 1, 2 설정*/ Ngjyra1 = ngjyra1; Ngjyra2 = ngjyra2; /*인덱스 는 0 으로 설정 함*/ Indeksi = 0; /*방향 oid void Fade () 입력 되는 dir = PARA 같음*/ Drejtimi = dir; } /*FadeUpdate 를 업데이트 했을 /* / void FadeUpdate () { /*변수 e kuqe 은 은 과 같음* / uint8_t e kuqe = ((E kuqe (Ngjyra1)*(TotalSteps - Indeksi)) + (E kuqe (Ngjyra2)*Indeksi)) / Totali i hapave; / * 변수 jeshile 값 은 다음 과 같음 * / uint8_t jeshile = ((E gjelbër (Ngjyra1) * (TotalSteps - Index)) + (Green (Color2) * Index)) / TotalSteps; / * 변수 blu 값 은 다음 과 같음 * / uint8_t blu = ((Blu (Ngjyra1) * (TotalSteps - Index)) + (Blu (Color2) * Indeksi)) / TotalSteps; /*위 의 e kuqe, jeshile, blu/ 으로 컬러 셋팅 함/*/ ColorSet (Ngjyra (e kuqe, jeshile, blu)); / *애니메이션 을 함수/ */ show (); Rritje (); }

/*모든 네오 을 끄는 끄는/*/

void alloff () { /*총 네오 갯수 는 74 개 이며* / int NPIXEL = 74; /*변수 i 모든 을 을 을 으로 으로//*/ për (int i = 0; i <NPIXEL; i ++) {setPixelColor (i, 0, 0, 0); }}

/*Vezullim 의 컬러 1 와 시간 을 입력*/

void Twinkle (uint32_t color1, uint8_t interval) { /*실행 되는 패턴 IN TWINKLE* / ActivePattern = TWINKLE; /*시간 은 void Twinkle () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*컬러 1 설정*/ Ngjyra1 = ngjyra1; /*총 구동 갯수 numPixels 임 임*/ TotalSteps = numPixels (); Indeksi = 0; }

/*TwinkleUpdate 를 업데이트 했을 경우*/

void TwinkleUpdate () { /*모든 네오 픽셀 의 컬러 를 0 으로 셋팅* / setAll (0, 0, 0); /*변수 Pixel 은 rastësor 74*/ int Pixel = rastësor (74); /*rastësisht 74 개 에서 2 로나 눈 수 를 하게/*/setPixelColor (Pixel/2, 50, 100, 255); setPixelColor (Pixel, 250, 255, 250); setPixelColor (Pixel/2, 200, 250, 255); setPixelColor (Pixel, 255, 255, 255); setPixelColor (Pixel, 250, 230, 250); setPixelColor (Pixel/2, 150, 200, 255); / *애니메이션 을 함수/ */ show (); / *랜덤 하게 함수 */ setPixelColor (Pixel, 0, 0, 0); / *애니메이션 을 함수/ */ show (); Rritje (); }

/*Ylli 컬러 컬러 1 값 을 입력*/

yll i pavlefshëm (uint32_t color1) { /*실행 되는 패턴 AR STAR* / ActivePattern = STAR; /*시간 Star void Star () 입력 val interval 과 같음*/ Interval = Interval; /*총 구동 갯수 numPixels 임 임*/ TotalSteps = numPixels (); /*컬러 1 설정*/ Ngjyra1 = ngjyra1; Indeksi = 0; }

/*StarUpdate 업데이트 했을 경우*/

void StarUpdate () { /*인덱스 와 를 셋팅 /* / setPixelColor (Indeksi, Ngjyra1); shfaqje(); /*변수 i 가 0 이고 구동 갯수 작 으면 i 를 감소 시킴 = 한칸 씩 하는 애니메이션*/ për (int i = 0; i <numPixels (); i--) {setPixelColor (i, Color (0, 0, 0)); } / *애니메이션 을 함수 함수 * / Rritje (); }

/*Rainbowsparkle 시간 과 방향 입력 입력*/

zbrazët Rainbowsparkle (uint8_t interval, drejtim dir = PARA) { /*실행 되는 패턴 IN RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 은 zbrazët Rainbowsparkle () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 numPixels 임 임*/ TotalSteps = numPixels (); Indeksi = 0; /*방향 은 zbrazët Rainbowsparkle () 되는 입력 되는 drejtim 과 같음*/ Drejtimi = dir; }

/*RainbowsparkleUpdate 를 업데이트 했을 경우*/

void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 갯수 보다 값 값 값 을 증가 하는데 /* /për (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 작 으면 i 값 을 하는데 하는데*/ nëse ((i + Indeksi) % 2 == 0) {uint32_t c = rastësor (255); setPixelColor (i, c); } else {setPixelColor (i, rastësor (255)); }} / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); } /*Meteor 시간 과 방향 입력 /* / void Meteor (uint32_t color1) { /*실행 되는 패턴 ET METEOR* / ActivePattern = METEOR; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 P numPixel 갯수 에서 1 후 후, *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Ngjyra1 = ngjyra1; Indeksi = 0; }

/*MeteorUpdate 업데이트 했을 경우*/

void MeteorUpdate () {për (int i = 0; i <numPixels (); i ++) {if (i == Index) {setPixelColor (i, 100, rastësor (255), 255); } else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); }

/*Dritë 시간 과 방향 을 입력*/

zbrazët Drita (uint32_t ngjyra1) { /*실행 되는 패턴 IGH Drita* / ActivePattern = Drita; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 일뺀 1 후 *, *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Ngjyra1 = ngjyra1; Indeksi = 0; }

/*LightUpdate 를 업데이트 했을 경우*/

void LightUpdate () {për (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 150, rastësor (200), 40); } else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); }

/*Lule 의 시간 과 방향 을 입력*/

void Blossom (uint32_t color1) { /*실행 되는 패턴 OS BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 P numPixel 갯수 에서 1 후 후, *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Ngjyra1 = ngjyra1; Indeksi = 0; }

/*BlossomUpdate 업데이트 했을 경우*/

void BlossomUpdate () {për (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 255, rastësor (255), 100); } else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 / * / shfaq (); Rritje (); }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/ *Set/////////////// ll ll ll ll ll ll ll ll ll ll ll ll ll ll (, jeshile, blu); } shfaqje(); }

/*네오 픽셀 디밍 디밍, 즉 밝기 를 하는 함수/*/

uint32_t DimColor (ngjyra uint32_t) {// Zhvendos përbërësit R, G dhe B një bit në të djathtë uint32_t dimColor = Ngjyra (E kuqe (ngjyra) >> 1, E gjelbër (ngjyra) >> 1, Blu (ngjyrë) >> 1); kthehu dimColor; }

/*모든 네오 픽셀 칼라 칼라 를//*/

void ColorSet (ngjyra uint32_t) {për (int i = 0; i <numPixels (); i ++) {setPixelColor (i, ngjyra); } shfaqje(); }

/*레드 값 불러 옴/*/

uint8_t E kuqe (ngjyra uint32_t) {kthimi (ngjyra >> 16) & 0xFF; } /*그린 값 불러 옴* / uint8_t E gjelbër (ngjyra uint32_t) {kthimi (ngjyra >> 8) & 0xFF; } /*블루 값 불러 옴 /* / uint8_t Blu (ngjyra uint32_t) {ngjyra e kthimit & 0xFF; }

/*Ylberi 컬러 를 불러 옴*/

uint32_t Rrota (byte WheelPos) {WheelPos = 255 - WheelPos; nëse (WheelPos <85) {ktheje Ngjyrën (255 - WheelPos * 3, 0, WheelPos * 3); } tjetër nëse (WheelPos <170) {WheelPos -= 85; kthimi Ngjyra (0, WheelPos * 3, 255 - WheelPos * 3); } tjetër {WheelPos -= 170; kthehu Ngjyra (WheelPos * 3, 255 - WheelPos * 3, 0); }}};

/*shirit 을 불러 오기 위한* /*사용 하는 스트립 별로 모두 지정 / / / /* /

void strip1Complete (); void strip2Complete (); void strip3Complete (); void strip4Complete (); void strip5Complete ();

/*네오 픽셀 갯수 설정/*/

#përcakto NUMPIXELS 74 /*사용 하는 버튼 갯수 설정 /* / #përcakto B_NUM 5 /*Rrip importi 1 ~ 5 까지, 갯수 는 74 개 스트립 연결 핀 p shirit 1 은 8 ~ 5 까지 12* / NeoPatterns strip1 (74, 8, NEO_GRB + NEO_KHZ800, & strip1Complete); NeoPatterns strip2 (74, 9, NEO_GRB + NEO_KHZ800, & strip2Complete); NeoPatterns strip3 (74, 10, NEO_GRB + NEO_KHZ800, & strip3Complete); NeoPatterns strip4 (74, 11, NEO_GRB + NEO_KHZ800, & strip4Complete); Rrip NeoPatterns5 (74, 12, NEO_GRB + NEO_KHZ800, & strip5Complete); /*배열 을 연결 버튼//*/ const int buttonPin [B_NUM] = {2, 3, 4, 5, 6}; /*Button 을 button button///*/ int buttonState [B_NUM]; /*2 부터 6 번핀 까지 상태 순서 OW OW LOW 임*/ int lastButtonState [B_NUM] = {LOW, LOW, LOW, LOW, LOW}; /*2 번핀 부터 6 번핀 까지 버튼 를 시킴/*/ int buttonCounter [B_NUM] = {0, 0, 0, 0, 0}; /*2 번핀 부터 6 번핀 까지 최대 카운터 는 임 5 임*/ int buttonCounterMax = 5; /*Reading 버튼 을 읽////*/ int leximi [B_NUM]; pa nënshkruar gjatëDebounceTime të gjatë [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 을 읽는 읽는 은 은 vonesë50 과 같음*/ debounce e gjatë e panënshkruar Vonesë = 50;

void setup () {

/*복잡 필요 설정 설정 설정 G G: GND - 5V (Lidhu me numrin Pin)*/ për (int i = 0; i <B_NUM; i ++) {pinMode (buttonPin , INPUT_PULLUP); } Serial.fillo (9600); /*스트립 1 ~ 5 를 셋팅*/ strip1.filloj (); strip2.filloj (); strip3.begin (); strip4.filloj (); strip5.filloj ();

//strip1. TheaterChase(strip1. Color(255, 0, 255), strip1. Color (255, 50, 0), 20, FORWARD);

}

/*버튼 카운터 변수 값 은 5 임*/

int counter = 5; lak void () { /*버튼 수 가 가 작 를 i 를 증가 시키고* / për (int i = 0; i debounceDelay) {if (leximi ! = buttonState ) {buttonState = leximi ; buttonCounter ++; /*버튼 카운팅 위에서 설정 한 한 Max 값 5 를 넘으면 0 으로 초기화 시켜라.*/ If (buttonCounter > buttonCounterMax) buttonCounter = 0; }} lastButtonState = leximi ; } /*모든 스트립 을*.* / Strip1. Update (); shirit 2. Përditëso (); strip3. Update (); shirit 4. Përditëso (); shirit 5. Përditëso ();

///// SWITCH_2 ///////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////

/*버튼 배열 의 0 번째 즉. 2 에 을 활용 활용 되도록 되도록 하는 하는 하는/////*/ switch (buttonCounter [0]) {

/*첫번째 버튼 을 시키면 시키면 구동///*/

rasti 0: strip1. ActivePattern = BLOSSOM; /*해당 애니메이션 시간 을/*/ strip1. Intervali = 20; /*구동 되는 의///*/ strip1. TotalSteps = strip1.numPixels (); pushim; /*두번째 버튼 시키면///*/ rasti 1: strip1. ActivePattern = RAINBOWSPARKLE; shirit 1. Interval = 50; strip1. TotalSteps = strip1.numPixels (); pushim; /*세번째 버튼 활동 시키면///*/ rasti 2: strip1. ActivePattern = SCANNER; shirit 1. Interval = 10; strip1. TotalSteps = (strip1.numPixels () - 1) * 2; pushim; /*네번째 버튼 시키면/// case*/ case 3: strip1. ActivePattern = TWINKLE; shirit 1. Interval = 1; strip1. TotalSteps = strip1.numPixels (); pushim; /*다섯 번째 활동 case// case/*/ rasti 4: strip1. ActivePattern = METEOR; shirit 1. Interval = 10; strip1. TotalSteps = strip1.numPixels (); pushim; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_3 ///////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [1]) {case 0: strip2. ActivePattern = STAR; shirit 2. Interval = 50; strip2. TotalSteps = strip2.numPixels (); pushim; rasti 1: strip2. ActivePattern = RAINBOWSPARKLE; shirit 2. Interval = 100; strip2. TotalSteps = strip2.numPixels (); pushim; rasti 2: strip2. ActivePattern = SCANNER; shirit 2. Interval = 20; strip2. TotalSteps = (strip2.numPixels () - 1) * 2; pushim; rasti 3: strip2. ActivePattern = TWINKLE; shirit 2. Interval = 5; strip2. TotalSteps = strip2.numPixels (); pushim; rasti 4: strip2. ActivePattern = METEOR; shirit 2. Interval = 40; strip2. TotalSteps = strip2.numPixels (); pushim; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_4 ////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [2]) {case 0: strip3. ActivePattern = STAR; strip3. Interval = 50; strip3. TotalSteps = strip3.numPixels (); pushim; rasti 1: strip3. ActivePattern = RAINBOWSPARKLE; strip3. Interval = 100; strip3. TotalSteps = strip3.numPixels (); pushim; rasti 2: strip3. ActivePattern = SCANNER; strip3. Interval = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; pushim; rasti 3: strip3. ActivePattern = TWINKLE; strip3. Interval = 5; strip3. TotalSteps = strip3.numPixels (); pushim; rasti 4: strip3. ActivePattern = METEOR; strip3. Interval = 25; strip3. TotalSteps = strip3.numPixels (); pushim; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_5 ////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [3]) {case 0: strip4. ActivePattern = STAR; shirit 4. Interval = 50; strip4. TotalSteps = strip4.numPixels (); pushim; rasti 1: strip4. ActivePattern = RAINBOWSPARKLE; shirit 4. Interval = 100; strip4. TotalSteps = strip4.numPixels (); pushim; rasti 2: strip4. ActivePattern = SCANNER; shirit 4. Interval = 20; strip4. TotalSteps = (strip4.numPixels () - 1) * 2; pushim; rasti 3: strip4. ActivePattern = TWINKLE; shirit 4. Interval = 5; strip4. TotalSteps = strip4.numPixels (); pushim; rasti 4: strip4. ActivePattern = METEOR; shirit 4. Interval = 25; strip4. TotalSteps = strip4.numPixels (); pushim; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);

///// SWITCH_6 /////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////

switch (buttonCounter [4]) {case 0: strip5. ActivePattern = STAR; shirit 5. Interval = 50; strip5. TotalSteps = strip5.numPixels (); pushim; rasti 1: strip5. ActivePattern = RAINBOWSPARKLE; shirit 5. Intervali = 100; strip5. TotalSteps = strip5.numPixels (); pushim; rasti 2: strip5. ActivePattern = SCANNER; shirit 5. Interval = 20; strip5. TotalSteps = (strip5.numPixels () - 1) * 2; pushim; rasti 3: strip5. ActivePattern = TWINKLE; shirit 5. Interval = 5; strip5. TotalSteps = strip5.numPixels (); pushim; rasti 4: strip5. ActivePattern = METEOR; shirit 5. Interval = 25; strip5. TotalSteps = strip5.numPixels (); pushim; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]); }

// strip1 Përfundimi Përgjigje

void strip1Complete () {strip1. Color1 = strip1. Wheel (random (255)); shirit 1. Ngjyra2 = shirit 1. Rrota (e rastësishme (255)); shirit 1. Indeks = 0; }

// strip2 Përfundimi Përgjigje

void strip2Complete () {strip2. Color1 = strip2. Wheel (random (255)); strip2. Color2 = strip2. Wheel (random (255)); shirit 2. Indeks = 0; }

// strip3 Përfundimi Kthimi i Thirrjes

void strip3Complete () {strip3. Color1 = strip3. Wheel (random (255)); strip3. Color2 = strip3. Wheel (random (255)); strip3. Index = 0; }

// strip4 Përfundimi Përgjigje

void strip4Complete () {strip4. Color1 = strip4. Wheel (random (255)); shirit 4. Ngjyra2 = shirit 4. Rrota (e rastësishme (255)); shirit 4. Indeks = 0; }

// strip5 Përfundimi Përgjigje

void strip5Complete () {strip5. Color1 = strip5. Wheel (random (255)); shirit 5. Ngjyra2 = shirit 5. Rrota (e rastësishme (255)); shirit 5. Indeks = 0; }

Hapi 6: Rezultati dhe Bërja e Filmit

Image
Image
Rezultati dhe Bërja e Filmit
Rezultati dhe Bërja e Filmit

Faleminderit për interesimin tuaj në projektin tonë edhe pse nuk është e mjaftueshme.

Recommended: