Tabla de contenido:

Ilumina tu San Valentín con Sparkling Matrix: 5 pasos
Ilumina tu San Valentín con Sparkling Matrix: 5 pasos

Video: Ilumina tu San Valentín con Sparkling Matrix: 5 pasos

Video: Ilumina tu San Valentín con Sparkling Matrix: 5 pasos
Video: ¿Sabías esto? #shorts 2024, Mes de julio
Anonim
Ilumina tu San Valentín con Sparkling Matrix
Ilumina tu San Valentín con Sparkling Matrix

El Día de San Valentín es una oportunidad para que envíes mensajes de amor. ¿Por qué no crear una divertida cara LED con componentes económicos para expresar sus sentimientos?

Paso 1: Cosas utilizadas en este proyecto

Componentes de hardware

  • Seeeduino V4.2
  • Escudo base
  • Grove - Matriz de LED rojo con controlador
  • Grove - Gesto (PAJ7620U2)

Aplicaciones de software y servicios en línea

IDE de Arduino

Paso 2: historia

Image
Image

Paso 3: Conexión de hardware

Imagen
Imagen

En este proyecto, usamos el sensor de gestos como entrada y le damos la retroalimentación al controlador de matriz de LED para alimentar la matriz de LED rojo.

Debe conectar Grove - Gesture y Grove - Red LED Matrix con controlador al puerto I ^ 2 ^ C del protector de base que está conectado al Seeeduino. Luego, conecte Seeeduino a la PC mediante un cable USB.

Paso 4: Programación de software

El plan para este proyecto es mostrar el emoji estático (cara llorando y cara esperando) cuando no se haya leído ningún gesto hacia la izquierda o hacia la derecha.

Muestre emoji dinámico de cambio de posición de los ojos con el control del gesto hacia la izquierda o hacia la derecha cuando se haya leído un gesto hacia la izquierda o hacia la derecha.

Imagen
Imagen

En la posición específica del ojo, se mostrará un corazón latiendo en la matriz de LED.

Imagen
Imagen

Los patrones de pantalla LED están diseñados por LED Matrix Editor, puede cambiar o agregar sus patrones de LED en los programas que se muestran arriba.

Para prepararse para este proyecto, es necesario instalar Grove - Gesture, Grove - Red LED Matrix w / Driver y las bibliotecas MsTimer2 en el IDE de Arduino.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

Durante el procedimiento de configuración, inicializamos las funciones Serial, matrix y MsTimer2. El Serial inicializado se usa para depurar el programa, por lo que no es necesario conectarse a la PC o usar Serial Monitor después de la depuración. Usamos MsTimer2 en este proyecto para controlar la visualización del emoji estático.

// Inicializó el serial para depurar.

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

En el bucle principal, solo tomamos dos salidas del sensor de gestos, GES_RIGHT_FLAG, GES_LEFT_FLAG y estas se utilizan para guiar la función displayDynamic ().

La función displayDynamic () calculará el intervalo desde la última vez que se mostró el emoji dinámico hasta la hora actual, si el intervalo excede de TIMEOUT, dejará de reproducir emoji estático y establecerá el índice de emoji dinámico mostrado para comenzar. Cuando se leen los gestos de izquierda a derecha, el índice de inicio es 0 y el índice aumentará después de volver a leer los gestos de izquierda a derecha. De lo contrario, el índice de inicio es el último índice de la matriz DYNAMIC y el índice disminuirá.

void displayDynamic (bool leftToRight) {

tiempo actual largo sin firmar = milis (); if (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DINÁMICO) - 1; showStatic = false; } // Esto se usa para evitar exceder el límite. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DINÁMICO) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

No se lee ningún gesto si se excede el período de TIMEOUT, se restaurará la reproducción estática de emoji.

Sube el programa a tu Seeeduino, listo. ¡Juega y diviértete!

Paso 5: Código

#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])) Matrix_8x8 matrix; uint64_t matrixDisplay = 0; unsigned long 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 (ESTÁTICO); }} void heartBeat () {for (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (DINÁMICO) - 1; } // Esto se usa para evitar exceder el límite. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); retraso (100); }

Recomendado: