السبت، 26 يناير، 2013

seven 7 segment 2 المقطعات السباعية الجزء الثاني 2

seven 7 segment 
 المقطعات السباعية الجزء الثاني 


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



لنبدأ بالمعدات :




سنحتاج نفس المعدات التي استخدمناها في الجزء الأول من هذه التجربة و هي :
1) بطاقة أردوينو  Arduino .
2) اسلاك توصيل Solderless Jumper 
3)مقطّع سُباعي 7segment " تغذية مشتركة CA أو سالب مشترك CC "
4) لوحة تعليمية مثقوبة BreadBoard .
5) مقاومات 150 أوم 
6) ترانزستور 2N2222 أو ما يكافئه 

طريقة التوصيل :
سنبدأ بتوصيل مقطعين سُباعين معاً , هذا التعليب يحوي على مقطعين سباعين بنفس مداخل التحكم , و لكل خانة هناك مدخل مشترك .

 و نعتمد على هذا الجدول لنوضح طريقة التوصيل 

الترانزستور نضعه ليقود المدخل المشترك في المقطّع السباعي 
و تذكر أن توصل D10,D11 من الأردوينو إلى قاعدة الترانزستور ليعمل كمفتاح وصل- فصل .

البرمجة 

الفكرة الرئيسية التي يرتكز عليها التحكم في أكثر من مقطع سُباعي واحد مباشرة من الأردوينو هي مبدأ يسمى Multiplexing و هو قائم على فتح"إضاءة" و إغلاق الباعث الضوئي في المقطع السباعي بسرعة كبيرة بحيث ترى الضوء المتقطع سريع التردد كأنه ضوء ثابت .

هذا ما سنراه في هذا البرنامج أدناه :
//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 http://www.gnu.org/licenses/

//****************************************************
//Name :Mohannad Rawashdeh .
//Date "30/3/2013 3:00pm
// Description: This  Code for using a 7segment Common Cathode 
//2 Digit to Read Potentiometer Value and Mapping it between 0-99 Using arduino 
// Programmed for http://www.Genotronex.com
                
//****************************************************************

int i=5;
int j=0;
float N=0;
int Tens=0;
int Ones=0;
float d=0.00;
boolean True=1;
boolean False=0;
void setup() {
   // Define Pins
        pinMode(2, OUTPUT); //expression about g
        pinMode(3, OUTPUT); //expression about f
        pinMode(4, OUTPUT); //expression about a
        pinMode(5, OUTPUT); //expression about b
        pinMode(6, OUTPUT); //expression about e 
        pinMode(7, OUTPUT); //expression about d
        pinMode(8, OUTPUT); //expression about c
        pinMode(9, OUTPUT);  ////expression about dot
        pinMode(10,OUTPUT);//Digit one
        pinMode(11,OUTPUT);//digit two 
        pinMode(A0,INPUT);
}  
        void one(){
         digitalWrite(2,False);
         digitalWrite(3,False);
         digitalWrite(4,False);
         digitalWrite(5,True);
         digitalWrite(6,False);
         digitalWrite(7,False);
         digitalWrite(8,True);
         digitalWrite(9,False);
        delay(i);
        }
        //------------------------------------------------
        void two(){
         digitalWrite(2,True);
         digitalWrite(3,False);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,True);
         digitalWrite(7,True);
         digitalWrite(8,False);
         digitalWrite(9,False);
         delay(i);
        }
        //--------------------------------------------------
        void zero(){
          digitalWrite(2,False);
         digitalWrite(3,True);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,True);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
        //---------------------------------------------------
        void clr(){
         digitalWrite(2,True);
         digitalWrite(3,True);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,True);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,True);
         
        }
        //----------------------------------------------------
         void three(){
         digitalWrite(2,True);
         digitalWrite(3,False);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,False);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
         //---------------------------------------------------
        void four(){
         digitalWrite(2,True);
         digitalWrite(3,True);
         digitalWrite(4,False);
         digitalWrite(5,True);
         digitalWrite(6,False);
         digitalWrite(7,False);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
         //---------------------------------------------------
        void five(){
         digitalWrite(2,True);
         digitalWrite(3,True);
         digitalWrite(4,True);
         digitalWrite(5,False);
         digitalWrite(6,False);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
        //----------------------------------------------------
        void six(){
         digitalWrite(2,True);
         digitalWrite(3,True);
         digitalWrite(4,True);
         digitalWrite(5,False);
         digitalWrite(6,True);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
        //----------------------------------------------------
        void seven(){
         digitalWrite(2,False);
         digitalWrite(3,False);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,False);
         digitalWrite(7,False);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
        //----------------------------------------------------
        void eight(){
         digitalWrite(2,True);
         digitalWrite(3,True);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,True);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
        //----------------------------------------------------
        void nine(){
         digitalWrite(2,True);
         digitalWrite(3,True);
         digitalWrite(4,True);
         digitalWrite(5,True);
         digitalWrite(6,False);
         digitalWrite(7,True);
         digitalWrite(8,True);
         digitalWrite(9,False);
         delay(i);
        }
        void digit_1_on(){
         digitalWrite(10,False);
        }
        void digit_2_on(){
         digitalWrite(11,False);
        }
        void digit_1_off(){
         digitalWrite(10,True);
        }
        void digit_2_off(){
         digitalWrite(11,True);
        }
        
        //----------------------------------------------------
         
        //****************************************************
        void loop(){
         N=analogRead(A0);
         
         N=map(N,0,854,0,99);
         N=constrain(N,0,99);      
          d=N/10;
  Tens=d;
  Ones=N-(Tens*10);
  switch (Tens){
    case 0:
    for(j=0;j<2;j++){
       digit_1_on();zero();digit_1_off();
        }
        break;
        //---------------------------------
    
    
    case 1:
    for(j=0;j<2;j++){
       digit_1_on();one();digit_1_off();
        }
        break;
        //---------------------------------
    
    case 2:
        for(j=0;j<2;j++){
       digit_1_on();two();digit_1_off();
        }
        break;
        //----------------------------------
        case 3:
        for(j=0;j<2;j++){
       digit_1_on();three();digit_1_off();
        }
        break;
        //----------------------------------
        case 4:
        for(j=0;j<2;j++){
       digit_1_on();four();digit_1_off();
        }
        break;
        //----------------------------------
        case 5:
        for(j=0;j<2;j++){
       digit_1_on();five();digit_1_off();
        }
        break;
        //----------------------------------
        case 6:
        for(j=0;j<2;j++){
       digit_1_on();six();digit_1_off();
        }
        break;
        //----------------------------------
        case 7:
        for(j=0;j<2;j++){
       digit_1_on();seven();digit_1_off();
        }
        break;
        //----------------------------------
        case 8:
        for(j=0;j<2;j++){
       digit_1_on();eight();digit_1_off();
        }
        break;
        //----------------------------------
        case 9:
        for(j=0;j<2;j++){
       digit_1_on();nine();digit_1_off();
        }
        break;
        //---------------------------------------------------
        //****************************************************
        //****************************************************
        
  }
  switch(Ones){
      case 0:
    for(j=0;j<2;j++){
       digit_2_on();zero();digit_2_off();
        }
        break;
        //---------------------------------
  
    case 1:for(j=0;j<2;j++){
       digit_2_on();one();digit_2_off();
        }
        break;
        //---------------------------------
    
    case 2:
        for(j=0;j<2;j++){
       digit_2_on();two();digit_2_off();
        }
        break;
        //----------------------------------
        case 3:
        for(j=0;j<2;j++){
       digit_2_on();three();digit_2_off();
        }
        break;
        //----------------------------------
        case 4:
        for(j=0;j<2;j++){
       digit_2_on();four();digit_2_off();
        }
        break;
        //----------------------------------
        case 5:
        for(j=0;j<2;j++){
       digit_2_on();five();digit_2_off();
        }
        break;
        //----------------------------------
        case 6:
        for(j=0;j<2;j++){
       digit_2_on();six();digit_2_off();
        }
        break;
        //----------------------------------
        case 7:
        for(j=0;j<2;j++){
       digit_2_on();seven();digit_2_off();
        }
        break;
        //----------------------------------
        case 8:
        for(j=0;j<2;j++){
       digit_2_on();eight();digit_2_off();
        }
        break;
        //----------------------------------
        case 9:
        for(j=0;j<2;j++){
       digit_2_on();nine();digit_2_off();
        }
        break;
    
       
        }
        
        }        

و الفيديو التالي يبين التطبيق المباشر للبرنامج :


رائع , الآن إذا لم تفهم بعد الMultiplexing فقم بتتغير التأخير الزمني الموجود في البرنامج و قم بتحميله و أنظر كيف تكون النتائج

حسناً لو أردنا توصيل 3 مقطّعات سُباعية , فسيكون بنفس التوصيل لمقطعين و بتوصيل المدخل D12 مع المشترك للخانة الثالثة 








و التوصيل لمقطّع سباعي ذو 4 خانات مشابه له مضافاً إليه D13 كمربط تحكم بالمدخل المشترك C4




التوصيل لمقطّع سباعي 4 خانات كالآتي 



و كود البرنامج موجود هنا 

//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 http://www.gnu.org/licenses/

//****************************************************
//Name :Mohannad Rawashdeh .
//Date "30/6/2012 3:00pm
// Description: this code used To read analoge data from pote with 4 seven seg.
//connect 10k with pote. in series . 
// Programmed for http://genotronex.blogspot.com/
//****************************************************************

int i=3;
int j=0;
float N=0;
int Tens=0;
int Ones=0;
float d=0.00;
int Hundreds=0;
int thousands=0;
unsigned long mul=0;
void setup() {
  Serial.begin(115200);
   // Define Pins
        pinMode(2, OUTPUT); //expression about g
        pinMode(3, OUTPUT); //expression about f
        pinMode(4, OUTPUT); //expression about a
        pinMode(5, OUTPUT); //expression about b
        pinMode(6, OUTPUT); //expression about e 
        pinMode(7, OUTPUT); //expression about d
        pinMode(8, OUTPUT); //expression about c
        pinMode(9, OUTPUT);  ////expression about dot
        pinMode(13,OUTPUT);//Digit one
        pinMode(12,OUTPUT);//digit two 
        pinMode(11,OUTPUT);//digit three 
        pinMode(10,OUTPUT);//digit four 
        pinMode(A0,INPUT);
}  
        void one(){
         digitalWrite(2,HIGH);
         digitalWrite(3,HIGH);
         digitalWrite(4,HIGH);
         digitalWrite(5,LOW);
         digitalWrite(6,HIGH);
         digitalWrite(7,HIGH);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
        delay(i);
        }
        //------------------------------------------------
        void two(){
         digitalWrite(2,LOW);
         digitalWrite(3,HIGH);
         digitalWrite(4,LOW);
         digitalWrite(5,LOW);
         digitalWrite(6,LOW);
         digitalWrite(7,LOW);
         digitalWrite(8,HIGH);
         digitalWrite(9,HIGH);
         delay(i);
        }
        //--------------------------------------------------
        void zero(){
          digitalWrite(2,HIGH);
         digitalWrite(3,LOW);
         digitalWrite(4,LOW);
         digitalWrite(5,LOW);
         digitalWrite(6,LOW);
         digitalWrite(7,LOW);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
        //---------------------------------------------------
        void clr(){
         digitalWrite(2,HIGH);
         digitalWrite(3,HIGH);
         digitalWrite(4,HIGH);
         digitalWrite(5,HIGH);
         digitalWrite(6,HIGH);
         digitalWrite(7,HIGH);
         digitalWrite(8,HIGH);
         digitalWrite(9,HIGH);
         
        }
        //----------------------------------------------------
         void three(){
         digitalWrite(2,LOW);
         digitalWrite(3,HIGH);
         digitalWrite(4,LOW);
         digitalWrite(5,LOW);
         digitalWrite(6,HIGH);
         digitalWrite(7,LOW);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
         //---------------------------------------------------
        void four(){
         digitalWrite(2,LOW);
         digitalWrite(3,LOW);
         digitalWrite(4,HIGH);
         digitalWrite(5,LOW);
         digitalWrite(6,HIGH);
         digitalWrite(7,HIGH);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
         //---------------------------------------------------
        void five(){
         digitalWrite(2,LOW);
         digitalWrite(3,LOW);
         digitalWrite(4,LOW);
         digitalWrite(5,HIGH);
         digitalWrite(6,HIGH);
         digitalWrite(7,LOW);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
        //----------------------------------------------------
        void six(){
         digitalWrite(2,LOW);
         digitalWrite(3,LOW);
         digitalWrite(4,LOW);
         digitalWrite(5,HIGH);
         digitalWrite(6,LOW);
         digitalWrite(7,LOW);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
        //----------------------------------------------------
        void seven(){
         digitalWrite(2,HIGH);
         digitalWrite(3,HIGH);
         digitalWrite(4,LOW);
         digitalWrite(5,LOW);
         digitalWrite(6,HIGH);
         digitalWrite(7,HIGH);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
        //----------------------------------------------------
        void eight(){
         digitalWrite(2,LOW);
         digitalWrite(3,LOW);
         digitalWrite(4,LOW);
         digitalWrite(5,LOW);
         digitalWrite(6,LOW);
         digitalWrite(7,LOW);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
        //----------------------------------------------------
        void nine(){
         digitalWrite(2,LOW);
         digitalWrite(3,LOW);
         digitalWrite(4,LOW);
         digitalWrite(5,LOW);
         digitalWrite(6,HIGH);
         digitalWrite(7,LOW);
         digitalWrite(8,LOW);
         digitalWrite(9,HIGH);
         delay(i);
        }
        void digit_1_on(){
         digitalWrite(13,HIGH);
        }
        void digit_2_on(){
         digitalWrite(12,HIGH);
        }
        void digit_1_off(){
         digitalWrite(13,LOW);
        }
        void digit_2_off(){
         digitalWrite(12,LOW);
        }
        void digit_3_on(){
         digitalWrite(11,HIGH);
        }
        void digit_4_on(){
         digitalWrite(10,HIGH);
        }
        void digit_3_off(){
         digitalWrite(11,LOW);
        }
        void digit_4_off(){
         digitalWrite(10,LOW);
        }
        
        
        
        //----------------------------------------------------
         
        //****************************************************
        void loop(){
         N=analogRead(A0);
         constrain(N,0,1021);
         Serial.println(N);
         thousands=N/1000;
         d=N/100;      
         Hundreds=d-(thousands*10);
         d=N/100;
         mul=N/100;         
         Tens=(d*10)-(mul*10); 
         d=N/10;
         mul=N/10;
         Ones=(d*10)-(mul*10);
         //------------------------------------
         //------------------------------------
         switch (thousands){
    case 0:
    for(j=0;j<2;j++){
       digit_1_on();zero();digit_1_off();
        }
        break;
        //---------------------------------
    
    
    case 1:
    for(j=0;j<2;j++){
       digit_1_on();one();digit_1_off();
        }
        break;
        //---------------------------------
    
    case 2:
        for(j=0;j<2;j++){
       digit_1_on();two();digit_1_off();
        }
        break;
        //----------------------------------
        case 3:
        for(j=0;j<2;j++){
       digit_1_on();three();digit_1_off();
        }
        break;
        //----------------------------------
        case 4:
        for(j=0;j<2;j++){
       digit_1_on();four();digit_1_off();
        }
        break;
        //----------------------------------
        case 5:
        for(j=0;j<2;j++){
       digit_1_on();five();digit_1_off();
        }
        break;
        //----------------------------------
        case 6:
        for(j=0;j<2;j++){
       digit_1_on();six();digit_1_off();
        }
        break;
        //----------------------------------
        case 7:
        for(j=0;j<2;j++){
       digit_1_on();seven();digit_1_off();
        }
        break;
        //----------------------------------
        case 8:
        for(j=0;j<2;j++){
       digit_1_on();eight();digit_1_off();
        }
        break;
        //----------------------------------
        case 9:
        for(j=0;j<2;j++){
       digit_1_on();nine();digit_1_off();
        }
        break;
        //---------------------------------------------------
        //****************************************************
        //****************************************************
        
  }
  switch(Hundreds){
      case 0:
    for(j=0;j<2;j++){
       digit_2_on();zero();digit_2_off();
        }
        break;
        //---------------------------------
  
    case 1:for(j=0;j<2;j++){
       digit_2_on();one();digit_2_off();
        }
        break;
        //---------------------------------
    
    case 2:
        for(j=0;j<2;j++){
       digit_2_on();two();digit_2_off();
        }
        break;
        //----------------------------------
        case 3:
        for(j=0;j<2;j++){
       digit_2_on();three();digit_2_off();
        }
        break;
        //----------------------------------
        case 4:
        for(j=0;j<2;j++){
       digit_2_on();four();digit_2_off();
        }
        break;
        //----------------------------------
        case 5:
        for(j=0;j<2;j++){
       digit_2_on();five();digit_2_off();
        }
        break;
        //----------------------------------
        case 6:
        for(j=0;j<2;j++){
       digit_2_on();six();digit_2_off();
        }
        break;
        //----------------------------------
        case 7:
        for(j=0;j<2;j++){
       digit_2_on();seven();digit_2_off();
        }
        break;
        //----------------------------------
        case 8:
        for(j=0;j<2;j++){
       digit_2_on();eight();digit_2_off();
        }
        break;
        //----------------------------------
        case 9:
        for(j=0;j<2;j++){
       digit_2_on();nine();digit_2_off();
        }
        break;
    
       //----------------------------------------------
       //************************************************
        }
        switch(Tens){
      case 0:
    for(j=0;j<2;j++){
       digit_3_on();zero();digit_3_off();
        }
        break;
        //---------------------------------
  
    case 1:for(j=0;j<2;j++){
       digit_3_on();one();digit_3_off();
        }
        break;
        //---------------------------------
    
    case 2:
        for(j=0;j<2;j++){
       digit_3_on();two();digit_3_off();
        }
        break;
        //----------------------------------
        case 3:
        for(j=0;j<2;j++){
       digit_3_on();three();digit_3_off();
        }
        break;
        //----------------------------------
        case 4:
        for(j=0;j<2;j++){
       digit_3_on();four();digit_3_off();
        }
        break;
        //----------------------------------
        case 5:
        for(j=0;j<2;j++){
       digit_3_on();five();digit_3_off();
        }
        break;
        //----------------------------------
        case 6:
        for(j=0;j<2;j++){
       digit_3_on();six();digit_3_off();
        }
        break;
        //----------------------------------
        case 7:
        for(j=0;j<2;j++){
       digit_3_on();seven();digit_3_off();
        }
        break;
        //----------------------------------
        case 8:
        for(j=0;j<2;j++){
       digit_3_on();eight();digit_3_off();
        }
        break;
        //----------------------------------
        case 9:
        for(j=0;j<2;j++){
       digit_3_on();nine();digit_3_off();
        }
        break;    
        }
        //--------------------------------------------
        //********************************************
         switch(Ones){
      case 0:
    for(j=0;j<2;j++){
       digit_4_on();zero();digit_4_off();
        }
        break;
        //---------------------------------
  
    case 1:for(j=0;j<2;j++){
       digit_4_on();one();digit_4_off();
        }
        break;
        //---------------------------------
    
    case 2:
        for(j=0;j<2;j++){
       digit_4_on();two();digit_4_off();
        }
        break;
        //----------------------------------
        case 3:
        for(j=0;j<2;j++){
       digit_4_on();three();digit_4_off();
        }
        break;
        //----------------------------------
        case 4:
        for(j=0;j<2;j++){
       digit_4_on();four();digit_4_off();
        }
        break;
        //----------------------------------
        case 5:
        for(j=0;j<2;j++){
       digit_4_on();five();digit_4_off();
        }
        break;
        //----------------------------------
        case 6:
        for(j=0;j<2;j++){
       digit_4_on();six();digit_4_off();
        }
        break;
        //----------------------------------
        case 7:
        for(j=0;j<2;j++){
       digit_4_on();seven();digit_4_off();
        }
        break;
        //----------------------------------
        case 8:
        for(j=0;j<2;j++){
       digit_4_on();eight();digit_4_off();
        }
        break;
        //----------------------------------
        case 9:
        for(j=0;j<2;j++){
       digit_4_on();nine();digit_4_off();
        }
        break;  
        }
        }        

اتمنى مع ختام هذه التدوينة أن أكون قد وفقت بطريق العرض .

و أتمنى سماع أرآئكم و و ردودكم حول الموضوع .

و في التدوينة المقبلة سنرى كيف نتحكم بالمقطّعات السباعية 

باستخدام مسجل الإزاحة Shift Register 74HC595

تحياتي .

2 التعليقات :

  1. موضوعك اكثر من رائع لاكن هل يمكن كتابة كود gsm modual و التحكم عن طريق رسائل sms

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.