İçindekiler:

Parıldayan Matrisle Sevgilinizi Aydınlatın: 5 Adım
Parıldayan Matrisle Sevgilinizi Aydınlatın: 5 Adım

Video: Parıldayan Matrisle Sevgilinizi Aydınlatın: 5 Adım

Video: Parıldayan Matrisle Sevgilinizi Aydınlatın: 5 Adım
Video: Одна в городе_Рассказ_Слушать 2024, Temmuz
Anonim
Sparkling Matrix ile Sevgilinizi Aydınlatın
Sparkling Matrix ile Sevgilinizi Aydınlatın

Sevgililer Günü, aşk mesajları göndermeniz için bir şanstır. Duygularınızı ifade etmek için neden ucuz bileşenlerle eğlenceli bir LED yüz yapmıyorsunuz?

Adım 1: Bu Projede Kullanılanlar

Donanım bileşenleri

  • Seeduino V4.2
  • Temel Kalkan
  • Grove - Sürücülü Kırmızı LED Matrisi
  • Grove - Hareket(PAJ7620U2)

Yazılım uygulamaları ve çevrimiçi hizmetler

Arduino IDE'si

2. Adım: Öykü

Image
Image

3. Adım: Donanım Bağlantısı

resim
resim

Bu projede, bir giriş olarak jest sensörünü kullanıyoruz ve kırmızı LED matrisini beslemek için LED matris sürücüsüne geri bildirim veriyoruz.

Grove - Gesture ve Grove - Red LED Matrix w/Driver'ı, Seeeduino'ya takılı taban kalkanının I^2^C bağlantı noktasına bağlamanız gerekir. Ardından Seeeduino'yu bir USB kablosuyla PC'ye bağlayın.

Adım 4: Yazılım Programlama

Bu projenin planı, okunan sol veya sağ hareket olmadığında statik emojiyi (ağlayan yüz ve bekleyen yüz) görüntülemektir.

Sol veya sağ hareket okunduğunda sol veya sağ hareketle kontrol edilen dinamik göz konumu değiştirme emojisini görüntüleyin.

resim
resim

Belirli göz konumunda, LED matrisinde atan bir kalp görüntülenecektir.

resim
resim

LED ekran desenleri LED Matrix Editor tarafından tasarlanmıştır, yukarıdaki program gösterilerinde LED desenlerinizi değiştirebilir veya ekleyebilirsiniz.

Bu projeye hazırlanmak için Arduino IDE içerisine Grove - Gesture, Grove - Red LED Matrix w/Driver ve MsTimer2 kütüphanelerinin kurulması gerekmektedir.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

Kurulum prosedürü sırasında Serial, matrix ve MsTimer2 fonksiyonlarını başlattık. Başlatılmış Seri, programın hatalarını ayıklamak için kullanılır, bu nedenle hata ayıklamadan sonra PC'ye bağlanmak veya Seri Monitörü kullanmak gereksizdir. Statik emojinin görüntüsünü kontrol etmek için bu projede MsTimer2 kullanıyoruz.

// Hata ayıklamak için seriyi başlattı.

Seri.başla(9600); while(!Seri); paj7620Init(); Wire.begin(); matris.init(); matrix.setBrightness(15); matrix.setBlinkRate(BLINK_OFF); MsTimer2::set(1000, displayStatic); MsTimer2::start();

Ana döngüde, hareket sensöründen yalnızca iki çıktı alıyoruz, GES_RIGHT_FLAG, GES_LEFT_FLAG ve bunlar displayDynamic() işlevini yönlendirmek için kullanılıyor.

displayDynamic() işlevi, dinamik emojinin en son görüntülendiği zamandan geçerli zamana kadar olan aralığı hesaplar, aralık TIMEOUT'u aşarsa, statik emojiyi oynatmayı durdurur ve görüntülenen dinamik emoji dizinini başlayacak şekilde ayarlar. Soldan sağa hareketler okunduğunda, başlangıç indeksi 0'dır ve soldan sağa hareketler tekrar okunduktan sonra indeks artırılacaktır. Aksi takdirde, başlangıç dizini, DİNAMİK dizisinin son dizinidir ve dizin azaltılacaktır.

void displayDynamic(bool leftToRight) {

imzasız uzun currentTime = millis(); if (currentTime - prevTime > TIMEOUT) { dIndex = leftToRight ? 0: ARRAY_LENGTH(DİNAMİK) - 1; showStatic = yanlış; } // Sınırı aşmamak için kullanılır. if (dIndex >= ARRAY_LENGTH(DYNAMIC) || dIndex <= -1) { heartBeat(); dIndex = leftToRight ? ARRAY_LENGTH(DİNAMİK) - 1: 0; } prevTime = currentTime; matrixDisplay = DİNAMİK[soldanSağa ? dIndex++: dIndex--]; }

TIMEOUT süresi aşılırsa hiçbir hareket okunmaz, statik emoji oynatma geri yüklenir.

Programı Seeeduino'nuza yükleyin, hepsi bu kadar. Oynayın ve eğlenin!

Adım 5: Kod

#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(dizi) (sizeof(dizi) / sizeof(dizi[0])) Matrix_8x8 matrisi; uint64_t matrixDisplay = 0; imzasız uzun prevTime = millis(); int8_t sIndex = 0; bool showStatic = doğru; const uint64_t STATİK = { 0x00003c0000a54200, 0x00003c000000e700, 0x00003c004242e700 }; int8_t dIndex = 0; const uint64_t DİNAMİK = { 0x00003c000021e700, 0x00003c000042e700, 0x00003c000084e700 }; const uint64_t KALP = { 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 = şimdiki Zaman; dIndex = leftToRight ? 0: ARRAY_LENGTH(DİNAMİK) - 1; } // Sınırı aşmamak için kullanılır. if (dIndex >= ARRAY_LENGTH(DYNAMIC) || dIndex TIMEOUT) { showStatic = true; } matrix.writeOnePicture(matrixDisplay); matris.display(); gecikme(100); }

Önerilen: