جدول المحتويات:

أضئ عيد الحب الخاص بك مع مصفوفة متألقة: 5 خطوات
أضئ عيد الحب الخاص بك مع مصفوفة متألقة: 5 خطوات

فيديو: أضئ عيد الحب الخاص بك مع مصفوفة متألقة: 5 خطوات

فيديو: أضئ عيد الحب الخاص بك مع مصفوفة متألقة: 5 خطوات
فيديو: "كن نورك الخاص"|Be Your Own Light|الحلقة 01|ليو تاو / تشين هايلو / ليو يونينغ|مسلسل درامي حضري|YOUKU 2024, يوليو
Anonim
أضئ عيد الحب الخاص بك مع مصفوفة متألقة
أضئ عيد الحب الخاص بك مع مصفوفة متألقة

عيد الحب هو فرصة بالنسبة لك لإرسال رسائل حب. لماذا لا تجعل وجه LED ممتعًا بمكونات غير مكلفة للتعبير عن مشاعرك!

الخطوة 1: الأشياء المستخدمة في هذا المشروع

مكونات الأجهزة

  • Seeeduino V4.2
  • قاعدة الدرع
  • Grove - مصفوفة LED حمراء مع سائق
  • غروف - إيماءة (PAJ7620U2)

تطبيقات البرمجيات والخدمات عبر الإنترنت

اردوينو IDE

الخطوة الثانية: القصة

Image
Image

الخطوة 3: توصيل الأجهزة

صورة
صورة

في هذا المشروع ، نستخدم مستشعر الإيماءات كمدخل ونقدم الملاحظات إلى مشغل مصفوفة LED لتغذية مصفوفة LED الحمراء.

تحتاج إلى توصيل Grove - Gesture and the Grove - Red LED Matrix w / Driver بمنفذ I ^ 2 ^ C للدرع الأساسي المتصل بـ Seeeduino. ثم قم بتوصيل Seeeduino بجهاز الكمبيوتر عبر كابل USB.

الخطوة 4: برمجة البرمجيات

تتمثل خطة هذا المشروع في عرض الرموز التعبيرية الثابتة (وجه يبكي ووجه انتظار) في حالة عدم قراءة إيماءة يمنى أو يسرى.

عرض الرموز التعبيرية الديناميكية لتغيير موضع العين مع التحكم بالإيماءة اليسرى أو اليمنى عند قراءة إيماءة اليسار أو اليمين.

صورة
صورة

في موضع العين المحدد ، سيتم عرض قلب نابض على مصفوفة LED.

صورة
صورة

تم تصميم أنماط عرض LED بواسطة LED Matrix Editor ، يمكنك تغيير أو إضافة أنماط LED الخاصة بك في عروض البرامج أعلاه.

للاستعداد لهذا المشروع ، يلزم تثبيت Grove - Gesture و Grove - Red LED Matrix w / Driver و MsTimer2 مكتبات في Arduino IDE.

# تضمين "Grove_LED_Matrix_Driver_HT16K33.h"

# تضمين "MsTimer2.h" #include "paj7620.h" #include "Wire.h"

أثناء إجراء الإعداد ، قمنا بتهيئة وظائف Serial و matrix و MsTimer2. يُستخدم المسلسل المُهيئ لتصحيح أخطاء البرنامج ، لذلك ليس من الضروري الاتصال بجهاز الكمبيوتر أو استخدام 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 ، وسيزداد المؤشر بعد قراءة الإيماءات من اليسار إلى اليمين مرة أخرى. خلاف ذلك ، فإن فهرس البداية هو آخر فهرس لصفيف DYNAMIC ، وسوف ينخفض الفهرس.

عرض باطل ديناميكي (منطقي يسار إلى اليمين) {

CurrentTime طويل بدون توقيع = ميلي () ؛ إذا (currentTime - prevTime> TIMEOUT) {dIndex = leftToRight؟ 0: ARRAY_LENGTH (ديناميكي) - 1 ، showStatic = خطأ ؛ } // يستخدم لتجنب تجاوز الحدود. إذا (dIndex> = ARRAY_LENGTH (DYNAMIC) || المؤشر <= -1) {heartBeat () ؛ dIndex = leftToRight؟ ARRAY_LENGTH (ديناميكي) - 1: 0 ، } prevTime = CurrentTime ؛ matrixDisplay = ديناميكي [leftToRight؟ dIndex ++: dIndex--] ؛ }

لن تتم قراءة أي إيماءة إذا تم تجاوز فترة المهلة ، فستتم استعادة تشغيل الرموز التعبيرية الثابتة.

قم بتحميل البرنامج على جهاز Seeeduino الخاص بك ، كل ذلك تم. العب واستمتع!

الخطوة 5: الكود

# تضمين "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])) مصفوفة_ 8x8 ؛ uint64_t matrixDisplay = 0 ؛ prevTime طويل بدون توقيع = مللي () ؛ int8_t sIndex = 0 ؛ عرض منطقي ثابت = صحيح ؛ 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} ؛ باطل displayStatic (void) {if (showStatic) {matrixDisplay = STATIC [sIndex]؛ الفهرس = (الفهرس + 1)٪ ARRAY_LENGTH (ثابت) ، }} void heartBeat () {for (uint8_t i = 0؛ i TIMEOUT) {showStatic = false؛ prevTime = CurrentTime ، dIndex = leftToRight؟ 0: ARRAY_LENGTH (ديناميكي) - 1 ، } // يستخدم لتجنب تجاوز الحدود. إذا (dIndex> = ARRAY_LENGTH (DYNAMIC) || dIndex TIMEOUT) {showStatic = true ؛ } matrix.writeOnePicture (matrixDisplay) ؛ matrix.display () ، تأخير (100) ؛ }

موصى به: