Sadržaj:

Osvijetlite svoje Valentinovo pjenušavom matricom: 5 koraka
Osvijetlite svoje Valentinovo pjenušavom matricom: 5 koraka

Video: Osvijetlite svoje Valentinovo pjenušavom matricom: 5 koraka

Video: Osvijetlite svoje Valentinovo pjenušavom matricom: 5 koraka
Video: Hrvati su nam opisali svoje najgore i najbolje Valentinovo, neki su ga proveli i u zatvoru 2024, Juli
Anonim
Osvijetlite svoje Valentinovo pjenušavom matricom
Osvijetlite svoje Valentinovo pjenušavom matricom

Valentinovo je prilika za vas da pošaljete ljubavne poruke. Zašto ne biste napravili zabavno LED lice s jeftinim komponentama da izrazite svoj osjećaj!

Korak 1: Stvari koje se koriste u ovom projektu

Hardverske komponente

  • Seeeduino V4.2
  • Base Shield
  • Grove - Crvena LED matrica sa upravljačkim programom
  • Grove - Pokret (PAJ7620U2)

Softverske aplikacije i mrežne usluge

Arduino IDE

Korak 2: Priča

Image
Image

Korak 3: Povezivanje hardvera

Image
Image

U ovom projektu koristimo senzor pokreta kao ulaz i dajemo povratne informacije upravljačkom programu LED matrice za napajanje crvene LED matrice.

Morate spojiti Grove - Gesture i Grove - Red LED Matrix w/Driver sa I^2^C portom osnovnog štita koji je priključen na Seeeduino. Zatim spojite Seeeduino na računalo putem USB kabela.

Korak 4: Programiranje softvera

Plan ovog projekta je prikazati statične emojije (uplakano lice i lice koje čeka) kada nema čitanja lijeve ili desne geste.

Prikažite dinamičke emotikone za promjenu položaja očiju s kontroliranim pokretom lijevo ili desno kada se čita lijeva ili desna gesta.

Image
Image

U određenom položaju oka, srce koje kuca bit će prikazano na LED matrici.

Image
Image

Uzorke LED ekrana dizajnirao je LED Matrix Editor, možete promijeniti ili dodati svoje LED uzorke u gore prikazanim programima.

Da biste se pripremili za ovaj projekt, potrebno je instalirati Grove - Gesture, Grove - Red LED Matrix w/Driver i MsTimer2 biblioteke u Arduino IDE.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

Tijekom postupka postavljanja inicirali smo funkcije Serial, matrix i MsTimer2. Inicijalizirani serijski broj koristi se za otklanjanje pogrešaka u programu, pa nije potrebno povezivati se s računalom ili koristiti serijski monitor nakon otklanjanja pogrešaka. U ovom projektu koristimo MsTimer2 za kontrolu prikaza statičkog emojija.

// Pokrenuo serijski program za ispravljanje pogrešaka.

Serial.begin (9600); while (! Serijski); paj7620Init (); Wire.begin (); matrix.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: start ();

U glavnoj petlji uzimamo samo dva izlaza senzora pokreta, GES_RIGHT_FLAG, GES_LEFT_FLAG i oni se koriste za usmjeravanje displayDynamic () funkcije.

Funkcija displayDynamic () izračunat će interval od posljednjeg prikaza dinamičkog emojija do trenutnog vremena, ako interval prelazi TIMEOUT, prestat će reproducirati statički emoji i postaviti prikazani indeks dinamičkog emojija za početak. Kada se čitaju pokreti slijeva na desno, početni indeks je 0, a indeks će se povećati nakon ponovnog čitanja pokreta s lijeva na desno. Inače, početni indeks je posljednji indeks DYNAMIC niza i indeks će se smanjiti.

void displayDynamic (bool leftToRight) {

unsigned long currentTime = millis (); if (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; showStatic = false; } // Ovo se koristi za izbjegavanje prekoračenja granice. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DYNAMIC) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

Nijedna gesta se ne čita ako se prekorači TIMEOUT period, reprodukcija statičkog emojija će se vratiti.

Otpremite program na svoj Seeeduino, sve je gotovo. Igrajte se i zabavite!

Korak 5: Kodirajte

#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 (niz) (sizeof (niz) / sizeof (niz [0])) Matrica_8x8 matrica; 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 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 = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; } // Ovo se koristi za izbjegavanje prekoračenja granice. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); kašnjenje (100); }

Preporučuje se: