Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
День святого Валентина - это возможность отправить любовные послания. Почему бы не сделать забавное светодиодное лицо из недорогих компонентов, чтобы выразить свои чувства!
Шаг 1. Вещи, использованные в этом проекте
Компоненты оборудования
- Seeeduino V4.2
- Базовый щит
- Grove - красная светодиодная матрица с драйвером
- Роща - Жест (PAJ7620U2)
Программные приложения и онлайн-сервисы
IDE Arduino
Шаг 2: история
Шаг 3: Подключение оборудования
В этом проекте мы используем датчик жестов в качестве входа и даем обратную связь драйверу светодиодной матрицы для подачи на красную светодиодную матрицу.
Вам необходимо подключить Grove - Gesture и Grove - Red LED Matrix с драйвером к порту I ^ 2 ^ C базового экрана, который подключен к Seeeduino. Затем подключите Seeeduino к ПК с помощью кабеля USB.
Шаг 4: Программирование программного обеспечения
План этого проекта состоит в том, чтобы отображать статические эмодзи (плачущее лицо и ожидающее лицо), когда не было прочитано ни левого, ни правого жеста.
Отображение смайлов с динамическим изменением положения глаз с помощью жестов влево или вправо, когда читается жест влево или вправо.
В определенном положении глаз на светодиодной матрице будет отображаться бьющееся сердце.
Шаблоны светодиодных дисплеев разработаны с помощью редактора светодиодных матриц, вы можете изменить или добавить свои шаблоны светодиодных индикаторов в программе, показанной выше.
Чтобы подготовиться к этому проекту, необходимо установить библиотеки Grove - Gesture, Grove - Red LED Matrix с драйвером и MsTimer2 в IDE Arduino.
#include "Grove_LED_Matrix_Driver_HT16K33.h"
#include "MsTimer2.h" #include "paj7620.h" #include "Wire.h"
Во время процедуры настройки мы инициализировали функции Serial, matrix и MsTimer2. Initialized Serial используется для отладки программы, поэтому нет необходимости подключаться к ПК или использовать Serial Monitor после отладки. В этом проекте мы используем MsTimer2 для управления отображением статических эмодзи.
// Инициализировал серийный номер для отладки.
Serial.begin (9600); в то время как (! серийный); paj7620Init (); Wire.begin (); matrix.init (); matrix.setBrightness (15); matrix.setBlinkRate (BLINK_OFF); MsTimer2:: set (1000, displayStatic); MsTimer2:: start ();
В основном цикле мы получаем только два вывода от датчика жестов, GES_RIGHT_FLAG, GES_LEFT_FLAG, и они используются для управления функцией displayDynamic ().
Функция displayDynamic () вычислит интервал от последнего отображения динамических смайлов до текущего времени. Если интервал превышает TIMEOUT, воспроизведение статических смайлов прекращается, и для запуска устанавливается индекс отображаемых динамических смайлов. Когда читаются жесты слева направо, начальный индекс равен 0, и индекс будет увеличиваться после повторного чтения жестов слева направо. В противном случае начальным индексом будет последний индекс ДИНАМИЧЕСКОГО массива, и индекс будет уменьшен.
void displayDynamic (bool leftToRight) {
беззнаковый длинный currentTime = millis (); если (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (ДИНАМИЧЕСКИЙ) - 1; showStatic = false; } // Это используется, чтобы избежать выхода за границу. если (dIndex> = ARRAY_LENGTH (ДИНАМИЧЕСКИЙ) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (ДИНАМИЧЕСКИЙ) - 1: 0; } prevTime = currentTime; matrixDisplay = ДИНАМИЧЕСКИЙ [leftToRight? dIndex ++: dIndex--]; }
Жест не считывается, если период TIMEOUT превышен, статическое воспроизведение смайлов будет восстановлено.
Загрузите программу на свой Seeeduino, и все готово. Играйте и получайте удовольствие!
Шаг 5: Код
#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 (массив) (sizeof (array) / sizeof (array [0])) Матрица Matrix_8x8; uint64_t matrixDisplay = 0; беззнаковый длинный 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 СЕРДЦЕ = {0x00183c7e7e240000, 0x00183c7effff6600, 0x183c7effffffff66, 0x00183c7effff6600}; void displayStatic (void) {если (showStatic) {matrixDisplay = STATIC [sIndex]; sIndex = (sIndex + 1)% ARRAY_LENGTH (СТАТИЧЕСКИЙ); }} void heartBeat () {для (uint8_t я = 0; я TIMEOUT) {showStatic = false; prevTime = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (ДИНАМИЧЕСКИЙ) - 1; } // Это используется, чтобы избежать выхода за границу. если (dIndex> = ARRAY_LENGTH (ДИНАМИЧЕСКИЙ) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); matrix.display (); задержка (100); }