Tartalomjegyzék:

Világítsa meg Valentin napját a pezsgő mátrix segítségével: 5 lépés
Világítsa meg Valentin napját a pezsgő mátrix segítségével: 5 lépés

Videó: Világítsa meg Valentin napját a pezsgő mátrix segítségével: 5 lépés

Videó: Világítsa meg Valentin napját a pezsgő mátrix segítségével: 5 lépés
Videó: Különleges Valentin Nap (2011) - The Lost Valentine 2024, November
Anonim
Világítsa meg Valentin napját a pezsgő mátrix segítségével
Világítsa meg Valentin napját a pezsgő mátrix segítségével

A Valentin -nap alkalom arra, hogy szerelmes üzeneteket küldj. Miért nem készít egy szórakoztató LED -arcot olcsó alkatrészekkel, hogy kifejezze érzéseit!

1. lépés: A projektben használt dolgok

Hardver alkatrészek

  • Seeeduino V4.2
  • Alappajzs
  • Grove - Piros LED mátrix illesztőprogrammal
  • Grove - gesztus (PAJ7620U2)

Szoftveralkalmazások és online szolgáltatások

Arduino IDE

2. lépés: Történet

Image
Image

3. lépés: Hardvercsatlakozás

Kép
Kép

Ebben a projektben a gesztusérzékelőt használjuk bemenetként, és visszajelzést adunk a LED mátrix meghajtónak a piros LED mátrix táplálásához.

Csatlakoztatnia kell a Grove - gesztust és a Grove - Red LED Matrix w/illesztőprogramot a Seeeduino -hoz csatlakoztatott alappajzs I^2^C portjához. Ezután csatlakoztassa a Seeeduino -t a számítógéphez USB -kábelen keresztül.

4. lépés: Szoftverprogramozás

Ennek a projektnek a terve az, hogy megjelenítse a statikus hangulatjeleket (síró arc és várakozó arc), ha nincs bal vagy jobb kézmozdulat.

Dinamikus szempozícióváltó hangulatjelek megjelenítése bal vagy jobb kézmozdulattal, amikor bal vagy jobb kézmozdulat olvasásra került.

Kép
Kép

Az adott szempozícióban egy dobogó szív jelenik meg a LED mátrixon.

Kép
Kép

A LED -es megjelenítési mintákat a LED Matrix Editor tervezte, a fenti programműsorokban módosíthatja vagy hozzáadhatja a LED -mintákat.

A projekt előkészítéséhez Grove - Gesture, Grove - Red LED Matrix w/Driver és MsTimer2 könyvtárakat kell telepíteni az Arduino IDE -be.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

A beállítási folyamat során inicializáltuk a Serial, a mátrix és az MsTimer2 funkciókat. Az Initialized Serial a program hibakeresésére szolgál, így szükségtelen a számítógéphez való csatlakozás vagy a Serial Monitor használata a hibakeresés után. Ebben a projektben az MsTimer2 -t használjuk a statikus hangulatjelek megjelenítésének szabályozására.

// Inicializálta a sorozatot a hibakereséshez.

Sorozat.kezdet (9600); while (! Sorozat); paj7620Init (); Wire.begin (); matrix.init (); mátrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: start ();

A fő ciklusban csak két kimenetet veszünk a gesztusérzékelőből, GES_RIGHT_FLAG, GES_LEFT_FLAG, és ezek szolgálják a displayDynamic () függvény irányítását.

A displayDynamic () függvény kiszámítja a dinamikus hangulatjelek legutóbbi megjelenítése és az aktuális idő közötti intervallumot, ha az intervallum meghaladja a TIMEOUT értéket, akkor leállítja a statikus hangulatjelek lejátszását, és elindítja a megjelenített dinamikus hangulatjelek indexét. Balról jobbra mozdulatok olvasásakor a kezdőindex 0, és a balról jobbra mozdulatok ismételt olvasása után az index növekedni fog. Ellenkező esetben a kezdőindex a DYNAMIC tömb utolsó indexe, és az index csökken.

void displayDynamic (bool leftToRight) {

unsigned long currentTime = millis (); if (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DINAMIKUS) - 1; showStatic = hamis; } // Ezzel elkerülhető a határ átlépése. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DINAMIKUS) - 1: 0; } prevTime = aktuális idő; matrixDisplay = DINAMIKUS [leftToRight? dIndex ++: dIndex--]; }

A TIMEOUT időszak túllépésekor nem olvasható gesztus, a statikus emoji lejátszás visszaáll.

Töltse fel a programot a Seeeduino készülékére, minden kész. Játssz és érezd jól magad!

5. lépés: Kód

#include "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 (tömb) (sizeof (tömb) / sizeof (tömb [0])) Mátrix_8x8 mátrix; uint64_t matrixDisplay = 0; unsigned long prevTime = millis (); int8_t sIndex = 0; bool showStatic = igaz; 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 (STATIC); }} void heartBeat () {for (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = aktuális idő; dIndex = leftToRight? 0: ARRAY_LENGTH (DINAMIKUS) - 1; } // Ezzel elkerülhető a határ átlépése. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = igaz; } matrix.writeOnePicture (matrixDisplay); matrix.display (); késleltetés (100); }

Ajánlott: