قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-09-2014, 05:40 PM المشاركة 49   
x4



السلام عليكم
تم تحديث المشروع حيث أضيف اليه ريموت كونترول حيث يتم ربطه مع سيستم عن طريق RS485

أعتمدت شفره واحده لتشغيل الاحمال وبتالي اي موديل يجب ارسال نفس الشفرات لكي يتحكم بالاحمال
على سبيل مثال هذا الكود يتحكم بغرفه
كود:
switch(state_load)
                 {
                  case 11: load1=1;send_data(11);break;
                  case 10: load1=0;send_data(10);break;
                  case 21: load2=1;send_data(21);break;
                  case 20: load2=0;send_data(20);break;
                  case 31: load3=1;send_data(31);break;
                  case 30: load3=0;send_data(30);break;
                  case 41: load4=1;send_data(41);break;
                  case 40: load4=0;send_data(40);break;
                  case 51: load5=1;send_data(51);break;
                  case 50: load5=0;send_data(50);break;
                  case 251: load1=1;load2=1;load3=1;load4=1;load5=1;send_data(251);break;
                  case 250: load1=0;load2=0;load3=0;load4=0;load5=0;send_data(250);break;
                 default: break;
                 }
حسب ماتلاحظون كود 11 يشغل حمل 1 و10 يطفئ حمل رقم 1

مثلا اريد تحكم منول من خلال سويج
كود:
if(sw_load1==0)
                        {
                         if(load1==0)codeing=11;
                         else codeing=10;
                         delay_ms(250);
                        }
هذا كود من نفس البرنامج

اما اذا ردت التحكم به من ريموت كونترول
كود:
switch (value){

                                                 case 1: if(address_rooms==1)
                                                                           {
                                                                            if(Check_bit(state_flag[0],0))send_data(10);
                                                                            else send_data(11);
                                                                           }
من كمبيوتر
كود:
private void Load1_Click(object sender, EventArgs e)
                    {
                        Console.Beep(); 
                        if (!sp.IsOpen) 
                           // sp.Close();
                        sp.Open();
                       if (flag_load[0] == 0)
                        {
                            flag_load[0] = 1;


                            sp.Write("S01011T"); sp.Write("S01011T");

                            Load1.BackColor = Color.Yellow;
                            textBoxload1.Text = "LOAD1 WAIT";
                            
                        }
                        else
                            if (flag_load[0] == 1)
                            {
                                flag_load[0] = 0;
                                state_all_load = 0;
                                sp.Write("S01010T"); sp.Write("S01010T");

                                Load1.BackColor = Color.Orange;

                                textBoxload1.Text = "LOAD1 WAIT";
                            
                                
                            }
                        
                       // sp.Close();
                    }
يعني كل واحد له طريق ارسال كود معين ولما أستقبله اخبره ارسل كود الي يشغل حمل
يعني مثلا بريموت كونترول اذا اختاريت غرفه 1 وحمل رقم 1 راح ارسل كود معين انا أختاره بحيث أنظم البرنامج عليه ولما أستقبله واعرف ان هذا الكود لغرفه 1 و حمل 1 ابدء بأرسال الكود حمل مطلوب وبهذه الطريقه اي موديل اربطه مع سيستم لايهم كيف يحاكي نفسه ولكن مهم ان مستقبله ترسل كود مقابل للحمل ورقم الغرفه
على سبيل مثال ارد أضافه GSM فهنا اتعامل بأي كود اريد مثلا R1L1ON يعني غرفه 1 شغل لي حمل رقم 1 فعندما تستقبل مستقبله هذه البيانات من GSM راح ترسل البيانات عن طريق RS485 معطيه عنوان غرفه وكود تشغيل حمل رقم 1 الي أفترضته 11
ارى هذه طريقه ممتازه لانه يتيح لي ربط عدد غير محدود من موديلات التحكم (( كل موديل مستقل عن موديلات أخرى وكل موديل له عنوان لاننا نتعامل مع البرتوكول RS485))

يعني انت مخير بتصميم ريموت كونترول ولكن انت مجبر فقط على انك
1- ترسل للماستر الرئيسي كود واحد وهذا كود يتم من خلال ماستر ارساله الى slave
2- بعدها يقوم slave بالرد على ماستر ويعطيه البيانات جديده حول حاله حمل هل هو OFF ام ON
حيث يستقبلها ماستر ويعيد ارسال هذه البيانات الى كل موديلات مرتبطه معه لكي يعرف كل موديل مثلا هل حمل رقم 1 أصبح ON ام OFF حيث تلاحظ وجود state_flag هذا يصبح=1 اذا حمل اصبح ON ويصبح=0 اذا حمل OFF

لماذا لانك تستخدم نفس زر لتشغيل والاطفاء وبتالي اذا قمت بتشغيل حمل من ريموت وأصبح في حاله ON المفروض كل موديلات عرفت ان هذا الحمل أصبح في حاله ON وبتالي لما تضغط على زر من كمبيوتر فالحمل سوف ينطفئ لانه خزنت كل موديلات ان state_flag=1 وبتالي اذا ضغطت على زر لنفس حمل من اي موديل فأن موديل سوف يرسل كود أطفاء

بالبدايه لم قم بعمليه مخاطبه بين ماستر وموديلات وبتالي كل موديل صار مستقل بنفسه مثلا ضغطت على سويج أشتغل حمل بس ريموت كونترول ما راح يعرف ان حمل أشتغل لذلك لما أضغط على زر تحكم لنفس حمل راح يرسل له كود تشغيل أيضا وبتالي أظنها ليس عمليه تحكم صحيحه وعليه قمت بتصيح ذلك كما ذكرت لكم
وهذه هي الاكواد مخاطبه

تحديث بيانات كمبيوتر
كود:
void send_code_to_computer(char *code_load_to_pc) // update data in computer
{
 bytetostr(kk[2],txt);
 state_load[0]=0;//0 mean null
 strcat(state_load,code_load_to_pc);
 if(kk[2]<100){ state_load[2]='0';  cont_txt=3;}
 else  cont_txt=2;
 for(x=0;x<4;x++)if(txt[x]!=' ')
                                {
                                 state_load[cont_txt]=txt[x];
                                 cont_txt++;
                                }
 state_load[cont_txt+1]=0;
 strcat(state_load,"ST");
 uart_send_code_to_computer(state_load);
}
تحديث بيانات مستقبله ريموت كونترول
كود:
void send_code_to_IR_reciver(char data_to_ir,char address_rooms ) // update data in IR reciver (( state of load is OFF or ON ,))
{
  GIE_bit=0;
 dat[0]=101;
 dat[1]=address_rooms;
 dat[2]= data_to_ir;
 delay_ms(250);
 RS485Master_Send(dat,3,100);
 RS485Master_Send(dat,3,100);

 GIE_bit=1;

}

على فكره لايزال هناك مشكله في برنامج كمبيوتر ومكتوب بلغه #C وهي اذا ارسلت بيانات تحديث الى كمبيوتر مفروض يغير لون كبسه وهو فعلا يغير ذلك ولكن لما أخبره غيرلي كتابه موجود في text box او حتى تغير لونه مباشره يظهر لي رساله وتخبره توقف تنفيذ صراحه مشكله لم أستطع حلها لكون معلوماتي في #C ضعيفه واشياء الي تعلمتها فهي يعود فضل لله ومن ثم لاخ hamzazayyad

http://up.top4top.net/downloadf-top4...81611-rar.html

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 17-09-2014, 06:11 PM المشاركة 50   
افتراضي


على العموم هذا مشروع لايزال في حاله تحديث للوصول الى أفضل طريقه ممكنه

على فكره يمكن تصميم بورد صغير للتحكم بالاحمال أنظر صوره


وبالطبع يتصل بسيستم عن طريق RS485
طبعا يفضل ربط سويجات ميكانيكيه بالاضافه الى هذا سيستم ويعملان كسويج ذو طريقين
في هذه حاله يتم تصميم بورده تحكم بدون ريليات يعني فقط ازار التحكم وترسل البيانات الى ماستر رئيسي وماستر هو لي راح يشغل ريليات
وبتالي لوحه كونترول ستكون بالقرب من لوحه كهرباء

تحديث قادم أن شالله سيكون لما ذكرت .

على فكره طريقه الربط تكون كتالي
1- مستقبله IR ومرسله تربط في منتصف غرقه (( تكلمت عن هذه مرسله في مشاركه 46 ومنها تربط الى كارت ريموت كونترول
2- كل بوردات كونترول تربط الى سيستم عن طريق RS485 وهناك بورد ريلي لتحكم ارجو مراجعه مشاركه 46 لمشاهده طريقه الربط لان هذه هي طريقه معتمده
على عموم موضوع ليس بالبسيط ولكنه موضوع جيد أكيد يحتاج الى دعم اخوه خصوصا في موضوع تطبيقات اندرويد وابل
يعني مثلا نصمم بورد أيثرنت او واي في او بلوتوث وهذا موديل يتصل بسيستم عن طريق RS485

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 19-09-2014, 01:32 AM المشاركة 51   
افتراضي


موضوع رائع يجب ان يحظى باهتمام كبير !،،

عموما انا عملت على مشروع مشابه لهدف هذا المشروع وتم العمل عليه بكل نجاح ،، لكن كان باختلاف في التفاصيل


المشروع كان عبارة عن تحكم في اجهزة المنزل باستخدام أولا صفحة انترنت ـ،، بالإضافة الى تطبيق application ،، على الآيفون ،، وفي نفس الوقت التحكم بالاجهزة عن طريق Siri وهي خدمة التحكم عن طريق الصوت ،، المقدمة في أجهزة Apple!


المشروع كان يحتاج الى كثير من الجهد والوقت " وللأمانة لست ملما بكل تفاصيله ، حيث كنا 2الى 3 اشخاص ،، ويمكنكم رؤية هذا الفيديو للتعرف على المشروع اكثر :



وكمان هذا الفيديو



المشروع به الكثير من التفاصيل ،، سأعود لاحقا لأضيفا إذا احببتم ،، " لكن لا اعدكم بوضع كامل الكودات لانني لست الوحيد الذي عملت عليها ،، "


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 19-09-2014, 08:54 AM المشاركة 52   
افتراضي


موضوع رائع يجب ان يحظى باهتمام كبير !،،

عموما انا عملت على مشروع مشابه لهدف هذا المشروع وتم العمل عليه بكل نجاح ،، لكن كان باختلاف في التفاصيل


المشروع كان عبارة عن تحكم في اجهزة المنزل باستخدام أولا صفحة انترنت ـ،، بالإضافة الى تطبيق application ،، على الآيفون ،، وفي نفس الوقت التحكم بالاجهزة عن طريق Siri وهي خدمة التحكم عن طريق الصوت ،، المقدمة في أجهزة Apple!


المشروع كان يحتاج الى كثير من الجهد والوقت " وللأمانة لست ملما بكل تفاصيله ، حيث كنا 2الى 3 اشخاص ،، ويمكنكم رؤية هذا الفيديو للتعرف على المشروع اكثر :

Siri Control House Devices - YouTube


وكمان هذا الفيديو

iOS application control House Devices - YouTube


المشروع به الكثير من التفاصيل ،، سأعود لاحقا لأضيفا إذا احببتم ،، " لكن لا اعدكم بوضع كامل الكودات لانني لست الوحيد الذي عملت عليها ،، "
السلام عليكم
مجهود جميل ولكن نتمنى منكم ان يتم شرح ذلك فالهدف هو هو وصل الى مشروع ممكن ان ينتفع به جميع وهو أظنه مشروع رائع اذا تم دعمه بكل تفاصيله
خصوصا هذا مشروع مكلف عند شركات العالميه
للعلم هذا مشروع متاح للجميع
شكرا جزيلا لكم
تحياتي


abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:
قديم 19-09-2014, 09:43 PM المشاركة 53   
افتراضي


جميلة الفكرة عن طريق برنامج الصوت على الهاتف
أردت مساعدتكم
لكني للأسف مازلت مبتدءا
وفقكم الله


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 21-09-2014, 04:47 PM المشاركة 54   
افتراضي


السلام عليكم
تحديث جديد للمشروع للعلم هذا تحديث لايشمل برنامج كمبيوتر لوجود مشاكل فيه لم أستطع حلها
1- في ماستر الرئيسي تم تزويده ببيان حاله الغرف ولكن يحتاج اتصال مره واحده فقط مع اي غرفه وراح يظهرلك اي حمل في حاله ON او اي حمل في حاله OFF
واتصال هو فقط اي يحمل يتم تشغيله سوف يتم تسحيل حاله حمل
2- برنامج مسؤول عن اي غرفه هو مشابه في كل غرف عدا عنوان الغرفه لانها تعمل بالبرتوكول RS485 حيث تم زياده مداخل الى 8 ومخرج الى 8
للعلم حسب مارأيت في تصميم البيت الذكي من شركات عالميه ان كل كارت يصمم 8 مداخل و8 مخارج
3- في حاله أنقطاع التيار الكهربائي فأن احمال سيتم تشغيلها وفق أخر تشغيل لها
طبعا يمكنكم أضافه وقت تأخيري مثلا 10 ثواني او 30 ثانيه

لكن حاليا سيتم توقف في هذا الموضوع لعدم أمتلاك الوقت



http://up.top4top.net/downloadf-top4...69951-rar.html


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 21-09-2014 الساعة 04:58 PM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 22-09-2014, 05:04 AM المشاركة 55   
افتراضي


السلام عليكم
تحديث جديد للمشروع للعلم هذا تحديث لايشمل برنامج كمبيوتر لوجود مشاكل فيه لم أستطع حلها
1- في ماستر الرئيسي تم تزويده ببيان حاله الغرف ولكن يحتاج اتصال مره واحده فقط مع اي غرفه وراح يظهرلك اي حمل في حاله ON او اي حمل في حاله OFF
واتصال هو فقط اي يحمل يتم تشغيله سوف يتم تسحيل حاله حمل
2- برنامج مسؤول عن اي غرفه هو مشابه في كل غرف عدا عنوان الغرفه لانها تعمل بالبرتوكول RS485 حيث تم زياده مداخل الى 8 ومخرج الى 8
للعلم حسب مارأيت في تصميم البيت الذكي من شركات عالميه ان كل كارت يصمم 8 مداخل و8 مخارج
3- في حاله أنقطاع التيار الكهربائي فأن احمال سيتم تشغيلها وفق أخر تشغيل لها
طبعا يمكنكم أضافه وقت تأخيري مثلا 10 ثواني او 30 ثانيه

لكن حاليا سيتم توقف في هذا الموضوع لعدم أمتلاك الوقت



http://up.top4top.net/downloadf-top4...69951-rar.html
ملاحظه// لان البروتيس يصبح بطيئ عند تشغيل دائره ريموت لذا عندما تختار رقم الغرفه وتضغط على حمل1 انتظر قليلا حيث راقب مرسله تبدء بالارسال وبعد انتهاء من ارسال الكود من مرسل يومض ليد موجود في مستقبله ثم ينطفئ هذا دليل على انه ارسل الكود
انتظر قليلا حيث يتم ارسال الكود الى ماستر بعد ذلك يقوم ماستر بتوجيه الامر الى الغرفه معينه
وبعدما يستجيب حمل موجود في الغرفه تعيد ارسال feed back الى ماستر ليقوم ماستر بتحديث البيانات ومن ثم يرسلها الى كمبيوتر لكي يعطيك حاله الاحمال الجديده ومنها ايضا يرسلها الى رسيفر لريموت كونترول لكي يحدث هو اخر حاله الحمل اذا كان ON او OFF
الغايه من معرفه الحمل ON او OFF هو اذا انت شغلت الحمل في غرفه معينه مفروض اذا ضغطت الزر من كمبيوتر او من ريموت المفروض يكون امر أطفاء
وبتالي كل جهاز التحكم يعرف وضعيه كل حمل وعلى هذا اساس يرسل الكود مناسب
تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 22-09-2014, 05:58 AM المشاركة 56   
افتراضي


شرح الكود room1
حيث هنا أعطينا عنوان 1 لغرفه1
كود:
 RS485Slave_Init(1);              // Intialize MCU as slave, address 1
ثم هيئنه منكامله 74hc595 واخبرناها لديه ايسي واحد فقط
كود:
ic_74hc595_init(1);
ثم عملنا لها تصفير للمتكامله 74hc595
كود:
for(x=0;x<8;x++)ic_74hc595(x+1,0,&load);// reset output;

فعلنا انتربت عن طريق البروتوكول uart
كود:
 RCIE_bit = 1;                      // enable interrupt on UART1 receive
  TXIE_bit = 0;                      // disable interrupt on UART1 transmit
  PEIE_bit = 1;                      // enable peripheral interrupts
  GIE_bit = 1;                       // enable all interrupts

ثم نقرأ من ايبروم حيث خزنا فيها حاله الحمل
كود:
load_from_eeprom();
كود داله
كود:
void  load_from_eeprom()
{
  if(eeprom_read(0)==100)for(x=0;x<8;x++) state_flag[x]=EEPROM_Read(x+1);
  if(state_flag[0]==1)all_load |=1;
  else  all_load &=0xFE;
  
  if(state_flag[1]==1)all_load |=2;
  else  all_load &=0xFD;
  
  if(state_flag[2]==1)all_load |=4;
  else  all_load &=0xFB;
  
  if(state_flag[3]==1)all_load |=8;
  else  all_load &=0xF7;
  
  if(state_flag[4]==1)all_load |=16;
  else  all_load &=0xEF;

  if(state_flag[5]==1)all_load |=32;
  else  all_load &=0xDF;

  if(state_flag[6]==1)all_load |=64;
  else  all_load &=0xBF;

  if(state_flag[7]==1)all_load |=128;
  else  all_load &=0x7F;
}
بالبدايه نفحص العنوان 0 من ذاكره ايبروم فأذا كان==100 معناه توجد بيانات تمت خزنها
اما منغير all_load فهو يسجل حاله حمل هل هو ON او OFF
على سبيل مثال حمل رقم 4
اذا كان علم [state_flag[3 يساوي 1 اذن اجعل بت رقم 4 من متغير all_load يساوي =1 اما اذا كان [state_flag[3 يساوي 0 اذن اجعل بت رقم 4 من متغير all_load يساوي 0
لكي يساوي 1 اكتب all_load |=8 اي اعمل OR مع 0b00001000
لكي يساوي 0 اكتب all_load &=0xF7 اي اعمل & مع 0b11110111
وهكذا للبقيه

اما هذا الكود فهو يخص السويجات
كود:
if(sw_load1==0) old_state[0]=1;
          if(sw_load2==0) old_state[1]=1;
          if(sw_load3==0) old_state[2]=1;
          if(sw_load4==0) old_state[3]=1;
          if(sw_load5==0) old_state[4]=1;
          if(sw_load6==0) old_state[5]=1;
          if(sw_load7==0) old_state[6]=1;
          if(sw_load8==0) old_state[7]=1;
كود:
 if(sw_load1 && old_state[0]==1 )
                        {
                         old_state[0]=0;
                         if(state_flag[0]==0)codeing=11;
                         else codeing=10;
                        }
          if(sw_load2 && old_state[1]==1)
                        {
                         old_state[1]=0;
                         if(state_flag[1]==0)codeing=21;
                         else codeing=20;
                        }
          if(sw_load3 && old_state[2]==1)
                        {
                         old_state[2]=0;
                         if(state_flag[2]==0)codeing=31;
                         else codeing=30;
                        }
          if(sw_load4 && old_state[3]==1)
                        {
                         old_state[3]=0;
                         if(state_flag[3]==0)codeing=41;
                         else codeing=40;
                        }
          if(sw_load5 && old_state[4]==1)
                        {
                         old_state[4]=0;
                         if(state_flag[4]==0)codeing=51;
                         else codeing=50;
                        }
          if(sw_load6 && old_state[5]==1)
                        {
                         old_state[5]=0;
                         if(state_flag[5]==0)codeing=61;
                         else codeing=60;

                        }
          if(sw_load7 && old_state[6]==1)
                        {
                         old_state[6]=0;
                         if(state_flag[6]==0)codeing=71;
                         else codeing=70;
                        }
          if(sw_load8 && old_state[7]==1)
                        {
                         old_state[7]=0;
                         if(state_flag[7]==0)codeing=81;
                         else codeing=80;
                        }
          if(sw_All_load_on==0)
                        {
                         codeing=251;
                         delay_ms(250);
                        }
          if(sw_All_load_off==0)
                        {
                          codeing=250;
                         delay_ms(250);
                        }
فمثلا اضغط على سويج sw_load1 فان flag الذي اسمه old_state[1]=1 وبتالي مهما كنت ضاغط على سويج لن ينفذ الامر الا بعد ازاله يدك عنه
حيث
كود:
if(sw_load1 && old_state[0]==1 )
                        {
                         old_state[0]=0;
                         if(state_flag[0]==0)codeing=11;
                         else codeing=10;
                        }
لكل حمل له كود معين فالسهوله قلت هكذا 11 او 10
الرقم على اليمين هو رقم حمل والرقم على اليسار هو حاله الحمل مثلا
11 يعني اعطي امر تشغيل للحمل رقم 1 و 10 قم بأطفاء حمل رقم 1

مثلا 81 يعني شغل حمل رقم 8 و 80 اطفئ حمل رقم 8
وهكذا

اما كود التالي فهو يستقبل نفس الشفرات موجوده في سويجات وهذه شفرات يستقبلها من ماستر الرئيسي
كود:
void interrupt()
{
 RS485Slave_Receive(dat);
}
اما
كود:
check_load();
فهو يتفحص هل هناك امر من سويجات او من ماستر

كود:
void check_load()
{
 char state_load=0;
 if(codeing !=0)
                      {
                       state_load=codeing;
                       codeing=0;
                      }

 else
      {
        if (dat[5])  {                   // if an error detected, signal it by
                     dat[5] = 0;
                    }
        if (dat[4]) {                    // upon completed valid message receive
                dat[4] = 0;                    //   data[4] is set to 0xFF
                  state_load=dat[2];
               }
      }

  switch(state_load)
                 {
                  case 11: state_flag[0]=1;all_load |=1;send_data(1,1);break;
                  case 10: state_flag[0]=0;all_load &=0xFE;send_data(1,0);break;
                  case 21: state_flag[1]=1;all_load |=2;send_data(2,1);break;
                  case 20: state_flag[1]=0;all_load &=0xFD;send_data(2,0);break;
                  case 31: state_flag[2]=1;all_load |=4;send_data(3,1);break;
                  case 30: state_flag[2]=0;all_load &=0xFB;send_data(3,0);break;
                  case 41: state_flag[3]=1;all_load |=8;send_data(4,1);break;
                  case 40: state_flag[3]=0;all_load &=0xF7;send_data(4,0);break;
                  case 51: state_flag[4]=1;all_load |=16;send_data(5,1);break;
                  case 50: state_flag[4]=0;all_load &=0xEF;send_data(5,0);break;
                  case 61: state_flag[5]=1;all_load |=32;send_data(6,1);break;
                  case 60: state_flag[5]=0;all_load &=0xDF;send_data(6,0);break;
                  case 71: state_flag[6]=1;all_load |=64;send_data(7,1);break;
                  case 70: state_flag[6]=0;all_load &=0xBF;send_data(7,0);break;
                  case 81: state_flag[7]=1;all_load |=128;send_data(8,1);break;
                  case 80: state_flag[7]=0;all_load &=0x7F;send_data(8,0);break;
                  case 251:all_load=0xFF;for(x=0;x<8;x++)state_flag[x]=1 ;for(x=0;x<8;x++)ic_74hc595(x+1,1,&load); send_data(255,0);break;
                  case 250:all_load=0;for(x=0;x<8;x++)state_flag[x]=0; for(x=0;x<8;x++)ic_74hc595(x+1,0,&load);send_data(255,0);break;
                 default: break;
                 }
  codeing=0;
}
هنا تلاحظ هذا الكود لقراءه الكود من سويجات في حاله الضغط عليها
كود:
if(codeing !=0)
                      {
                       state_load=codeing;
                       codeing=0;
                      }
متغير codeing هو فقط لتميز بين اذا اشاره جاءت من سويجات او ماستر عبر بروتوكول RS485

اما لقراءه الشفره من RS485
كود:
if (dat[4]) {                    // upon completed valid message receive
                dat[4] = 0;                    //   data[4] is set to 0xFF
                  state_load=dat[2];
               }
اما كود switch هو لتنفيذ الامر وحسب الشفره
مثلا تشغيل حمل 1
كود:
case 11: state_flag[0]=1;all_load |=1;send_data(1,1);break;
هنا جعلنا state_flag[0]=1 وجعلنا متغير all_load |=1 للدلاله على ان حمل أشتغل ومن ثم نستدعي الداله send_data


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 22-09-2014 الساعة 06:23 AM


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 05:05 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)