Съдържание:

Запалете Валентин с искряща матрица: 5 стъпки
Запалете Валентин с искряща матрица: 5 стъпки

Видео: Запалете Валентин с искряща матрица: 5 стъпки

Видео: Запалете Валентин с искряща матрица: 5 стъпки
Видео: 3 РЕЦЕПТА из КУРИНОЙ ПЕЧЕНИ/ ПАШТЕТ!! ГОСТИ БУДУТ В ШОКЕ!! 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 Matrix w/Driver към порта I^2^C на основния щит, който е включен в Seeeduino. След това свържете Seeeduino към компютър чрез USB кабел.

Стъпка 4: Софтуерно програмиране

Планът за този проект е да показва статичните емотикони (плачещо лице и чакащо лице), когато няма прочетен ляв или десен жест.

Показване на динамични емотикони за смяна на позицията на очите с контролиран с ляв или десен жест, когато е прочетен жест отляво или отдясно.

Образ
Образ

В конкретната позиция на окото на LED матрицата ще се покаже сърцебиене.

Образ
Образ

Моделите на LED дисплеите са проектирани от LED Matrix Editor, можете да променяте или добавяте вашите LED модели в програмните предавания по -горе.

За да се подготвите за този проект, е необходимо да инсталирате Grove - Gesture, Grove - Red LED Matrix w/Driver и MsTimer2 библиотеки в Arduino IDE.

#включва "Grove_LED_Matrix_Driver_HT16K33.h"

#include "MsTimer2.h" #include "paj7620.h" #include "Wire.h"

По време на процедурата за настройка инициализирахме функциите Serial, matrix и MsTimer2. Инициализираният сериен се използва за отстраняване на грешки в програмата, така че не е необходимо да се свързвате с компютър или да използвате Serial Monitor след отстраняване на грешки. Ние използваме 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 (); if (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; showStatic = false; } // Това се използва, за да се избегне превишаване на границата. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DYNAMIC) - 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 #define ARRAY_LENGTH (масив) (sizeof (масив) / sizeof (масив [0])) Matrix_8x8 матрица; uint64_t matrixDisplay = 0; без знак дълго prevTime = millis (); int8_t sIndex = 0; bool showStatic = вярно; const uint64_t STATIC = {0x00003c0000a54200, 0x00003c000000e700, 0x00003c004242e700}; int8_t dIndex = 0; const uint64_t DYNAMIC = {0x00003c000021e700, 0x00003c000042e700, 0x00003c000084e700}; const uint64_t HEART = {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 (DYNAMIC) - 1; } // Това се използва, за да се избегне превишаване на границата. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); забавяне (100); }

Препоръчано: