Rozświetl swoją walentynkę za pomocą błyszczącej matrycy: 5 kroków
Rozświetl swoją walentynkę za pomocą błyszczącej matrycy: 5 kroków
Anonim
Rozświetl swoją walentynkę za pomocą błyszczącej matrycy
Rozświetl swoją walentynkę za pomocą błyszczącej matrycy

Walentynki to okazja do wysłania miłosnych wiadomości. Dlaczego nie stworzyć zabawnej twarzy LED z niedrogimi komponentami, aby wyrazić swoje uczucia!

Krok 1: Rzeczy użyte w tym projekcie

Komponenty sprzętowe

  • Seeeduino V4.2
  • Tarcza podstawowa
  • Grove - czerwona matryca LED ze sterownikiem
  • Gaj - Gest(PAJ7620U2)

Aplikacje i usługi online

IDE Arduino

Krok 2: Historia

Image
Image

Krok 3: Połączenie sprzętowe

Obraz
Obraz

W tym projekcie używamy czujnika gestów jako wejścia i przekazujemy informację zwrotną do sterownika matrycy LED, aby zasilić czerwoną matrycę LED.

Musisz podłączyć Grove - Gesture i Grove - Red LED Matrix ze sterownikiem do portu I^2^C osłony podstawy, która jest podłączona do Seeeduino. Następnie podłącz Seeeduino do komputera za pomocą kabla USB.

Krok 4: Programowanie oprogramowania

Planem tego projektu jest wyświetlanie statycznej emotikony (twarz płacząca i twarz oczekująca), gdy nie zostanie odczytany żaden lewy ani prawy gest.

Wyświetlaj emotikony z dynamiczną zmianą pozycji oka, sterowane lewym lub prawym gestem, gdy odczytano lewy lub prawy gest.

Obraz
Obraz

W określonej pozycji oka na matrycy LED wyświetli się bijące serce.

Obraz
Obraz

Wzory wyświetlania LED są zaprojektowane przez Edytor matrycy LED, możesz zmienić lub dodać swoje wzory LED w programie pokazanym powyżej.

Aby przygotować się do tego projektu, należy zainstalować biblioteki Grove - Gesture, Grove - Red LED Matrix w/Driver oraz MsTimer2 w środowisku Arduino IDE.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

Podczas procedury konfiguracji zainicjowaliśmy funkcje Serial, matrix i MsTimer2. Initialized Serial służy do debugowania programu, więc nie ma potrzeby łączenia się z komputerem lub używania Serial Monitor po debugowaniu. W tym projekcie używamy MsTimer2 do sterowania wyświetlaniem statycznego emoji.

// Zainicjuj serial do debugowania.

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

W głównej pętli pobieramy tylko dwa wyjścia z czujnika gestów, GES_RIGHT_FLAG, GES_LEFT_FLAG, które służą do sterowania funkcją displayDynamic().

Funkcja displayDynamic() obliczy interwał od ostatniego wyświetlenia dynamicznego emoji do bieżącego czasu, jeśli interwał przekroczy TIMEOUT, zatrzyma odtwarzanie statycznego emoji i ustawi wyświetlany dynamiczny indeks emoji na początek. Gdy odczytywane są gesty od lewej do prawej, indeks początkowy wynosi 0, a indeks zostanie zwiększony po ponownym odczytaniu gestów od lewej do prawej. W przeciwnym razie indeks początkowy jest ostatnim indeksem tablicy DYNAMICZNEJ, a indeks zostanie zmniejszony.

void displayDynamic(bool leftToRight) {

unsigned long currentTime = millis(); if (currentTime - prevTime > TIMEOUT) { dIndex = leftToRight ? 0: DŁUGOŚĆ_SZYKU(DYNAMICZNE) - 1; showStatic = fałsz; } // Służy do uniknięcia przekroczenia granicy. if (dIndex >= ARRAY_LENGTH(DYNAMIC) || dIndex <= -1) { heartBeat(); dIndex = od lewej do prawej ? ARRAY_LENGTH(DYNAMICZNE) - 1: 0; } prevTime = aktualnyCzas; MatrixDisplay = DYNAMICZNY[od lewej do prawej ? dIndeks++: dIndeks--]; }

Żaden gest nie zostanie odczytany po przekroczeniu limitu czasu TIMEOUT, przywrócone zostanie statyczne odtwarzanie emotikonów.

Prześlij program do Seeeduino i gotowe. Graj i baw się dobrze!

Krok 5: Kod

#zawiera "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(tablica) (sizeof(array) / sizeof(array[0])) Macierz_8x8; uint64_t matrixDisplay = 0; unsigned long prevTime = millis(); int8_t sIndex = 0; bool showStatic = prawda; const uint64_t STATYCZNE = { 0x00003c0000a54200, 0x00003c000000e700, 0x00003c004242e700 }; int8_t dIndeks = 0; const uint64_t DYNAMICZNY = { 0x00003c000021e700, 0x00003c000042e700, 0x00003c000084e700 }; const uint64_t SERCE = { 0x00183c7e7e240000, 0x00183c7effff6600, 0x183c7effffffff66, 0x00183c7effff6600 }; void displayStatic(void) { if (showStatic) { matrixDisplay = STATIC[sIndex]; sIndeks = (sIndeks + 1) % DŁUGOŚĆ_TABLICE(STATYCZNE); } } void heartBeat() { for (uint8_t i = 0; i TIMEOUT) { showStatic = false; poprzedniCzas = bieżącyCzas; dIndex = od lewej do prawej ? 0: DŁUGOŚĆ_SZYKU(DYNAMICZNE) - 1; } // Służy do uniknięcia przekroczenia granicy. if (dIndex >= ARRAY_LENGTH(DYNAMIC) || dIndex TIMEOUT) { showStatic = true; } matrix.writeOnePicture(matrixDisplay); macierz.wyświetlacz(); opóźnienie (100); }