Isi kandungan:

Ceriakan Valentine Anda dengan Matrik Berkilau: 5 Langkah
Ceriakan Valentine Anda dengan Matrik Berkilau: 5 Langkah

Video: Ceriakan Valentine Anda dengan Matrik Berkilau: 5 Langkah

Video: Ceriakan Valentine Anda dengan Matrik Berkilau: 5 Langkah
Video: АПТЕКА День святого Валентина ГЛЭМ! | Рэйчел Лири 2024, Julai
Anonim
Ceriakan Valentine Anda dengan Matrik Berkilau
Ceriakan Valentine Anda dengan Matrik Berkilau

Hari Valentine adalah peluang untuk anda menghantar mesej cinta. Mengapa tidak membuat wajah LED yang menyeronokkan dengan komponen yang murah untuk meluahkan perasaan anda!

Langkah 1: Perkara Yang Digunakan dalam Projek Ini

Komponen perkakasan

  • Seeeduino V4.2
  • Perisai Pangkalan
  • Grove - Matrik LED Merah dengan Pemandu
  • Grove - Gerak isyarat (PAJ7620U2)

Aplikasi perisian dan perkhidmatan dalam talian

Arduino IDE

Langkah 2: Cerita

Image
Image

Langkah 3: Sambungan Perkakasan

Imej
Imej

Dalam projek ini, kami menggunakan sensor isyarat sebagai input dan memberikan maklum balas kepada pemacu matriks LED untuk memberi makan matriks LED merah.

Anda perlu menyambungkan Grove - Gesture and the Grove - Red LED Matrix w / Driver ke port I ^ 2 ^ C pelindung asas yang dipasang ke Seeeduino. Kemudian sambungkan Seeeduino ke PC melalui kabel USB.

Langkah 4: Pengaturcaraan Perisian

Rancangan untuk projek ini adalah untuk menampilkan emoji statik (wajah menangis dan wajah menunggu) ketika tidak ada isyarat kiri atau kanan telah dibaca.

Paparkan emoji perubahan kedudukan mata yang dinamik dengan kawalan kiri atau kanan apabila terdapat isyarat kiri atau kanan telah dibaca.

Imej
Imej

Pada kedudukan mata tertentu, jantung berdegup akan ditunjukkan pada matriks LED.

Imej
Imej

Corak paparan LED direka oleh LED Matrix Editor, anda boleh menukar atau menambahkan corak LED anda dalam rancangan program di atas.

Untuk bersiap sedia untuk projek ini, perlu memasang perpustakaan Grove - Gesture, Grove - Red LED Matrix w / Driver dan MsTimer2 ke dalam Arduino IDE.

#sertakan "Grove_LED_Matrix_Driver_HT16K33.h"

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

Semasa prosedur persediaan, kami menginisialisasi fungsi Serial, matriks dan MsTimer2. Initialized Serial digunakan untuk debugging program, jadi tidak perlu menyambung ke PC atau menggunakan Serial Monitor setelah debug. Kami menggunakan MsTimer2 dalam projek ini untuk mengawal paparan emoji statik.

// Memulakan siri untuk debug.

Serial.begin (9600); sementara (! bersiri); paj7620Init (); Wire.begin (); matrix.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: mula ();

Dalam gelung utama, kami hanya mengambil dua output dari sensor isyarat, GES_RIGHT_FLAG, GES_LEFT_FLAG dan ini digunakan untuk memandu fungsi displayDynamic ().

Fungsi displayDynamic () akan menghitung selang dari emoji dinamik terakhir kali ke masa sekarang, jika selang melebihi TIMEOUT, ia akan berhenti memainkan emoji statik, dan menetapkan indeks emoji dinamik yang dipaparkan untuk dimulakan. Apabila isyarat kiri ke kanan dibaca, indeks permulaan adalah 0, dan indeks akan meningkat setelah isyarat kiri ke kanan membaca lagi. Jika tidak, indeks permulaan adalah indeks terakhir array DYNAMIC, dan indeks akan menurun.

paparan kosongDinamik (bool leftToRight) {

waktu semasa yang tidak ditandatangani = milis (); jika (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DINAMIK) - 1; showStatic = palsu; } // Ini digunakan untuk mengelakkan melebihi batas. if (dIndex> = ARRAY_LENGTH (DINAMIK) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DINAMIK) - 1: 0; } prevTime = currentTime; matrixDisplay = DINAMIK [leftToRight? dIndex ++: dIndex--]; }

Tidak ada isyarat yang dibaca jika tempoh TIMEOUT terlampaui, permainan emoji statik akan dipulihkan.

Muat naik program ke Seeeduino anda, semuanya selesai. Main dan bersenang-senang!

Langkah 5: Kod

#sertakan "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 (array) (sizeof (array) / sizeof (array [0])) Matriks Matrix_8x8; uint64_t matrixDisplay = 0; lama tidak ditandatangani prevTime = milis (); int8_t sIndex = 0; bool showStatic = benar; 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 (STATIK); }} kekosongan jantungBunyi () {untuk (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (DINAMIK) - 1; } // Ini digunakan untuk mengelakkan melebihi batas. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = benar; } matrix.writeOnePicture (matrixDisplay); matrix.display (); kelewatan (100); }

Disyorkan: