Мазмуну:

Сиздин Валентинди жаркыраган матрица менен жарык кылыңыз: 5 кадам
Сиздин Валентинди жаркыраган матрица менен жарык кылыңыз: 5 кадам

Video: Сиздин Валентинди жаркыраган матрица менен жарык кылыңыз: 5 кадам

Video: Сиздин Валентинди жаркыраган матрица менен жарык кылыңыз: 5 кадам
Video: МУЛЬТИК ЛОЛ! Странные КИНДЕР сюрпризы в детском садике! КУКЛЫ LOL истории Даринелка 2024, Июль
Anonim
Жаркыраган матрица менен Валентинди жарыктандырыңыз
Жаркыраган матрица менен Валентинди жарыктандырыңыз

Валентин күнү - бул сүйүү билдирүүлөрүн жөнөтүү үчүн мүмкүнчүлүк. Эмне үчүн сезимиңизди билдирүү үчүн арзан компоненттери бар кызыктуу LED бетин жасабаңыз!

1 -кадам: Бул долбоордо колдонулган нерселер

Аппараттык компоненттер

  • Seeeduino V4.2
  • Негизги калкан
  • Grove - Red LED Matrix w/Driver
  • Grove - жаңсоо (PAJ7620U2)

Программалык камсыздоо жана онлайн кызматтары

Arduino IDE

2 -кадам: Окуя

Image
Image

3 -кадам: Аппараттык туташуу

Сүрөт
Сүрөт

Бул долбоордо биз жаңсоо сенсорун киргизүү катары колдонобуз жана кызыл LED матрицасын азыктандыруу үчүн LED матрицасынын айдоочусуна кайтарым байланыш беребиз.

Сиз Grove - Gesture жана Grove - Red LED матрицасын драйвер менен Seeeduino'го туташтырылган I^2^C портуна туташтырышыңыз керек. Андан кийин Seeeduino -ны компьютерге USB кабели аркылуу туташтырыңыз.

4 -кадам: Программалык камсыздоо

Бул долбоордун планы - сол же оң жаңсоо окула элек кезде статикалык эмодзи (ыйлаган жүз жана күтүп турган жүз) көрсөтүү.

Оң же сол жаңсоо окулганда, сол же оң жаңсоо менен башкарылган динамикалык көз позициясын өзгөртүү эмодзилерин көрсөтүңүз.

Сүрөт
Сүрөт

Конкреттүү көз позициясында, 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" #кошуу "Wire.h"

Орнотуу процедурасы учурунда биз Serial, matrix жана MsTimer2 функцияларын баштадык. Башталган серия программаны мүчүлүштүктөрдү оңдоо үчүн колдонулат, андыктан мүчүлүштүктөрдү оңдогондон кийин компьютерге туташуу же сериялык мониторду колдонуунун кажети жок. Биз бул долбоордо MsTimer2ди статикалык эмодзилердин дисплейин көзөмөлдөө үчүн колдонобуз.

// Сериалды мүчүлүштүктөрдү оңдоо үчүн баштады.

Serial.begin (9600); while (! Сериялык); paj7620Init (); Wire.begin (); matrix.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: start ();

Негизги циклде биз жаңсоо сенсорунан эки гана жыйынтыкты алабыз, GES_RIGHT_FLAG, GES_LEFT_FLAG жана алар DisplayDynamic () функциясын жетектөө үчүн колдонулат.

DisplayDynamic () функциясы акыркы жолу динамикалык эмодзилердин учурдагы убакытка чейинки интервалын эсептейт, эгер интервал TIMEOUTтан ашса, ал статикалык эмодзилерди ойнотууну токтотот жана көрсөтүлгөн динамикалык эмодзилердин индексин баштоого коет. Солдон оңго жаңсоо окулганда, баштоо индекси 0 болот, солдон оңго жаңсоо кайра окулгандан кийин индекс жогорулайт. Болбосо, баштоо индекси DYNAMIC массивинин акыркы индекси болуп саналат жана индекс төмөндөйт.

void displayDynamic (bool leftToRight) {

белгисиз узак currentTime = millis (); эгер (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DINAMIC) - 1; showStatic = false; } // Бул чектен ашпоо үчүн колдонулат. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DINAMIC) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

TIMEOUT мөөнөтү өтүп кетсе, эч кандай жаңсоо окулбайт, статикалык эмодзи ойнотуу калыбына келтирилет.

Программаны Seeeduinoго жүктөңүз, баары бүттү. Ойноңуз жана көңүл ачыңыз!

5 -кадам: Код

#"Grove_LED_Matrix_Driver_HT16K33.h" кошуу

#include "MsTimer2.h" #include "paj7620.h" #include "Wire.h" #define TIMEOUT 5000 #define GES_REG_ADDR 0x43 #derine ARRAY_LENGTH (array) (sizeof (array) / sizeof (array [0])) Matrix_8x8 матрицасы; uint64_t matrixDisplay = 0; unsigned long prevTime = millis (); int8_t sIndex = 0; bool showStatic = true; const uint64_t STATIC = {0x00003c0000a54200, 0x00003c000000e700, 0x00003c004242e700}; int8_t dIndex = 0; const uint64_t DYNAMIC = {0x00003c000021e700, 0x00003c000042e700, 0x00003c000084e700}; const uint64_t ЖҮРӨК = {0x00183c7e7e240000, 0x00183c7effff6600, 0x183c7effffffff66, 0x00183c7effff6600}; void displayStatic (void) {if (showStatic) {matrixDisplay = STATIC [sIndex]; sIndex = (sIndex + 1) % ARRAY_LENGTH (СТАТИКА); }} void heartBeat () {for (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (DINAMIC) - 1; } // Бул чектен ашпоо үчүн колдонулат. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); кечиктирүү (100); }

Сунушталууда: