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

   

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



السلام عليكم

هذه الفكرة طيبة جداا

const char chot =30;
const int price_initial=450;
هل ممكن عمل
char
لحساب الامتار مثلا مئت متر

const char meter =100;
واخرى لحساب
النتبضات لنا كل سيارة لها نبضات لدخل كل نوع لهو نبضات و التعديل على كل سيارة
const char pulse =1000;
و دالة اخرى للثواني
const char seconde =10;

طيب اخي ساشرح لكم موضوع

الحريف ياخذ السيارة في النهار من الساعة 5 صباحا الى 9 ليلا بثمن
0.125 لركوب و 30 كل نلت متر او 10 ثواني

و من الساعة 9 ليلا الى 5 صباحا يتغير العد اوتومتيكي

ليصبح 200 لركوب و 45 لكل من المترار المقطوعة و ل10 ثواني انتضار

اصبح الامر معقد بعض الشيئ

اخي اشرح لي منفضلكم الكود

void calculate_price()
{
// value_start=125 start value
// car is stop then Price =125 , add 30 every 10sec
// car running then Price =125 , add 30 every 100 meter
// speed =m/s, speed =no. puls per second . then if speed=100 add to Price 30
if(distance>=100){value_start=value_start+(chot*(d istance/100)); distance=distance%100;} // ex if distance =150m then distance/100=1 and must be put 50 in distance not put 0
else if(distance<2 && Price_cont>5000){price_cont=0; value_start +=chot;}
//value_start=123456
Price[0]=value_start/100000;//123456/100000= 1
Price[1]=value_start/10000 %10;//123456/10000= 12 %10=2
Price[2]=value_start/1000%10;//123456/1000= 123 %10=3
Price[3]=value_start/100%10;//123456/100= 1234 %10=4
Price[4]=value_start/10%10;//123456/10= 12345 %10=5
Price[5]=value_start%10;// %10=6

// cance number if last number =0 ==> mean oFF 7seg
if(Price[0]==0 && Price[1]==0) Price[0]=11;// 11 mean 7seg oFF
if(Price[0]==11 && Price[1]==0)Price[1]=11;// 11 mean 7seg oFF

check_price=0
السلام عليكم
كود:
void calculate_price()
مهمتها احتساب اسعار وهنا سوف نقارن المسافه هل هي اكبر من 100 متر او اقل من 2متر او 0 وضعت مسافه اقل من 2 يكون افضل من قول شوف هل مسافه ==0 لانه قد لايتحقق شرط وبتالي توجد مرونه في تنفيذ الشرط
كود:
if(distance>=100){value_start=value_start+(chot*(distance/100)); distance=distance%100;}
اذا مانت سياره تتحرك فانه كل 100 متر سوف يتم أحتساب سعر
ملاحظه اذا كانت مسافه =150 متر طبعا هي اكبر من 100 اذن سعر يصبح
(value_start=value_start+(chot*(distance/100 سوف تلاحظ ان 150/100=1 لماذا لان distance عدد صحيح وبتالي صار هناك خطأ في سعر وهو 50 متر ولحل هذه مشكله علينه اضافه ماتبقى من امتار ليجمع عليها امتار الجديده
ولهذا تلاحظ
كود:
distance=distance%100;
وبتالي سوف تصبح قيمه مسافه =50 وسوف يتم اضافه عليها مسافه جديده وبتالي نعالج خطأ في احتساب اسعار



اما هذا الكود راح يخزن قيمه السعر في مصفوفه لكي نعرضها في ما بعد على سفن سكمنت
كود:
Price[0]=value_start/100000;//123456/100000= 1
 Price[1]=value_start/10000 %10;//123456/10000= 12  %10=2
 Price[2]=value_start/1000%10;//123456/1000= 123  %10=3
 Price[3]=value_start/100%10;//123456/100= 1234   %10=4
 Price[4]=value_start/10%10;//123456/10= 12345    %10=5
 Price[5]=value_start%10;//      %10=6
اذا عرضت هذه القيم على سفن سكمنت فأنها سوف تظهر بهذا الشكل
000.125 وبتالي يوجد 00 لايوجد داعي لوضعهما لذا علينا حذفهما

كود:
if(Price[0]==0 && Price[1]==0) Price[0]=11;// 11 mean 7seg oFF
 if(Price[0]==11 && Price[1]==0)Price[1]=11;// 11 mean 7seg oFF
هنا اخبرته اذا كان 0 = [price[0 وكان 0 = [price[1 اذن اطفئ سفن سكمنت رقم واحد وتلاحظ كتبت 11 = [price[0 سؤال لماذا لم اكتب 255 = [price[0 لان 255 تطفئ سفن سكمنت
لاحظ الكود العرض على سفن سكمنت

كود:
else if(transfer_display==5)
                                   {
                                      for(x=0;x<8;x++) //
                                                      {
                                                       if( colomn==2 )point=127;
                                                       else point=255;
                                                       if(Check_bit((segment[price[colomn]]& point) ,7-x))DS1=1;
                                                       else DS1=0;
                                                       SH1=0;SH1=1;
                                                      }
                                    }
ماذا تلاحظ بلون احمر ستجد اني اساسا اتعامل مع مصفوفه اساسيه لتشغيل سفن سكمنت وهي segment
كود:
const char segment[]={192,249,164,176,153,146,130,248,128,144,191,255};
تلاحظ 255 في مصفوفه segment موقع 255 هو 11


اما
كود:
check_price=0;
هو يمنع دخول مايكرو الى calculate_price() لان طالما مسافه تحتسب كل 3 ثواني اذن لايوجد داعي لتنفيذ calculate_price() بشكل مستمر
تحياتي

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 30-05-2014, 09:27 PM المشاركة 66   
افتراضي تم تحديث مشروع حيث يتم تغير اسعار بشكل اوتوماتيكي


السلام عليكم

هذه الفكرة طيبة جداا

const char chot =30;
const int price_initial=450;
هل ممكن عمل
char
لحساب الامتار مثلا مئت متر

const char meter =100;
واخرى لحساب
النتبضات لنا كل سيارة لها نبضات لدخل كل نوع لهو نبضات و التعديل على كل سيارة
const char pulse =1000;
و دالة اخرى للثواني
const char seconde =10;

طيب اخي ساشرح لكم موضوع

الحريف ياخذ السيارة في النهار من الساعة 5 صباحا الى 9 ليلا بثمن
0.125 لركوب و 30 كل نلت متر او 10 ثواني

و من الساعة 9 ليلا الى 5 صباحا يتغير العد اوتومتيكي

ليصبح 200 لركوب و 45 لكل من المترار المقطوعة و ل10 ثواني انتضار

اصبح الامر معقد بعض الشيئ

اخي اشرح لي منفضلكم الكود

void calculate_price()
{
// value_start=125 start value
// car is stop then Price =125 , add 30 every 10sec
// car running then Price =125 , add 30 every 100 meter
// speed =m/s, speed =no. puls per second . then if speed=100 add to Price 30
if(distance>=100){value_start=value_start+(chot*(d istance/100)); distance=distance%100;} // ex if distance =150m then distance/100=1 and must be put 50 in distance not put 0
else if(distance<2 && Price_cont>5000){price_cont=0; value_start +=chot;}
//value_start=123456
Price[0]=value_start/100000;//123456/100000= 1
Price[1]=value_start/10000 %10;//123456/10000= 12 %10=2
Price[2]=value_start/1000%10;//123456/1000= 123 %10=3
Price[3]=value_start/100%10;//123456/100= 1234 %10=4
Price[4]=value_start/10%10;//123456/10= 12345 %10=5
Price[5]=value_start%10;// %10=6

// cance number if last number =0 ==> mean oFF 7seg
if(Price[0]==0 && Price[1]==0) Price[0]=11;// 11 mean 7seg oFF
if(Price[0]==11 && Price[1]==0)Price[1]=11;// 11 mean 7seg oFF

check_price=0
السلام عليكم
جرب هذا المشروع
http://www.4shared.com/rar/MWRp0730b..._price_co.html
تحياتي

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

الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 30-05-2014, 09:46 PM المشاركة 67   
x2


السلام اخ هادي جربة الموضوع

طيب فلنقم بعرض الوقت على 24 ساعة ليكون المشروع كذلك

عند وصول الوفت الى الساعة 21 يبدء بعرض 200 لاكن لا يحسب لا المسافة و لا 10 ثواني

و لا يزيد 45

اخ اشرح لي كيف تم الامر ...





طيب اخي هل ممكن عرض اطول وقت بعد كلمت

كلمت stop ثم اطول وقت لعرض المبلغ
و هل ممكن اخي جمع جميع المبالغ في الابروم

مثلا عتد الضغط على سبيد المر الاولى يعرض السرعة و المرت الثانية يعرض جميع المبالغ التتي تحصلنا عليها سابقا

مثلا مبلغ الخريف الاول مع الخرف الثاني ......... و يحمع جميع مبالغ في البروم و نستدعها عند الضغط مرتين على سبيد

وعمل 2 ليد واخد تدل على النهار و الاخرى تدل على دحول وفت الليل و ان امكن 2 ليد واحدة تشتعل عند الضغط على ستار و الاخرى عتد الرجوع الى عرض الوقت

اخي الليد المسؤول عن الثواني اصبح لا يعمل


التعديل الأخير تم بواسطة : المخترع01 بتاريخ 30-05-2014 الساعة 10:24 PM

الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 01-06-2014, 03:15 PM المشاركة 68   
افتراضي


السلام اخ هادي انا في انتضار و ارجو ان لا يكون طلباتي مزعجة اخي


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


السلام اخ هادي انا في انتضار و ارجو ان لا يكون طلباتي مزعجة اخي
عليكم السلام
لايوجد اي ازعاج

بالنسبه لتعديل اخير
قمت بتالي
عرفت التالي
كود:
const char chot1 =30;    // this value for Price calculate
const char chot2 =45;    // this value for Price calculate
const char price_initial_1=125;
const char price_initial_2=200;
const char meter_100=100; // mean 100 meter
ومن مكتبه ds1307 هي بترجعلي هل ساعه الان AM او PM من خلال متغير AM_PM طبعا اذا قيمته =0 فهو AM اما اذا كانت =1 فهو PM

فوضعت في داله void update_data ()
كود:
if(AM_PM==0)hours_price = hours;
      else if(AM_PM==1)hours_price = hours+12;
      if(hours_price>=5 && hours_price < 21)Price_change=0;// Price value start from 125
      else  Price_change=1;// Price value start from 200
وهنا عرفت متغير سميته hours_price ولكي اضبط الوقت لازم اتعامل مع نظام 24 ولكني لم اغير نظام وعليه استخدمت hours_price لحساب الساعات بنظام 24
فاذا كان الوقت صباحا hours_price=hours اما اذا صار مساءا فسوف يضيف 12 الى hours
وهذه قيمه لابد ان يتم تحديثها خلال أحتساب السعر وعليه تعدلت على الكود تحديث الوقت
كود:
if(ggg>30  && (kk==255  || check_price==1) && messge==0){ggg=0;update_data(); }
تلاحظ كود بلون احمر check_price==1 هنا سوف يحدث الوقت وفي نفس الوقت يقو بأحتساب السعر

ولكي يتم عرض السعر 200 او 450 قمت بالتعديل في قائمه الرئيسيه

كود:
if(start==1 && message_cont>1000)//2sec
                                         { // finish for display message start
                                          start=2;
                                          transfer_display=5;// show Price value
                                          old_value=0;
                                          colomn=0; // run 7seg start from 1
                                          end_digit=6;// run 6   7seg
                                          if(Price_change==0)value_start=price_initial_1;// Price start from 125
                                          else if(Price_change==1)value_start=price_initial_2;// Price start from 200
                                          distance=0;// initial value
                                          check_price=0;// this char equal 1 if complete measuring distance , where every 3 sec complete mesauring
                                          Price_cont=0;// reset counter time
                                          sw_speed_flag=1;// active function speed_measuring() to calcalute distance
                                          sw_speed_cont=0;//reset counter time
                                          calculate_price();// now only display 0.125 after that start   calcalute
                                         }
اما التعديل على اسعار

في داله
كود:
void calculate_price()
تم التعديل التالي
كود:
if(AM_PM==0)hours_price = hours;
 else if(AM_PM==1)hours_price = hours+12;
 if(Price_change==0)// Price value start from 125
                  {
                   if(distance>=meter_100 ){value_start=value_start+(chot1*(distance/100)); distance=distance%100;} // ex if distance =150m then distance/100=1  and must be put 50 in distance not put 0
                   else if(distance<2 && Price_cont>5000){price_cont=0; value_start +=chot1;}
                  }
 else if(Price_change==1) // Price value start from 200
                         {
                          if(distance>=meter_100 ){value_start=value_start+(chot2*(distance/100)); distance=distance%100;} // ex if distance =150m then distance/100=1  and must be put 50 in distance not put 0
                          else if(distance<2 && Price_cont>5000){price_cont=0; value_start +=chot2;}
                         }
تحياتي


الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 01-06-2014, 05:32 PM المشاركة 70   
افتراضي


طيب جدا يعني ان الكود يعمل بالتوازي مع الساعة

اخي لاكن عن دخول الوقت لا يحسب المسافة او الثواني

طيب اخي هل انتم بصدد مراجعة مشاركتي الاخيرة و هيا جمع المبالغ اللتي حصلنا عليها جميعا


الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 01-06-2014, 06:17 PM المشاركة 71   
افتراضي


طيب جدا يعني ان الكود يعمل بالتوازي مع الساعة

اخي لاكن عن دخول الوقت لا يحسب المسافة او الثواني

طيب اخي هل انتم بصدد مراجعة مشاركتي الاخيرة و هيا جمع المبالغ اللتي حصلنا عليها جميعا
السلام اخي راجعة الكود جيدااااا

اخي عند تعديل الوفت لا يعمل العداد هدا ما لاحضة اعدل الوقت ليلا او نهار يصبح العداد لا يعمل

وضعة الوقت على الساعة 20.59 و ستار توقوف على 0.125 و المفروض انه يعمل

0.125 ثم 30 + 30 الى ان يدخل وقت اليل فيزيد 45 45 و هكذا الامر في الاعة
04.58 ساتر 200 +45 +45 الى الساعة 05.00 فيزيد 30 30
انا افهم الكود جيدا اخي
و هل ممكن شرح كيف استدعي كلمت ستار و ستوب
لاني لم افهم الطريقة
اريد ان اختبر ما تعلمت عند الضغط على سبيد يكتب SPEEd


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


السلام اخ هادي جربة الموضوع

طيب فلنقم بعرض الوقت على 24 ساعة ليكون المشروع كذلك

عند وصول الوفت الى الساعة 21 يبدء بعرض 200 لاكن لا يحسب لا المسافة و لا 10 ثواني

و لا يزيد 45

اخ اشرح لي كيف تم الامر ...





طيب اخي هل ممكن عرض اطول وقت بعد كلمت

كلمت stop ثم اطول وقت لعرض المبلغ
و هل ممكن اخي جمع جميع المبالغ في الابروم

مثلا عتد الضغط على سبيد المر الاولى يعرض السرعة و المرت الثانية يعرض جميع المبالغ التتي تحصلنا عليها سابقا

مثلا مبلغ الخريف الاول مع الخرف الثاني ......... و يحمع جميع مبالغ في البروم و نستدعها عند الضغط مرتين على سبيد

وعمل 2 ليد واخد تدل على النهار و الاخرى تدل على دحول وفت الليل و ان امكن 2 ليد واحدة تشتعل عند الضغط على ستار و الاخرى عتد الرجوع الى عرض الوقت

اخي الليد المسؤول عن الثواني اصبح لا يعمل
السلام عليكم
ان شالله اخي اكمل مشروعك ومانسيت طلبك
بس أصبر عليه بعض الوقت لانشغالي حاليا
تحياتي



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