Turinys:

Apšvieskite savo Valentiną putojančia matrica: 5 žingsniai
Apšvieskite savo Valentiną putojančia matrica: 5 žingsniai

Video: Apšvieskite savo Valentiną putojančia matrica: 5 žingsniai

Video: Apšvieskite savo Valentiną putojančia matrica: 5 žingsniai
Video: Cooking a Chinese New Year Reunion Dinner: From Prep to Plating (10 dishes included) 2024, Liepa
Anonim
Šviesinkite savo Valentiną putojančia matrica
Šviesinkite savo Valentiną putojančia matrica

Valentino diena - tai galimybė siųsti meilės žinutes. Kodėl gi ne sukurti linksmą LED veidą su nebrangiais komponentais, kad išreikštumėte savo jausmus!

1 žingsnis: šiame projekte naudojami dalykai

Techninės įrangos komponentai

  • Seeeduino V4.2
  • Pagrindo skydas
  • Grove - raudona LED matrica su tvarkykle
  • Grove - gestas (PAJ7620U2)

Programinės įrangos programos ir internetinės paslaugos

„Arduino IDE“

2 žingsnis: istorija

Image
Image

3 žingsnis: aparatinės įrangos prijungimas

Vaizdas
Vaizdas

Šiame projekte mes naudojame gestų jutiklį kaip įvestį ir pateikiame grįžtamąjį ryšį LED matricos tvarkyklei, kad būtų galima tiekti raudoną LED matricą.

Turite prijungti „Grove - Gesture“ir „Grove - Red LED Matrix“su tvarkykle prie pagrindinio skydo I^2^C prievado, prijungto prie „Seeeduino“. Tada prijunkite „Seeeduino“prie kompiuterio per USB kabelį.

4 žingsnis: programinės įrangos programavimas

Šio projekto planas yra rodyti statines jaustukas (verkiantis veidas ir laukiantis veidas), kai neskaitomas kairysis ar dešinysis gestas.

Rodyti dinamišką akių padėties keitimo jaustuką, valdomą kairiuoju arba dešiniuoju gestais, kai skaitomas kairysis arba dešinysis gestas.

Vaizdas
Vaizdas

Tam tikroje akių padėtyje LED matricoje bus rodoma plakanti širdis.

Vaizdas
Vaizdas

Šviesos diodų ekrano modelius sukūrė „LED Matrix Editor“, galite pakeisti arba pridėti savo LED modelius aukščiau pateiktose programų laidose.

Norint pasiruošti šiam projektui, į „Arduino IDE“reikia įdiegti „Grove - Gesture“, „Grove - Red LED Matrix w/Driver“ir „MsTimer2“bibliotekas.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

#įtraukimas "MsTimer2.h" #įtraukimas "paj7620.h" #įtraukimas "Viela.h"

Sąrankos metu inicijavome serijos, matricos ir „MsTimer2“funkcijas. „Initialized Serial“naudojama programos derinimui, todėl nebūtina prisijungti prie kompiuterio ar naudoti „Serial Monitor“po derinimo. Šiame projekte mes naudojame „MsTimer2“, kad valdytume statinių jaustukų rodymą.

// Inicijuotas serijos derinimas.

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

Pagrindinėje grandinėje mes paimame tik du gestų jutiklio išėjimus - GES_RIGHT_FLAG, GES_LEFT_FLAG ir jie naudojami funkcijai displayDynamic ().

Funkcija displayDynamic () apskaičiuos intervalą nuo paskutinio dinaminių jaustukų rodymo iki dabartinio laiko, jei intervalas viršys TIMEOUT, jis nustos žaisti statinius jaustukus ir pradės rodomą dinaminių jaustukų indeksą. Kai skaitomi gestai iš kairės į dešinę, pradžios indeksas yra 0, o indeksas bus padidintas po to, kai gestai iš kairės į dešinę bus perskaityti dar kartą. Priešingu atveju pradžios indeksas yra paskutinis DYNAMIC masyvo indeksas ir indeksas bus sumažintas.

void displayDynamic (bool leftToRight) {

unsigned long currentTime = milis (); if (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; showStatic = klaidinga; } // Tai naudojama norint neperžengti ribos. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DYNAMIC) - 1: 0; } prevTime = dabartinis laikas; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

Jei viršijamas TIMEOUT laikotarpis, gestas neskaitomas, statinis jaustukų atkūrimas bus atkurtas.

Įkelkite programą į „Seeeduino“, viskas padaryta. Žaisk ir linksminkis!

5 žingsnis: kodas

#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 (masyvas) (sizeof (masyvas) / sizeof (masyvas [0])) Matrica_8x8 matrica; uint64_t matrixDisplay = 0; unsigned long prevTime = milis (); int8_t sIndex = 0; bool showStatic = tiesa; const uint64_t STATIC = {0x00003c0000a54200, 0x00003c000000e700, 0x00003c004242e700}; int8_t dIndex = 0; const uint64_t DYNAMIC = {0x00003c000021e700, 0x00003c000042e700, 0x00003c000084e700}; const uint64_t ŠIRDIS = {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 = dabartinis laikas; dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; } // Tai naudojama norint neperžengti ribos. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = tiesa; } matrix.writeOnePicture (matrixDisplay); matrix.display (); vėlavimas (100); }

Rekomenduojamas: