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, Studeni
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 korištene u ovom projektu

Hardverske komponente

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

Softverske aplikacije i mrežne usluge

Arduino IDE

Korak 2: Priča

Image
Image

Korak 3: Povezivanje hardvera

Slika
Slika

U ovom projektu koristimo senzor gesta 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 s 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 za ovaj projekt je prikazati statične emojije (uplakano lice i lice koje čeka) kada nema čitanja lijeve ili desne geste.

Prikažite dinamične emojije koji mijenjaju položaj očiju s kontroliranim pokretom lijevo ili desno kada se čita lijeva ili desna gesta.

Slika
Slika

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

Slika
Slika

Uzorke LED zaslona 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 knjižnice 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 je nepotrebno spajanje na računalo ili korištenje serijskog monitora 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 (); matrica.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: start ();

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

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 geste slijeva nadesno, početni indeks je 0, a indeks će se povećati nakon ponovnog čitanja gesta s lijeva na desno. Inače, početni indeks je zadnji indeks DYNAMIC niza, a 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? NIZ_DUŽINA (DINAMIČKI) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

Nijedna gesta se ne čita ako se prekorači TIMEOUT razdoblje, bit će vraćena statična reprodukcija emojija.

Prenesite 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; bez potpisa dugo 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 (STATIČKO); }} 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čeni: