Mục lục:

Thắp sáng tình yêu của bạn với ma trận lấp lánh: 5 bước
Thắp sáng tình yêu của bạn với ma trận lấp lánh: 5 bước

Video: Thắp sáng tình yêu của bạn với ma trận lấp lánh: 5 bước

Video: Thắp sáng tình yêu của bạn với ma trận lấp lánh: 5 bước
Video: Đồi Hoa Mặt Trời - Hoàng Yến Chibi 「Lyric Video」| MV HD 2024, Tháng mười một
Anonim
Thắp sáng lễ tình nhân của bạn với ma trận lấp lánh
Thắp sáng lễ tình nhân của bạn với ma trận lấp lánh

Ngày lễ tình nhân là dịp để bạn gửi những thông điệp yêu thương. Tại sao không làm một mặt đèn LED vui nhộn với các thành phần rẻ tiền để thể hiện cảm xúc của bạn!

Bước 1: Những thứ được sử dụng trong dự án này

Các thành phần phần cứng

  • Seeeduino V4.2
  • Lá chắn cơ bản
  • Grove - Ma trận LED đỏ với trình điều khiển
  • Grove - Cử chỉ (PAJ7620U2)

Ứng dụng phần mềm và dịch vụ trực tuyến

Arduino IDE

Bước 2: Câu chuyện

Image
Image

Bước 3: Kết nối phần cứng

Hình ảnh
Hình ảnh

Trong dự án này, chúng tôi sử dụng cảm biến cử chỉ làm đầu vào và đưa ra phản hồi cho trình điều khiển ma trận LED để cung cấp ma trận LED màu đỏ.

Bạn cần kết nối Grove - Gesture và Grove - Red LED Matrix w / Driver với cổng I ^ 2 ^ C của tấm chắn cơ sở được cắm vào Seeeduino. Sau đó kết nối Seeeduino với PC qua cáp USB.

Bước 4: Lập trình phần mềm

Kế hoạch cho dự án này là hiển thị biểu tượng cảm xúc tĩnh (khuôn mặt khóc và khuôn mặt chờ đợi) khi không có cử chỉ trái hoặc phải được đọc.

Hiển thị biểu tượng cảm xúc động thay đổi vị trí mắt với điều khiển bằng cử chỉ trái hoặc phải khi có cử chỉ trái hoặc phải được đọc.

Hình ảnh
Hình ảnh

Tại vị trí mắt cụ thể, một trái tim đang đập sẽ được hiển thị trên ma trận LED.

Hình ảnh
Hình ảnh

Các mẫu màn hình LED được thiết kế bởi LED Matrix Editor, bạn có thể thay đổi hoặc thêm các mẫu LED của mình trong các chương trình ở trên.

Để sẵn sàng cho dự án này, bạn cần cài đặt các thư viện Grove - Gesture, Grove - Red LED Matrix w / Driver và MsTimer2 vào Arduino IDE.

#include "Grove_LED_Matrix_Driver_HT16K33.h"

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

Trong quá trình thiết lập, chúng tôi đã khởi tạo các hàm Serial, ma trận và MsTimer2. Khởi tạo Serial được sử dụng để gỡ lỗi chương trình, vì vậy không cần thiết phải kết nối với PC hoặc sử dụng Serial Monitor sau khi gỡ lỗi. Chúng tôi sử dụng MsTimer2 trong dự án này để kiểm soát việc hiển thị biểu tượng cảm xúc tĩnh.

// Khởi tạo nối tiếp để gỡ lỗi.

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

Trong vòng lặp chính, chúng tôi chỉ lấy hai đầu ra từ cảm biến cử chỉ, GES_RIGHT_FLAG, GES_LEFT_FLAG và những đầu ra này được sử dụng để hướng dẫn hàm displayDynamic ().

Hàm displayDynamic () sẽ tính toán khoảng thời gian từ lần cuối cùng hiển thị biểu tượng cảm xúc động đến thời điểm hiện tại, nếu khoảng thời gian này vượt quá TIMEOUT, nó sẽ ngừng phát biểu tượng cảm xúc tĩnh và thiết lập chỉ mục biểu tượng cảm xúc động được hiển thị để bắt đầu. Khi các cử chỉ từ trái sang phải được đọc, chỉ mục bắt đầu là 0 và chỉ số này sẽ được tăng lên sau khi các cử chỉ từ trái sang phải được đọc lại. Nếu không, chỉ mục bắt đầu là chỉ mục cuối cùng của mảng DYNAMIC và chỉ số này sẽ bị giảm.

void displayDynamic (bool leftToRight) {

unsigned long currentTime = millis (); if (currentTime - beforeTime> TIMEOUT) {dIndex = leftToRight? 0: ARRAY_LENGTH (ĐỘNG) - 1; showStatic = false; } // Điều này được sử dụng để tránh vượt quá ranh giới. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex <= -1) {heartBeat (); dIndex = leftToRight? ARRAY_LENGTH (ĐỘNG) - 1: 0; } presTime = currentTime; matrixDisplay = DYNAMIC [leftToRight? dIndex ++: dIndex--]; }

Không có cử chỉ nào được đọc nếu vượt quá khoảng thời gian TIMEOUT, tính năng phát biểu tượng cảm xúc tĩnh sẽ được khôi phục.

Tải chương trình lên Seeeduino của bạn, tất cả đã xong. Chơi và có một niềm vui!

Bước 5: Mã

#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])) Ma trận ma trận_8x8; uint64_t matrixDisplay = 0; unsigned long presTime = 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; trước thời gian = currentTime; dIndex = leftToRight? 0: ARRAY_LENGTH (ĐỘNG) - 1; } // Điều này được sử dụng để tránh vượt quá ranh giới. if (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true; } matrix.writeOnePicture (matrixDisplay); ma trận.display (); chậm trễ (100); }

Đề xuất: