كود البحث

استخدام شاشتي عرض LED من نوع TM1637 مكونتين من 4 أرقام مع أردوينو

استخدام شاشتي عرض LED من نوع TM1637 مكونتين من 4 أرقام مع أردوينو

هل احتجت يومًا إلى عرض قيمتين مختلفتين في نفس الوقت في مشروع Arduino الخاص بك؟ ربما تقوم ببناء محطة طقس تحتاج إلى عرض كل من درجة الحرارة والرطوبة، أو مراقب إمدادات الطاقة الذي يظهر الجهد والتيار في الوقت نفسه. استخدام شاشتين LED من نوع TM1637 مكونتين من 4 أرقام هو حل بسيط وموفر للتكاليف. ستظهر لك هذه الدليل كيفية توصيل وبرمجة اثنين من هذه الشاشات الشهيرة باستخدام لوحة Arduino واحدة، مما يمنحك القدرة على عرض معلومات مستقلة على كل شاشة. يمكنك استخدام هذه التقنية لمجموعة متنوعة من المشاريع، مثل:

  • بناء مقياس جهد مزدوج القناة لمراقبة مسارين للطاقة منفصلين.
  • إنشاء مؤقت تنازلي وعداد لفترات الزمن لمشروع سباقك التالي.
  • عرض الوقت الحالي على شاشة واحدة ودرجة الحرارة المحيطة على الشاشة الأخرى.
  • إنشاء لوحة نتائج للألعاب التي تتطلب لاعبين اثنين.

في هذا الدرس، سنقوم بتوصيل وحدتين من TM1637 إلى لوحة الأردوينو أونو وتشغيل مثال توضيحي يُظهر قيمًا مختلفة على كل شاشة. يستخدم TM1637 واجهة ثنائية الأسلاك (CLK و DIO)، مما يعني أن إضافة شاشة ثانية يتطلب فقط دبابيس رقمية إضافية على الأردوينو الخاص بك. لنبدأ! (في الفيديو عند 00:00)

المعدات المطلوبة

  • أردوينو أونو (أو أي لوحة متوافقة)
  • 2x وحدات عرض LED رقمية 7-قطعة TM1637 ذات 4 أرقام
  • أسلاك التوصيل
  • لوحة تجريبية (اختياري، لكنها مفيدة للبروتوتيب)

دليل الأسلاك

توصيل الشاشات بسيط. يحتوي نموذج TM1637 على أربعة أطراف: VCC و GND و DIO (البيانات) و CLK (الساعة). تشترك الشاشتان في توصيلات 5V و GND من الأردوينو، ولكن كل واحدة تحتاج إلى أطراف مخصصة خاصة بها لـ DIO و CLK. هذا يسمح للأردوينو بالتحكم فيهما بشكل مستقل. (في الفيديو عند 01:26)

إليك مخطط الأسلاك للمشروع:

بالنسبة للشاشة الأولى (الوحدة الزرقاء الأكبر في الفيديو)، قم بإجراء الاتصالات التالية:

  • VCCإلى أردوينو5فولت
  • GNDإلى أردوينوغند
  • ديوإلى دبوس رقمي من أردوينو١١
  • CLKإلى دبوس رقمي في أردوينو١٠

للعرض الثاني (الوحدة الأصغر)، قم بتوصيله كما يلي:

  • VCCإلى أردوينو5فولت
  • جادًّةإلى أردوينوجي ان دي
  • ديوإلى دبوس رقمي من أردوينو٦
  • CLKإلى دبابيس Arduino الرقمية٥

تذكر أن الكود والمكتبة تعملان بنفس الطريقة لكلا من وحدات TM1637 الأكبر والأصغر. (في الفيديو عند 01:00)

شرح الشيفرة

الكود يستخدم الـTM1637Displayالمكتبة، التي ستحتاج إلى تثبيتها. يمكنك القيام بذلك عن طريق الذهاب إلىرسم > تضمين المكتبة > إدارة المكتباتفي بيئة تطوير Arduino والبحث عن "TM1637". يقوم البرنامج بتعريف الأرجل لكل شاشة وينشئ كائنين للتحكم بها. دعونا نلقِ نظرة على الأجزاء الرئيسية التي ستحتاج إلى تكوينها لاستخدامك الخاص. (في الفيديو عند 02:31)

أولاً، تعريفات الدبابيس لكل وحدة عرض. ستحتاج إلى تغيير هذه لتتناسب مع التوصيلات الخاصة بك:

// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6

// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11

التالي، الـTEST_DELAYتتحكم المتغيرات في مدة عرض كل تسلسل اختبار. يمكنك تعديل ذلك لتسريع أو إبطاء العرض.

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   5000

الجزء الرئيسي من الشيفرة يستخدم الـshowNumberDec()دالة. تحتوي هذه الدالة على أربعة معلمات: الرقم الذي سيتم عرضه، ما إذا كان يجب ملء الأرقام السابقة الفارغة بالأصفار، عدد الأرقام التي يجب استخدامها، ومكان بدء الرقم على العرض. على سبيل المثال،display1.showNumberDec(23, false, 2, 0)سوف يعرض الرقم "23" بدءًا من الموضع 0. من خلال تغيير الوسيطة الأخيرة إلى 1 أو 2 أو 3، يمكنك نقل الرقم عبر العرض. (في الفيديو عند 05:23)

لإضافة شاشة ثالثة، ستقوم ببساطة بنسخ كتلة الكود لشاشة ما، وتغيير جميع "2" إلى "3"، وتخصيص دبوسين جديدين لصلات CLK و DIO للوحدة الجديدة. (في الفيديو عند 03:58)

عرض المشروع الحي

بمجرد تحميل الكود، سترى الشاشتين تعملان وتقوم بحذف شاشاتها. ثم يقوم العرض بتشغيل سلسلة من الاختبارات لإظهار كيفية التحكم في كل شاشة بشكل مستقل. أولاً، سيظهر الأرقام "23" و "34" على الشاشتين. بعد ذلك، يتنقل الكود لوضع هذه الأرقام في مواقع مختلفة على الشاشة ذات الأربعة أرقام (الموقع 0 و 1 و 2 و 3). بعد ذلك، يتم عرض الأعداد الأكبر "741" و "1562". أخيراً، يقوم بتشغيل حلقة عد من 0 إلى 1273 على كلا الشاشتين في نفس الوقت. وهذا يُظهر الوظائف الكاملة لاستخدام شاشتين في مشروع واحد. (في الفيديو عند 05:01)

الفصول

  • مقدمة لاستخدام شاشتين TM1637
  • :26 توصيل الشاشات بالأردوينو
  • [02:31] شرح الشيفرة
  • [05:01] عرض لتشغيل الشاشات

الصور

باستخدام شاشتي عرض LED من نوع TM1637 ذات أرباع الأرقام إضافيتين
باستخدام شاشتي عرض LED من نوع TM1637 ذات أرباع الأرقام إضافيتين
168-Using two more TM1637 4-digit LED displays
اللغة: C++
/*
 * Original code from https://github.com/avishorp/TM1637
 * Modified for Robojax video on October 28, 2018 at 15:05
 * This is an Arduino sketch to use two or more TM1637 seven-segment LED displays
 * 
 * Watch video instruction for this code:https://youtu.be/27KjMfPH1dk
 * 
 * by Ahmad Shamshiri, in Ajax, Ontario, Canada
 * 
 *  display2.showNumberDec(23, true, 2,1);
 *  showNumberDec(arg1, arg2, arg3, arg4);
 *  arg1 is the number to be displayed
 *  arg2 can be 'true' or 'false' and if true it fills empty spots with data[]
 *  arg4 position of starting number on the display can be either 0, 1, 2 or 3
 */
#include <Arduino.h>
#include <TM1637Display.h>

// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6

// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   5000


TM1637Display display1(CLK1, DIO1);// define display 1 object
TM1637Display display2(CLK2, DIO2);// define display 1 object

   uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };  // all segments clear    
   
void setup()
{
  // Robojax.com two or more TM1637 Display 20181029  
  display1.setBrightness(0x0f);// set brightness of display 1
  display2.setBrightness(0x0f);// set brightness of display 1  

 
  display1.setSegments(data);// fill display 1 with whatever data[] array has
  display2.setSegments(data);// // fill display 2 with whatever data[] array has  
// Robojax.com two or more TM1637 Display 20181029  
}

void loop()
{
 // Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,0);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,0);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
  
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,1);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,1);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,2);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,2);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,3);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,3);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds    
/////////////////////////////////////////////////
  display1.setSegments(data);// fill(clear) display with data[] array
  display1.showNumberDec(741);// display 1

  display2.setSegments(data);// fill(clear) display with data[] array  
  display2.showNumberDec(1562);// display 2
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds

// Robojax.com two or more TM1637 Display 20181029 
/////////////////////////////////////////////////
   display1.setSegments(data);// fill(clear) display 1 with data[] array
   display2.setSegments(data);// fill(clear) display 2 with data[] array   
  for(int i=0; i<=1273; i++)
  {
    display1.showNumberDec(i);// display from 0 to 1273 to display 1
    display2.showNumberDec(i);// display from 0 to 1273 to display 2    
  }
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds


// Robojax.com two or more TM1637 Display 20181029
  
}// loop end

الأشياء التي قد تحتاجها

الموارد والمراجع

ملفات📁

مكتبات أردوينو (ملف مضغوط)

Fritzing File

دليل المستخدم