Índice:

Ilumine seus namorados com matriz cintilante: 5 etapas
Ilumine seus namorados com matriz cintilante: 5 etapas

Vídeo: Ilumine seus namorados com matriz cintilante: 5 etapas

Vídeo: Ilumine seus namorados com matriz cintilante: 5 etapas
Vídeo: Assim é Feito o Clareamento Dental Profissional no Dentista!! #shorts 2024, Novembro
Anonim
Ilumine seus namorados com matriz cintilante
Ilumine seus namorados com matriz cintilante

O Dia dos Namorados é uma chance para você enviar mensagens de amor. Por que não fazer uma divertida face LED com componentes baratos para expressar seus sentimentos!

Etapa 1: Coisas usadas neste projeto

Componentes de hardware

  • Seeeduino V4.2
  • Escudo de Base
  • Grove - matriz de LED vermelho com driver
  • Grove - Gesto (PAJ7620U2)

Aplicativos de software e serviços online

IDE Arduino

Etapa 2: História

Image
Image

Etapa 3: Conexão de Hardware

Imagem
Imagem

Neste projeto, usamos o sensor de gesto como uma entrada e fornecemos o feedback ao driver de matriz de LED para alimentar a matriz de LED vermelho.

Você precisa conectar o Grove - Gesture e o Grove - Red LED Matrix c / Driver à porta I ^ 2 ^ C da blindagem da base que está conectada ao Seeeduino. Em seguida, conecte o Seeeduino ao PC por meio de um cabo USB.

Etapa 4: Programação de software

O plano para este projeto é exibir o emoji estático (rosto chorando e rosto à espera) quando nenhum gesto para a esquerda ou para a direita for lido.

Exibe emoji de mudança de posição de olho dinâmico com controle por gesto para a esquerda ou direita quando há um gesto para a esquerda ou para a direita lido.

Imagem
Imagem

Na posição específica do olho, um coração batendo será exibido na matriz de LED.

Imagem
Imagem

Os padrões de exibição de LED são projetados pelo Editor de matriz de LED, você pode alterar ou adicionar seus padrões de LED no programa mostrado acima.

Para se preparar para este projeto, é necessário instalar as bibliotecas Grove - Gesture, Grove - Red LED Matrix c / Driver e MsTimer2 no IDE do Arduino.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

Durante o procedimento de configuração, inicializamos as funções Serial, Matrix e MsTimer2. Serial inicializado é usado para depurar o programa, portanto, não é necessário conectar-se ao PC ou usar o Monitor serial após a depuração. Usamos MsTimer2 neste projeto para controlar a exibição do emoji estático.

// Inicializou o serial para depuração.

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

No loop principal, pegamos apenas duas saídas do sensor de gesto, GES_RIGHT_FLAG, GES_LEFT_FLAG e essas são usadas para guiar a função displayDynamic ().

A função displayDynamic () calculará o intervalo desde a última vez em que o emoji dinâmico foi exibido até a hora atual. Se o intervalo exceder TIMEOUT, parará de reproduzir o emoji estático e definirá o índice de emoji dinâmico exibido para iniciar. Quando os gestos da esquerda para a direita são lidos, o índice inicial é 0 e o índice aumenta depois que os gestos da esquerda para a direita são lidos novamente. Caso contrário, o índice inicial é o último índice da matriz DINÂMICA e o índice será diminuído.

void displayDynamic (bool leftToRight) {

CurrentTime longo sem sinal = millis (); if (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; showStatic = false; } // Isso é usado para evitar ultrapassar o limite. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (DYNAMIC) - 1: 0; } prevTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

Nenhum gesto é lido se o período de TIMEOUT for excedido, a reprodução estática do emoji será restaurada.

Faça upload do programa para o seu Seeeduino, pronto. Jogue e divirta-se!

Etapa 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; prevTime longo sem sinal = 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 () {para (uint8_t i = 0; i TIMEOUT) {showStatic = false; prevTime = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (DYNAMIC) - 1; } // Isso é usado para evitar ultrapassar o limite. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); atraso (100); }

Recomendado: