كود البحث

كيفية استخدام شاشة LED ذات سبعةSegments مع الأردوينو

كيفية استخدام شاشة LED ذات سبعةSegments مع الأردوينو

شاشات العرض LED ذات السبعة segmentos موجودة في كل مكان من حولنا - من الساعات الرقمية وأجهزة المطبخ إلى مؤشرات طوابق المصاعد ولوحات النتائج. إنها واحدة من أكثر الطرق بديهية لعرض المعلومات الرقمية، وتعلم التحكم بها باستخدام Arduino هو مهارة أساسية لأي هاوي للإلكترونيات. سيوجهك هذا الدليل لبناء سائق عرض بسيط ولكنه متعدد الاستخدامات يمكنه العد من 0 إلى 9، وهو مصمم للعمل مع كل من الشاشات ذات الأنود المشترك والكاثود المشترك. يمكنك استخدام هذا المشروع كأساس لبناء مجموعة متنوعة من الأجهزة العملية، مثل عداد رقمي لورشتك، أو قراءة حرارة لمحطة الطقس، أو مؤقت للعبة لوحية، أو مسجل نقاط بسيط لليلة الألعاب العائلية التالية.

كيفية استخدام شاشة LED سباعية القطاعات مع الأردوينو
كيفية استخدام شاشة LED سباعية القطع مع أردوينو

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

لمتابعة هذا المشروع، ستحتاج إلى المكونات التالية. الأسلاك بسيطة، وقائمة المكونات قليلة، مما يجعل هذا بناءً مثاليًا للمبتدئين.

  • أردوينو أونو (أو أي لوحة متوافقة)
  • شاشة LED بسعة 7 segmentos (كاثود مشترك أو قداسة مشتركة)
  • 8 مقاومات 1 كيلو أوم (560 أوم إلى 1 كيلو أوم تعمل بشكل جيد)
  • أسلاك التوصيل
  • لوحة دوائر كهربائية
    كيفية استخدام شاشة LED سباعية القطع مع أردوينو
    كيفية استخدام شاشة LED سباعية الأرقام مع أردوينو

دليل التوصيل

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

Arduino code to update the I2C address on the VL53L0X
كود أردوينو لتحديث عنوان I2C على VL53L0X — Arduino code to update the I2C address on the VL53L0X

كما هو موضح في الفيديو، قم بتوصيل دبابيس сегменты العرض (A إلى G، ونقطة العشرية) بدبابيس الأردوينو 2 إلى 9 بالترتيب. يجب أن يحتوي كل دبوس сегмент على مقاومة بقيمة 1 كيلو أوم على التوالي. يجب توصيل الدبوس المشترك (أنود أو كاثود، حسب عرضك) إلى 5 فولت أو أرضي على التوالي. من المهم استخدام مقاومات فردية لكل сегмент بدلاً من مقاومة مشتركة واحدة. هذا يضمن اتساق السطوع عبر جميع сегменты، بغض النظر عن عددها المضاء في آن واحد. مع مقاومة واحدة، سيتم تقسيم التيار بشكل غير متساوٍ، مما يتسبب في ظهور بعض الأرقام بشكل أضعف من الأخرى.

شرح الكود

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

#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

السطر الأول هو الإعداد الأكثر أهمية. يجب عليك ضبطtypeمتغير إلى1إذا كنت تستخدم شاشة ذات أنود مشترك و0إذا كنت تستخدم عرض الكاثود المشترك. هذه القيمة الفردية تخبر الشيفرة ما إذا كان يجب عكس إشارات المنطق، مما يضمن إضاءة القطاعات الصحيحة.

السطور التالية تحدد دبابيس Arduino المتصلة بالشاشة.displayPinsالمصفوفة تحتفظ بأرقام الدبابيس للقطاعات A إلى G، وdicimalPointيحدد السلك للنقطة العشرية. إذا كنت ترغب في استخدام أسلاك مختلفة، يمكنك تعديل هذه القيم، ولكن يُوصى بالحفاظ عليها بالترتيب التسلسلي من أجل البساطة.

يتضمن الكود دالة مخصصة،writeDigit(int digit)، والذي هو الطريقة الأساسية لعرض رقم. يمكنك استدعاء هذه الدالة من الشيفرة الخاصة بك لعرض أي رقم من 0 إلى 9. على سبيل المثال، لعرض الرقم 5، عليك ببساطة استدعاءwriteDigit(5);تتعامل الوظيفة مع مهمة معقدة تتمثل في البحث عن نمط المقطع الصحيح وتعيين الدبابيس وفقًا لذلك. وظيفة مساعد أخرى،convertHighLow(int v)يتولى تحويل المنطق بين الشاشات ذات الأنود الشائع والكاثود الشائع، لذا لا داعي للقلق بشأن المنطق الداخلي.

عرض المشروع المباشر

بمجرد الانتهاء من التوصيلات ورفع الشيفرة، سيبدأ الأردوينو عد الأرقام من 0 إلى 9، مع عرض كل رقم لمدة ثانية واحدة على شاشة العرض المكونة من سبع قطع. بعد الوصول إلى الرقم 9، ستضيء النقطة العشرية لمدة ثلاث ثوانٍ قبل أن يبدأ العد من جديد. كما هو موضح في الفيديو، فإن استخدام مقاومات فردية يضمن أن تبقى درجة سطوع الأرقام متسقة، سواء كانت تعرض قطعة واحدة (مثل الرقم 1) أو جميع القطع السبع (مثل الرقم 8). هذه تعتبر تحسينًا كبيرًا مقارنة باستخدام مقاومة واحدة، والتي ستتسبب في تباينات ملحوظة في السطوع.

فصول

  • مقدمة في شاشة العرض ذات السبعة أجزاء
  • :22 فهم الشاشات ذات السبعة أجزاء
  • [01:09] توصيل الأنود المشترك مقابل توصيل الكاثود المشترك
  • [03:25] توصيل خطوة بخطوة مع المقاومات
  • [06:07] اعتبارات العرض والسطوع
  • [08:26] شرح الكود والتكوين
  • [14:25] إعداد ودوال الحلقة الرئيسية
  • [16:33] الخاتمة والتطبيقات

الصور

كيفية استخدام شاشة LED سباعية الأجزاء مع أردوينو
كيفية استخدام شاشة LED سباعية الأجزاء مع أردوينو
كود أردوينو لتحديث عنوان I2C على VL53L0X
كود أردوينو لتحديث عنوان I2C على VL53L0X
كيفية استخدام شاشة LED ذات سبعة segmentos مع Arduino
كيفية استخدام شاشة LED ذات سبعة segmentos مع Arduino
كيفية استخدام شاشة العرض ذات السبعةSegments LED مع Arduino
كيفية استخدام شاشة العرض ذات السبعةSegments LED مع Arduino
عرض LED 74HC595: شرح الرقم السبع
عرض LED 74HC595: شرح الرقم السبع
558-Lesson 21: Using a Seven-Segment Display | Arduino Step-by-Step Course
اللغة: C++
/*
 *  Robojax Arduino Step-by-Step Course
 * Lesson 21: Seven-Segment Display
 * Display number on seven-segment display with Arduino

   Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
   or watch this https://youtu.be/f3GqRMQ8jYs

 * Written by Ahmad Shamshiri for Robojax (Robojax.com)
 * on December 07, 2018 at 22:34 in Ajax, Ontario, Canada

 * 
  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

// array for seven-segment LED values. Do not change. 
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = { 
        { 0,0,0,0,0,0,1 },  // = 0
        { 1,0,0,1,1,1,1 },  // = 1
        { 0,0,1,0,0,1,0 },  // = 2
        { 0,0,0,0,1,1,0 },  // = 3
        { 1,0,0,1,1,0,0 },  // = 4
        { 0,1,0,0,1,0,0 },  // = 5
        { 0,1,0,0,0,0,0 },  // = 6
        { 0,0,0,1,1,1,1 },  // = 7
        { 0,0,0,0,0,0,0 },  // = 8
        { 0,0,0,0,1,0,0 }   // = 9     
        }; 
/*
 * 
 * @brief Writes digit to display 
 * @param digit (integer)
 * @return no return value
 * Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
 */        
void writeDigit(int digit) {
  // Robojax Seven-Segment Display for Arduino
  Serial.print(digit);
  Serial.print(" ");

   int digitValue;
  for (int i=0; i < 7; i++) 
  {

      digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
      Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor

  }// for i
}//writeDigit ends here

/*
 * 
 * @brief Converts HIGH and LOW based on the "type" variable value
 * if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
 * @param v (integer)
 * @return the convertedValue
 * Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
 */  
int convertHighLow(int v)
{
  int convertedValue;
    if(type ==0)
    {
      convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
    }else{
      convertedValue = v;// if common cathode, keep it the same
    } 

    return convertedValue;
}

void setup() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
  for(int d=0; d<8; d++)
  {
    pinMode(displayPins[d], OUTPUT);// set pin as output
    
  }
   pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
   digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode

  Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here


void loop() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
 for (int i=0; i<=9 ; i++) {
   writeDigit(i); 
   Serial.println("=====");
   delay(1000);
  }
  digitalWrite(dicimalPoint,LOW);// turn decimal point ON
  delay(3000);
 // writeDigit(4);
  // delay(3000);

}// loop ends here

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

ملفات📁

ملفات أخرى