Բովանդակություն:

Լուսավորիր քո Վալենտինը շողշողացող մատրիցով ՝ 5 քայլ
Լուսավորիր քո Վալենտինը շողշողացող մատրիցով ՝ 5 քայլ

Video: Լուսավորիր քո Վալենտինը շողշողացող մատրիցով ՝ 5 քայլ

Video: Լուսավորիր քո Վալենտինը շողշողացող մատրիցով ՝ 5 քայլ
Video: Տեր, լուսավորիր իմ աչքերը Քո սուրբ լույսով 957 երգի ակորդները 2024, Նոյեմբեր
Anonim
Լուսավորիր քո Վալենտինը շողշողացող մատրիցով
Լուսավորիր քո Վալենտինը շողշողացող մատրիցով

Վալենտինի օրը սիրո հաղորդագրություններ ուղարկելու հնարավորություն է ձեզ համար: Ինչու՞ չպատրաստել զվարճալի LED դեմք էժան բաղադրիչներով `արտահայտելու ձեր զգացմունքները:

Քայլ 1: Այս նախագծում օգտագործվող բաները

Սարքավորման բաղադրիչներ

  • Seeeduino V4.2
  • Base Shield
  • Grove - Red LED Matrix w/Driver
  • Grove - ժեստ (PAJ7620U2)

Softwareրագրային ապահովման ծրագրեր և առցանց ծառայություններ

Arduino IDE

Քայլ 2: Պատմություն

Image
Image

Քայլ 3: Սարքաշարի միացում

Պատկեր
Պատկեր

Այս նախագծում մենք ժեստերի ցուցիչն օգտագործում ենք որպես մուտքագրում և հետադարձ կապ ենք տալիս LED մատրիցի վարորդին ՝ կարմիր LED մատրիցան կերակրելու համար:

Անհրաժեշտ է Grove - Gesture և Grove - Red LED մատրիցը w/Driver- ով միացնել հիմնական վահանի I^2^C նավահանգստին, որը միացված է Seeeduino- ին: Այնուհետև միացրեք Seeeduino- ն համակարգչին USB մալուխի միջոցով:

Քայլ 4: Softwareրագրային ապահովման ծրագրավորում

Այս նախագծի ծրագիրն այն է, որ ցուցադրվի ստատիկ էմոջին (արտասվող դեմք և սպասող դեմք), երբ ձախ կամ աջ ժեստ չկա կարդացված:

Displayուցադրեք աչքի դիրքի փոփոխման դինամիկ էմոջի `ձախ կամ աջ շարժումով, երբ ձախ կամ աջ ժեստը կարդացվել է:

Պատկեր
Պատկեր

Աչքի հատուկ դիրքում LED մատրիցի վրա կցուցադրվի բաբախող սիրտ:

Պատկեր
Պատկեր

LED ցուցադրման նախշերը նախագծված են LED Matrix Editor- ի կողմից, կարող եք փոխել կամ ավելացնել ձեր LED նախշերը վերը նշված ծրագրի ցուցադրություններում:

Այս նախագծին պատրաստվելու համար անհրաժեշտ է Arduino IDE- ի մեջ տեղադրել Grove - Gesture, Grove - Red LED Matrix w/Driver և MsTimer2 գրադարանները:

#ներառել "Grove_LED_Matrix_Driver_HT16K33.h"

#ներառել "MsTimer2.h" #include "paj7620.h" #include "Wire.h"

Կարգավորման ընթացակարգի ընթացքում մենք նախաստորագրեցինք Serial, matrix և MsTimer2 գործառույթները: Initialized Serial- ը օգտագործվում է ծրագրի վրիպազերծման համար, ուստի ավելորդ կարգաբերումից հետո անհրաժեշտ չէ միանալ համակարգչին կամ օգտագործել Serial Monitor- ը: Այս նախագծում մենք օգտագործում ենք MsTimer2- ը `ստատիկ էմոջիների ցուցադրումը վերահսկելու համար:

// Սերիան սկզբնաղբյուրեց վրիպազերծման համար:

Serial.begin (9600); իսկ (! Սերիա); paj7620Init (); Wire.begin (); matrix.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: հավաքածու (1000, displayStatic); MsTimer2:: սկիզբ ();

Հիմնական օղակում մենք ժեստերի սենսորից վերցնում ենք ընդամենը երկու ելք ՝ GES_RIGHT_FLAG, GES_LEFT_FLAG և դրանք օգտագործվում են displayDynamic () գործառույթը ղեկավարելու համար:

DisplayDynamic () ֆունկցիան կհաշվարկի վերջին անգամից, երբ դինամիկ էմոջին ցուցադրվել է մինչև ընթացիկ ժամանակը, եթե միջակայքը գերազանցի TIMEOUT- ը, այն կդադարի խաղալ ստատիկ էմոջի, և սկզբից կդնի ցուցադրվող դինամիկ էմոջի ինդեքսը: Ձախից աջ ժեստերը կարդալիս մեկնարկի ինդեքսը 0 է, իսկ ինդեքսը կբարձրանա ձախից աջ նորից կարդալուց հետո: Հակառակ դեպքում մեկնարկի ինդեքսը DYNAMIC զանգվածի վերջին ինդեքսն է, և ինդեքսը կնվազի:

դատարկ ցուցադրումԴինամիկ (bool leftToRight) {

անստորագիր երկար ընթացիկ ժամանակ = millis (); if (currentTime - preTTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (ԴԻՆԱՄԻԿԱ) - 1; showStatic = կեղծ; } // Սա օգտագործվում է սահմանը չգերազանցելու համար: եթե (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (ԴԻՆԱՄԻԱ) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

Ոչ մի ժեստ չի կարդացվում, եթե TIMEOUT ժամանակահատվածը գերազանցվի, ստատիկ էմոջի նվագարկումը կվերականգնվի:

Վերբեռնեք ծրագիրը ձեր Seeeduino- ում, ամեն ինչ ավարտված է: Խաղացեք և զվարճացեք:

Քայլ 5: Կոդ

#ներառել "Grove_LED_Matrix_Driver_HT16K33.h"

#ներառել "MsTimer2.h" #include "paj7620.h" #include "Wire.h" #definine TIMEOUT 5000 #define GES_REG_ADDR 0x43 #define ARRAY_LENGTH (array) (sizeof (array) / sizeof (array [0])) Մատրիցա_8x8 մատրիցա; uint64_t մատրիցաԴիտում = 0; unsigned long prevTime = millis (); int8_t sIndex = 0; bool showStatic = ճշմարիտ; const uint64_t STATIC = {0x00003c0000a54200, 0x00003c000000e700, 0x00003c004242e700}; int8_t dIndex = 0; const uint64_t ԴԻՆԱՄԻԿ = {0x00003c000021e700, 0x00003c000042e700, 0x00003c000084e700}; const uint64_t ՍԻՐՏ = {0x00183c7e7e240000, 0x00183c7effff6600, 0x183c7effffffff66, 0x00183c7effff6600}; void displayStatic (void) {if (showStatic) {matrixDisplay = STATIC [sIndex]; sIndex = (sIndex + 1) % ARRAY_LENGTH (STATIC); }} void heartBeat () {for (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = ընթացիկ ժամանակ; dIndex = leftToRight? 0: ARRAY_LENGTH (ԴԻՆԱՄԻԿԱ) - 1; } // Սա օգտագործվում է սահմանը չգերազանցելու համար: եթե (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); ուշացում (100); }

Խորհուրդ ենք տալիս: