Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Valentinsdag er en mulighet for deg til å sende kjærlighetsmeldinger. Hvorfor ikke lage et morsomt LED -ansikt med rimelige komponenter for å uttrykke din følelse!
Trinn 1: Ting som brukes i dette prosjektet
Maskinvarekomponenter
- Seeeduino V4.2
- Base skjold
- Grove - Rød LED Matrix m/driver
- Grove - Gest (PAJ7620U2)
Programvare -apper og online -tjenester
Arduino IDE
Trinn 2: Historie
Trinn 3: Maskinvaretilkobling
I dette prosjektet bruker vi gestsensoren som inngang og gir tilbakemeldingen til LED -matrisedriveren for å mate den røde LED -matrisen.
Du må koble Grove - Gesture og Grove - Red LED Matrix w/Driver til I^2^C -porten på basiskjoldet som er plugget inn i Seeeduino. Koble deretter Seeeduino til PC via en USB -kabel.
Trinn 4: Programvareprogrammering
Planen for dette prosjektet er å vise den statiske emojien (gråtende ansikt og ventende ansikt) når det ikke er lest noen venstre eller høyre gest.
Vis dynamisk øye-posisjon-endre emoji med kontrollert av venstre eller høyre gest når det er venstre eller høyre gest blitt lest.
Ved den spesifikke øyeposisjonen vil et bankende hjerte vises på LED -matrisen.
LED -skjermmønstrene er designet av LED Matrix Editor, du kan endre eller legge til LED -mønstrene dine i programprogrammer ovenfor.
For å gjøre deg klar for dette prosjektet, er det nødvendig å installere Grove - Gesture, Grove - Red LED Matrix w/Driver og MsTimer2 -biblioteker i Arduino IDE.
#include "Grove_LED_Matrix_Driver_HT16K33.h"
#include "MsTimer2.h" #include "paj7620.h" #include "Wire.h"
Under installasjonsprosedyren initialiserte vi funksjonene Serial, matrix og MsTimer2. Initialized Serial brukes til å feilsøke programmet, så det er unødvendig å koble til PC eller bruke Serial Monitor etter feilsøking. Vi bruker MsTimer2 i dette prosjektet for å kontrollere visningen av den statiske emojien.
// Initialiserte serien for å feilsøke.
Serial.begin (9600); mens (! Seriell); paj7620Init (); Wire.begin (); matrix.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: start ();
I hovedsløyfen tar vi bare to utganger fra gest -sensoren, GES_RIGHT_FLAG, GES_LEFT_FLAG, og disse brukes til å veilede displayDynamic () -funksjonen.
DisplayDynamic () -funksjonen beregner intervallet fra forrige gang dynamisk emoji ble vist til gjeldende tid, hvis intervallet overstiger enn TIMEOUT, stopper det avspillingen av statisk emoji og setter den viste dynamiske emoji -indeksen til å starte. Når bevegelser fra venstre til høyre leses, er startindeksen 0, og indeksen økes etter at venstre-til-høyre-bevegelsene er lest igjen. Ellers er startindeksen den siste indeksen for DYNAMIC array, og indeksen vil bli redusert.
void displayDynamic (bool leftToRight) {
usignert lang currentTime = millis (); hvis (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; showStatic = false; } // Dette brukes for å unngå å overskride grensen. hvis (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DYNAMIC) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }
Ingen gest blir lest hvis TIMEOUT -perioden overskrides, statisk emoji -avspilling blir gjenopprettet.
Last opp programmet til Seeeduino, alt er gjort. Spill og ha det gøy!
Trinn 5: Kode
#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 (array) (sizeof (array) / sizeof (array [0])) Matrise_8x8 matrise; uint64_t matrixDisplay = 0; usignert lang 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 (STATIC); }} void heartBeat () {for (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; } // Dette brukes for å unngå å overskride grensen. hvis (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); forsinkelse (100); }